私はJavaアプリケーションを開発しています。また、ユーザーが同じ Java アプリケーションの複数のインスタンスを同時に実行できないようにしたいと考えていました。Java用のJUniqueアプリロックライブラリを使用しましたが、うまく機能します。しかし、クラッシュすると深刻な問題が発生します。
アプリケーションがクラッシュすると起動できず、AlreadyLockedException が返されるだけです。アプリケーションをロックするために使用したコードは次のとおりです。
public static boolean isRunning() {
boolean alreadyRunning = false;
try {
JUnique.acquireLock(appId);
alreadyRunning = false;
} catch (AlreadyLockedException e) {
logger.error("Unable to acquire lock. There is an instance already running");
alreadyRunning = true;
} catch (Throwable t) {
logger.error("Unable to acquire lock. ", t);
}
return alreadyRunning;
}
ロックを解除するコードは次のとおりです。
public static void release() {
try {
JUnique.releaseLock(appId);
} catch (Throwable t) {
logger.error("Error releasing the lock", t);
}
}
予想されるクラッシュに対処するために release() メソッドを使用できます。しかし、実際の問題は、実行時にアプリケーションが予期せずクラッシュしたときに発生します。取得したアプリケーションのロックを解除せずに、アプリケーションを終了します。
アプリケーションが予期せずクラッシュした場合、どのように JUnique ロックを解除できますか?