java - 使用 WinRun4j 记录 Windows 服务中的异常

标签 java maven servlets jetty winrun4j

我一直在尝试从我的 JAR 文件运行 Windows 服务。 WinRun4j 似乎能够完成这项工作,但我无法让它工作。我特别发现调试起来非常困难。我尝试了几种日志记录方法(写入 .txt 文件、WinRun4j 的 EventLog 类),但似乎无法生成任何输出。

该服务安装良好(最终..),我可以启动它。它应该启动一个 Jetty 服务器,生成一个可以通过 HTTP 访问的 XML 文件。该应用程序适用于独立版本,但不适用于服务。该服务已启动,但一旦我调用该 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扩展了Thread:

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 应用程序运行得非常好,我只是不知道如何调试这个东西。我希望你们中的一位能给我指出正确的方向:)。

最佳答案

我最终使用了 Java Service Wrapper (JSW)。这看起来要复杂得多,但最终却很容易。它还默认提供日志记录,因此我可以轻松修复错误。 JSW 在找到正确的 JDK 时遇到问题,因为 JSW 是 32 位,而我安装了 JDK1.7 64 位(和 1.6 32 位)。安装JDK1.7 32位修复了它。这也可能是 WinRun4j 的问题,但这是我永远不会知道的事情:)。

关于java - 使用 WinRun4j 记录 Windows 服务中的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22148282/

相关文章:

Java:显示前序和后序遍历

java - 仅对两个线程使用 Executors.newFixedThreadPool?

java - 行为差异 : Intellij vs Eclipse

java - 找不到 com.android.tools.build :gradle:3. 5.1

java - 无法运行我的 servlet - 错误 404

java - 使用 apache commons io 时如何解决错误 403?

maven - Java 17 Maven 编译器不允许出现 --release 错误

maven - 我可以为 Maven 中的任何项目设置默认部署吗?

java - JSP上显示的内容

java - servlet request.getParameterValues(fieldName) 返回 null 并抛出异常