JAR ファイルから Windows サービスを実行しようとしています。WinRun4j は仕事をすることができるようですが、私はそれを働かせることができません。特にデバッグが非常に難しいと感じています。ログを記録する方法をいくつか試しました (.txt ファイルへの書き込み、WinRun4j の EventLog クラス) が、出力を生成できないようです。
サービスは正常にインストールされ (最終的に..)、開始できます。HTTP 経由でアクセスできる XML ファイルを生成する Jetty サーバーを起動する必要があります。このアプリはスタンドアロン バージョンでは機能しますが、サービスでは機能しません。サービスは開始されますが、URL を呼び出すとすぐにエラーが発生せずに停止します。
これは私のサービスクラスです:
package com.some.package;
import org.boris.winrun4j.AbstractService;
import org.boris.winrun4j.ServiceException;
/**
* A basic service.
*/
public class StockService extends AbstractService {
private StockServer srv;
public int serviceMain(String[] args) throws ServiceException {
while (!shutdown) {
try {
Thread.sleep(5000);
} catch(InterruptedException e) {
}
if(srv == null) {
try {
srv = new StockServer();
srv.start();
} catch (Exception e) {
}
}
}
return 0;
}
}
serviceMain クラスから Jetty サーバーを起動すると、サービスが起動しないことがわかりました。新しいスレッドを開始する必要がありました。したがって、StockServer はスレッドを拡張します。
public class StockServer extends Thread {
private Server server;
public void run() {
if (server == null) {
try {
server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/example");
StockServlet stockServlet = new StockServlet();
context.addServlet(new ServletHolder(stockServlet), "/stock/*");
server.setHandler(context);
server.setStopAtShutdown(true);
server.start();
server.join();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
Java アプリケーションとしては問題なく動作するので、これをデバッグする方法がわかりません。あなたの一人が私を正しい方向に向けることができることを願っています:)。