Apache + tomcat + jnlp

我们在Apache后面有一个Tomcat实例。 我们使用mod_jk。

模块configuration是:

LoadModule jk_module modules/mod_jk.so <IfModule mod_jk.c> JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " </IfModule> 

这里的VirtualHostconfiguration:

 <VirtualHost *:9090> ... JkMount /Web/* worker-Web JkMount /Web worker-Web </VirtualHost> 

workers.properties文件:

 worker.list=worker-Web worker.worker-omiapWeb.port=8209 worker.worker-omiapWeb.host=localhost worker.worker-omiapWeb.type=ajp13 

这个configuration适用于jsp,html …但是我们有一个JNLP文件:

 <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0" codebase="$$codebase"> <information> <title>Gestor Impresiones</title> <vendor>.</vendor> </information> <resources locale="es"> <jar href="gestorImpresiones.jar"/> <jar href="jasperreports-1.2.5.jar"/> <jar href="commons-httpclient-3.1-beta1.jar"/> <jar href="commons-logging-1.1.jar"/> <jar href="commons-codec-1.3.jar"/> <jar href="commons-javaflow-20060411.jar"/> <jar href="commons-collections-3.1.jar"/> <jar href="poi-3.0.1-FINAL-20070705.jar"/> <jar href="jdic.jar"/> </resources> <resources os="Windows"> <jar href="windows/jdic_stub.jar"/> <nativelib href="windows/jdic-native.jar"/> </resources> <resources os="Linux"> <jar href="linux/jdic_stub.jar"/> <nativelib href="linux/jdic-native.jar"/> </resources> <resources locale="es"> <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/> </resources> <security> <all-permissions/> </security> <application-desc main-class="stacks.printing.cliente.GestorImpresionLauncher"/> </jnlp> 

问题是,下载JNLP资源随机失败(如果连接速度很差,则会失败更多)。

如果我们直接访问Tomcat,一切正常。

有任何想法吗?

编辑1:

Apache日志错误:

 [Thu Jul 01 09:51:45 2010] [868:5096] [info] jk_connect.c (566): connect to 127.0.0.1:8209 failed (errno=61) [Thu Jul 01 09:51:45 2010] [868:5096] [info] jk_ajp_common.c (869): Failed opening socket to (127.0.0.1:8209) (errno=61) [Thu Jul 01 09:51:45 2010] [868:5096] [error] jk_ajp_common.c (1359): (worker-omiapWeb) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=61) [Thu Jul 01 09:51:45 2010] [868:5096] [info] jk_ajp_common.c (2186): (worker-omiapWeb) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2) [Thu Jul 01 09:51:45 2010] [868:5096] [error] jk_ajp_common.c (2204): (worker-omiapWeb) Connecting to tomcat failed. Tomcat is probably not started or is listening on the wrong port [Thu Jul 01 09:51:45 2010] [868:5096] [info] mod_jk.c (2364): Service error=-3 for worker=worker-omiapWeb 

编辑2:

server.xml AJP部分:

 <!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8209" maxThreads="300" connectionTimeout="600000" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" /> 

尝试将您的工作超时设置为高于默认值:

worker.worker-omiapWeb.socket_timeout = 60

worker.worker-omiapWeb.connect_timeout = 2000

worker.worker-omiapWeb.prepost_timeout = 1000

worker.worker-omiapWeb.reply_timeout = 30000

这在你的workers.properties文件中。 你可能需要更高的一个或更多的 – 我们需要看你的apache日志文件,以确定哪一个是你造成的问题。

为什么从tomcat提供JNLP应用程序? WebStart使用普通的HTTP GET请求来访问JNLP文件,然后使用.jar文件。 你可以把这些放在Tomcat的外面,让Apache独自完成工作。

您可能还想要发布您的server.xml AJP连接器的位。 一种可能性是你的Tomcat端的连接器没有足够的容量(maxThreads&timeout)来处理Apache发送连接的数量。