对使用过Highcharts Export Server的读者提出这个问题:
我正在尝试将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()
块和控件,并且永远不会将Server实例添加到队列中。因此,池耗尽了错误。
因此,必须在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
答案 0 :(得分:1)
对于使用jetty或tomcat的我们,我们必须明确地给出两个文件的位置,这是踢球者,确保app.properties文件中列出的目标目录中的所有文件都不是只读的。 / p>
exec = C:/jetty-distribution-9.0.3.v20130506/webapps/Scripts/phantomjs/phantomjs.exe
script = C:/jetty-distribution-9.0.3.v20130506/webapps/Scripts/phantomjs/highcharts-convert.js
C:/jetty-distribution-9.0.3.v20130506/webapps/Scripts/phantomjs
目录和所有内容未标记为只读。由于某种原因,这允许脚本和phatomjs.exe可由WAR执行。
答案 1 :(得分:0)
最近更新了java的export-server。我们注意到很多人都对phantomJS javascripts的位置有疑问。 phantomjs所需的所有javascript文件现在都已解压缩到临时位置并从中获取以供应用程序以后使用。
使用此功能,您不必再指定脚本的文件位置。