1

そこで、 OSGI のクリーン シャットダウンを開始しました 。ここで、重大な障害が発生した場合に 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);
}

上記のコードは 1 対 1 ではありませんが、アイデアは得られます。

于 2011-07-05T14:37:02.827 に答える