1

所以我启动了一个干净的 OSGI 关闭 关闭 OSGi 容器(特别是 Equinox)的最佳方法 我使用 bundle.stop() 方法来实现相同的目的。现在问题出现了,如果我调用 bundle.stop() 以防发生一些严重故障,执行干净关闭意味着我的进程退出代码为 0,有什么方法可以发送退出代码为 1调用 bundle.stop() 后的进程,以便进程使用者知道这不是正常关闭?

谢谢!

4

1 回答 1

1

您应该使用org.eclipse.equinox.app.IApplication接口,它使您能够从start()方法返回结果,然后作为退出代码从 Java 进程返回。如果您不想使用此 API,以下代码显示 Equinox 本身如何控制 Java 进程的退出代码:

import org.eclipse.osgi.service.environment.EnvironmentInfo;

private static EnvironmentInfo getEnvironmentInfo() {
    BundleContext bc = Activator.getContext();
    if (bc == null)
        return null;
    ServiceReference infoRef = bc.getServiceReference(EnvironmentInfo.class.getName());
    if (infoRef == null)
        return null;
    EnvironmentInfo envInfo = (EnvironmentInfo) bc.getService(infoRef);
    if (envInfo == null)
        return null;
    bc.ungetService(infoRef);
    return envInfo;
}


public static void setExitCode(int exitCode) {
    String key = "eclipse.exitcode";
    String value = Integer.toString(exitCode); // the exit code
    EnvironmentInfo envInfo = getEnvironmentInfo();
    if (envInfo != null)
        envInfo.setProperty(key, value);
    else
        System.getProperties().setProperty(key, value);
}

上面的代码不是一一对应的,而是给出了思路。

于 2011-07-05T14:37:02.827 回答