開始までに時間がかかるサービスがいくつかあります(1〜2分)。このプロセス中に、誰かがサービスの強制シャットダウン(つまり遷移STARTING -> STOPPING
)を要求する場合があります。AbstractServiceクラスのソースを見るとdoStop()
、現在の状態STARTING
、NEW
つまり停止要求が受信されたときに基になるクラスに通知されない場合の呼び出しがないことがわかります。
switch (snapshot.state) {
case NEW:
snapshot = new StateSnapshot(State.TERMINATED);
terminated(State.NEW);
break;
case STARTING:
snapshot = new StateSnapshot(State.STARTING, true, null);
stopping(State.STARTING);
break;
case RUNNING:
snapshot = new StateSnapshot(State.STOPPING);
stopping(State.RUNNING);
doStop();
break;
case STOPPING:
case TERMINATED:
case FAILED:
// do nothing
break;
default:
throw new AssertionError("Unexpected state: " + snapshot.state);
}
状態に関係なくクリーンアップを実行する必要があるので、シャットダウンについて通知を受け取る方法はありますか?サブクラス内でService.Listenerを使用することをお勧めしますか?