我只是下载了 JSW 社区版,解包到一个目录中:
c:\servicetest
所以这里我有一个 bin、conf、lib 和 log 子目录等。从现在开始,这将是(根)。
我将 (root)/lib/wrapper.jar 引用到我的 ide (netbeans) 中并创建了一个非常简单的服务(记住类名是 Main):
public class Main extends WrapperSimpleApp {
public Main(String[] args) {
super(args);
}
@Override
public void run() {
while(true) {
Logger.getLogger(Main.class.getName()).log(Level.INFO, "I'm alive");
try
{ Thread.sleep(2000); }
catch (InterruptedException ex)
{ return; }
}
}
}
如您所见,它基本上只记录一条消息。但实际上它都没有开始。
我编译了项目(MyProject.jar),将 jar 复制到(根)目录并修改了(根)/config/wrapper.conf 添加:
wrapper.java.classpath.3=../MyProject.jar
和
wrapper.java.mainclass=textappender.Main
然后我在命令行中安装了该服务,其中:
C:\servicetest\bin>wrapper -i ../conf/wrapper.conf
然后我通过 services.msc 控制面板或通过
C:\servicetest\bin>wrapper -t ../conf/wrapper.conf
在 logs/wrapper.log 我得到:
ERROR | wrapper | 2012/05/21 21:35:11 | JVM exited while loading the application.
更新 1
按照 Tanuki Software 的建议,我在我的 (root)/config/wrapper.conf 中进行了设置(好吧,因为它已经存在,所以没有注释):
wrapper.debug=TRUE
现在我明白了:
INFO | jvm 1 | 2012/05/22 10:46:37 | WrapperManager Debug: WrapperManager.stop(1) called by thread: main
INFO | jvm 1 | 2012/05/22 10:46:37 | WrapperManager Debug: Backend not connected, not sending packet STOP : 1
INFO | jvm 1 | 2012/05/22 10:46:37 | WrapperManager Debug: Stopped checking for control events.
DEBUG | wrapper | 2012/05/22 10:46:37 | Pause reading child process output to share cycles.
INFO | jvm 1 | 2012/05/22 10:46:37 | WrapperManager Debug: Thread, main, handling the shutdown process.
INFO | jvm 1 | 2012/05/22 10:46:37 | WrapperManager Debug: shutdownJVM(1) Thread: main
INFO | jvm 1 | 2012/05/22 10:46:38 | WrapperManager Debug: wait for 0 shutdown locks to be released.
INFO | jvm 1 | 2012/05/22 10:46:38 | WrapperManager Debug: Backend not connected, not sending packet STOPPED : 1
INFO | jvm 1 | 2012/05/22 10:46:38 | WrapperManager Debug: calling System.exit(1)
DEBUG | wrapper | 2012/05/22 10:46:38 | JVM process exited with a code of 1, setting the wrapper exit code to 1.
但鉴于我的实现非常简单,我无法猜测出了什么问题。