对使用过 Highcharts 导出服务器的读者的这个问题:我正在尝试将 Highcharts-3.0.2 作为 Java 中的导出服务器运行。我用 tomcat-7.0.41 设置它并尝试使用提供的示例 (/demo)。当 /demo 页面成功加载时,在将请求发送到generate image
日志时显示:
[ERROR] [http-bio-8080-exec-6 07:00:08] (SVGConverter.java:requestServer:109) POOL EXHAUSTED!!
我在每个后续请求中都会收到相同的消息。
在研究代码时,我发现当应用程序启动时,会执行以下步骤:
AbstractPool 调用 objectfactory 以创建一个新的 Server 对象并将其添加到阻塞队列中。
T object = objectFactory.create(); queue.add(object); poolSize.getAndIncrement();
Server 对象是一个新的 java.lang.Process 对象。创建后,它会侦听输入流。
process = new ProcessBuilder(commands).start(); final BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String readLine = bufferedReader.readLine(); if (readLine == null || !readLine.contains("ready")) { throw new RuntimeException("Error, PhantomJS couldnot start"); }
块和控件不会返回,readLine()
并且服务器实例永远不会添加到队列中。因此,池耗尽错误。所以,必须有一些东西inputstream
要读取,以便控制可以继续。我的问题是我在这里错过了什么?
已解决:问题出在app.properties
. 与文档相反,当留空时的参数script
在app.properties
tomcat中不起作用。它是highcharts-convertor.js
在进程中执行时(参见上面的代码)在inputstream
.
编辑开枪太快了!script
留空时的参数按照文档中的说明工作。我可以在日志中看到:
[DEBUG] [pool-1-thread-1 01:46:35] (ServerObjectFactory.java:create:33) in makeObject,
C:\Users\...\webapp\phantomjs,
C:/Users/.../workspaces/.../.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/...highcharts-convert.js, 127.0.0.1
我不明白使用所有必需参数正确构造命令时出了什么问题?明确给出工程highcharts-convertor.js
中参数script
的完整路径app.properties
。
有人遇到这种行为吗?我正在使用 eclipse juno 服务版本 2,buildid:20130225-0426,Highcharts-3.0.2,tomcat-7.0.41,win7 64bit