在YAJSW窗口服务中使用JRE_HOME

问题描述:

我正在评估以下Windows用例的YAJSW。在YAJSW窗口服务中使用JRE_HOME

  1. 运行的Java应用程序作为服务
  2. 运行使用JRE_HOME路径变量(%JRE_HOME%\ bin中\ java.exe的)指定的Java 该服务。

第二个用例非常重要,它允许2个灵活性 a)。安装任何更新版本的JRE(当有Java支持中止时/用户希望安装新的JRE) b)。应用程序不会受到新的JRE由用户安装

wrapper.conf

wrapper.working.dir = ${wrapper_home} 
wrapper.java.command = ${jre_home}/bin/java 
wrapper.java.app.mainclass = com.myapp.launcher.Main 
wrapper.java.classpath.1 = ${wrapper_home}/jars/simple.jar 
wrapper.java.additional.1 = -Xms3m 
#wrapper.java.additional.2 = -Xmx512m 

wrapper.ntservice.name = YAJSWSimple 
wrapper.ntservice.displayname = YAJSWSimple 
wrapper.ntservice.description = YAJSW Simple Service 
wrapper.ntservice.starttype = AUTO_START 
wrapper.ntservice.interactive = false 
wrapper.ntservice.java.command = ${jre_home}/bin/java 

上面提到的配置满足使用情况1.我能够启动/从窗口服务既“YAJSWSimple”的服务,并停止命令文件(bat/startService.bat和bat \ startService.bat)

我无法通过wrapper.java.commandwrapper.ntservice.java.command配置属性实现第二个用例。

我在Windows服务列表中检查了YAJSWSimple服务的可执行属性的路径,它显示以下内容。

C:\Program Files (x86)\Java\jre7\bin\java.exe 
-classpath C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\wrapper.jar 
-Xrs -Dwrapper.service=true 
-Dwrapper.working.dir=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11 
-Djava.net.preferIPv4Stack=true -Djre_home="C:\Program Files (x86)\Java\jre7" 
-Dwrapper_home=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\bat\/.. 
-Dwrapper.java.command="C:\Program Files (x86)\Java\jre7/bin/java" 
-Dwrapper.ntservice.java.command="C:\Program Files (x86)\Java\jre7/bin/java" 
-Dwrapper.config=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\conf\wrapper.conf 
-Dwrapper.additional.1x=-Xrs 
-Djna_tmpdir=C:\Users\sathish\AppData\Local\Temp 
org.rzo.yajsw.boot.WrapperServiceBooter 

服务扩展我在wrapper.java.commandwrapper.ntservice.java.command配置属性指定的路径。

要完成我想要的路径YAJSWSimple服务的可执行文件属性为如下第二个用例

%JRE_HOME%/bin\java.exe 
-classpath C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\wrapper.jar 
-Xrs -Dwrapper.service=true 
-Dwrapper.working.dir=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11 -Djava.net.preferIPv4Stack=true 
-Dwrapper_home=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\bat\/.. -Dwrapper.java.command="%JRE_HOME%/bin/java" 
-Dwrapper.ntservice.java.command="%JRE_HOME%/bin/java" 
-Dwrapper.config=C:\Users\sathish\Softwares\yajsw\yajsw-stable-11.11\conf\wrapper.conf 
-Dwrapper.additional.1x=-Xrs 
-Djna_tmpdir=C:\Users\sathish\AppData\Local\Temp 
org.rzo.yajsw.boot.WrapperServiceBooter 
  1. 这可怎么在YAJSW实现,所以安装服务不会受JRE升级?

  2. 我打算评估linux/unix机器的相同用例。我希望同样的解决方案也适用于其他平台。

我创造出满足这两种情况下,在wrapper.conf下一个窗口服务:

wrapper.java.command = java 

这有效地利用了Java的相同版本的打字java -version时指定。在每次JRE更新后,java -version显示正在使用最新版本,因此YAJSW将使用最新版本。

我注意到在我的设置(Windows 7 x32,YAJSW 11.11)上安装/更新JRE之后,JRE_HOME或JAVA_HOME都没有设置,并且echo %PATH%显示java未设置为应该的路径,打字java -version总是在安装/更新后更新。然后我发现java.exe,javaw.exejavaws.exe存在于C:\Windows\System32\中,并且在每次更新后更新。因此,只需在wrapper.conf中使用java将指向上次安装的JRE。