直接实现JSVC而不使用apache-commons-daemon jar

时间:2018-03-19 20:28:44

标签: java jsvc apache-commons-daemon

根据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并实现所需的方法。这是不正确的?我不想用我的包捆绑任何不必要的罐子。

1 个答案:

答案 0 :(得分:0)

我应该可以直接使用jsvc作为守护进程运行我的应用程序,而无需实现守护进程类正确。

但是如果我尝试如上所述调用jsvc而不在我的类路径中包含commons-daemon.jar。这是你出错的地方。您需要commons-daemon.jar,而您还没有实施Daemon。 Apache JSVC仍然需要它。