1

对使用过 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!!

我在每个后续请求中都会收到相同的消息。

在研究代码时,我发现当应用程序启动时,会执行以下步骤:

  1. AbstractPool 调用 objectfactory 以创建一个新的 Server 对象并将其添加到阻塞队列中。

     T object = objectFactory.create();
     queue.add(object);
     poolSize.getAndIncrement();
    
  2. 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. 与文档相反,当留空时的参数scriptapp.propertiestomcat中不起作用。它是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

4

2 回答 2

1

对于使用 jetty 或 tomcat 的我们,我们必须明确给出这两个文件的位置,这是关键,确保 app.properties 文件中列出的目标目录中的所有文件都不是只读的。

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 执行。

于 2013-06-25T12:50:22.563 回答
0

java 的导出服务器最近更新了。我们注意到很多人对 phantomJS javascripts 的位置有疑问。phantomjs 所需的所有 javascript 文件现在都被解压缩到一个临时位置并从中提取以供应用程序以后使用。

有了这个,您不必再指定脚本的文件位置。

于 2013-06-26T11:04:05.007 回答