【问题标题】:Using JRE_HOME in YAJSW windows service在 YAJSW windows 服务中使用 JRE_HOME
【发布时间】:2015-04-10 17:43:19
【问题描述】:

我正在评估 YAJSW 是否适用于以下 Windows 用例。

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

第二个用例非常重要,它具有两种灵活性 一种)。安装任何较新版本的 JRE(当 Java 支持停止/用户希望安装新的 JRE 时) 乙)。应用程序不受用户安装的新 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。我可以从 Windows 服务的“YAJSWSimple”服务和 yajsw(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 机器的相同用例。我希望同样的解决方案也适用于其他平台。

【问题讨论】:

    标签: java installation java-service-wrapper yajsw


    【解决方案1】:

    我在wrapper.conf 中创建了一个满足以下两种情况的 Windows 服务:

    wrapper.java.command = java
    

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

    我注意到我的设置(Windows 7 x32,YAJSW 11.11)在安装/更新 JRE 后,既没有设置 JRE_HOME 也没有设置 JAVA_HOME,echo %PATH% 显示 java 没有像它应该的那样设置在路径中,然而输入java -version 总是在安装/更新后更新。然后我发现java.exejavaw.exejavaws.exe 存在于C:\Windows\System32\ 中,并且在每次更新后都会更新。因此,在wrapper.conf 中简单地使用java 将指向最后安装的JRE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      相关资源
      最近更新 更多