根据apache commons文档(https://commons.apache.org/proper/commons-daemon/jsvc.html),我应该可以直接使用jsvc作为守护进程运行我的应用程序而不实现Daemon类:
直接
编写一个实现以下方法的类(MyClass):
- void init(String [] arguments):这里打开配置文件,创建跟踪文件,创建ServerSockets,Threads
- void start():启动线程,接受传入连接
- void stop():通知Thread终止run(),关闭ServerSockets
- void destroy():销毁在init()
中创建的任何对象将其存储在jar文件中并按上述方式使用:
./ jsvc -cp my.jar MyClass
MyClass实现了上述方法,并没有实现Daemon类。但是,如果我尝试按上述方式调用jsvc而不在类路径中包含commons-daemon.jar,
我收到以下错误:
Cannot find the daemon loader org/apache/commons/daemon/support/DaemonLoader
java_init failed
如果我将它包含在类路径中,一切正常。,即
./jsvc -cp commons-daemon.jar:my.jar MyClass
我对文档的理解是,如果我没有使用该库中的任何内容,我就不需要包含commons-daemon.jar,而只是直接在我的类上调用jsvc并实现所需的方法。这是不正确的?我不想用我的包捆绑任何不必要的罐子。
答案 0 :(得分:0)
我应该可以直接使用jsvc作为守护进程运行我的应用程序,而无需实现守护进程类正确。
但是如果我尝试如上所述调用jsvc而不在我的类路径中包含commons-daemon.jar。这是你出错的地方。您需要commons-daemon.jar
,而您还没有实施Daemon
。 Apache JSVC仍然需要它。