Resin-3.0.13(win32)服务模式下的类路径

公司的一台服务器将Resin-3.0.13安装为服务模式运行客户网站的论坛,下午到机房部署一新服务的时候遇到很奇怪的问题。

在系统环境变量classpath中把需要用到的jar包都加入进去,部署war包,浏览地址。。。结果报出找不到类?!没找到log4j?于是把log4j的jar包copy到应用的WEB-INFlib下,刷新。。
这次报出数据库连接池的配置文件找不到?!但是类路径已经在classpath中了呀。

不得已,手动执行httpd.exe,应用正常启动了?!没有任何问题。那为什么作为服务启动就找不到类路径呢?

突然想起在gentoo linux下配Resin的时候,也是一样的现象,把jar包都加到/etc/profile中,重启动Resin还是找不到类。因为需要在作为服务启动的<resin_home>/bin/wrapper.pl脚本中指定类路径,否则Resin服务是读不到系统变量的,自然就找不到类了。

在windows下Resin用httpd.exe作为服务启动,玄机就在这里啦。。。如果已经执行过。
"dos> resin/bin/httpd -install"
可以在系统服务中看到“Resin Web Server”服务,“可执行文件的路径”就包含了安装Resin作为服务时的系统classpath变量,比如:


"e:usrresin-3.0.13httpd.exe"
-service -env-classpath ".;k:j2sdk1.4.2libdt.jar;k:j2sdk1.4.2libtools.jar;j:n_usrlib"
-java_home  "k:j2sdk_nbj2sdk1.4.2"


我明白鸟!!安装Resin服务的时候httpd.exe才读取当时的系统变量,而手动执行httpd.exe是即时读取的系统变量。所以之前我的加入的类路径都没有被Resin服务用到,在cmd.exe下重新安装Resin服务,就可以重读到新加入系统的classpath变量。
执行:
dos> resin/bin/httpd -remove
dos> resin/bin/httpd -install
嘿嘿嘿~~ 再查看系统的“Resin Web Server”服务,classpath变量都读进去了!

发表您的评论

您的邮箱地址不会被公开。 必填项已用 * 标注