highcharts导出服务器不能开箱即用(Java)

时间:2013-06-25 07:48:18

标签: java highcharts phantomjs

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

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

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

  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");
    }
    
  3. 不返回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

2 个答案:

答案 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文件现在都已解压缩到临时位置并从中获取以供应用程序以后使用。

使用此功能,您不必再指定脚本的文件位置。