インメモリデータベースへの接続を使用するRCPアプリケーションがあります。Windowsをシャットダウンすると、データベースへの接続を閉じる機会を与えずにアプリケーションが強制終了されるという状況が1つあります。
少し調べてみたところ、このイベントを検出してJavaアプリケーションでクリーンアップを行うには、シャットダウンフックを追加するのが最善の方法のようです。ただし、RCPアプリケーションがあり、複数のエディターが開いている可能性がある場合、これを処理する正しい方法は何ですか?
インメモリデータベースへの接続を使用するRCPアプリケーションがあります。Windowsをシャットダウンすると、データベースへの接続を閉じる機会を与えずにアプリケーションが強制終了されるという状況が1つあります。
少し調べてみたところ、このイベントを検出してJavaアプリケーションでクリーンアップを行うには、シャットダウンフックを追加するのが最善の方法のようです。ただし、RCPアプリケーションがあり、複数のエディターが開いている可能性がある場合、これを処理する正しい方法は何ですか?
WorkbenchAdvisor を拡張するクラスの preShutdown メソッドをオーバーライドする必要があります。シャットダウン プロセスを停止するには false を返し、続行するには true を返します。
RCPアプリケーションを実際に起動する前に、IApplication実装者のstart()メソッドから実行する次のコードを試しました。
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
if (PlatformUI.isWorkbenchRunning()) {
PlatformUI.getWorkbench().close();
}
logger.info("Shutdown request received");
cleanup();
}
});
cleanup()がデータベースへの接続を閉じる場所。Closeは、開いているドキュメントがあるかどうかを保存するようにユーザーに要求する必要があります。