私は、5分間待機し、システムがまだ回復されていない場合にアラートを発する回復モニターに取り組んでいます。モニターは起動時に起動し、アラートを1回だけ起動する必要があります。ソースコードは次のようになります。
@Stateless
public class RecoveryMonitor {
@Inject TimerService timerService;
@Inject MyAlertService alertService;
@Inject SystemRecovery systemRecovery;
public void scheduleMonitor() {
timerService.createSingleActionTimer(TimeUnit.MINUTES.toMillis(5),
new TimerConfig);
}
@Timeout
public void timeout() {
if (!systemRecovery.isDone) {
alertService.alert("System recovery failed");
}
}
}
したがって、ここでの問題は、タスクをスケジュールする方法、つまり、scheduleMonitorメソッドを呼び出す方法です。@PostConstructは許可されていないため、使用できません。@Scheduleの使用を考えていますが、メソッドを定期的に実行し、1回だけ実行します。任意の解決策および/または提案を歓迎します。ありがとう。
L
更新:クラスをステートレスではなくすることで、たとえば@Singletonにすることで、@PostConstructを使用してスケジューリングを開始できます。これは完全な解決策ではありませんが、私にとってはうまくいきます。
@Singleton
public class RecoveryMonitor {
@Inject TimerService timerService;
@Inject MyAlertService alertService;
@Inject SystemRecovery systemRecovery;
@PostConstruct
public void scheduleMonitor() {
timerService.createSingleActionTimer(TimeUnit.MINUTES.toMillis(5),
new TimerConfig);
}
@Timeout
public void timeout() {
if (!systemRecovery.isDone) {
alertService.alert("System recovery failed");
}
}
}