そこで、 OSGI のクリーン シャットダウンを開始しました 。ここで、重大な障害が発生した場合に bundle.stop() を呼び出すと、問題が発生します。クリーン シャットダウンを実行すると、プロセスの終了コードが 0 になります。終了コード 1 を送信する方法はありますかbundle.stop() を呼び出した後のプロセス。これにより、プロセスの消費者は、これが通常のシャットダウンではなかったことを認識できますか?
ありがとう!
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 ではありませんが、アイデアは得られます。