一部の Java WAR で Quartz Scheduler (v2.2.1) を使用していますが、データベース エラーからの回復中に問題が発生しています。WAR は JBOSS AS 7.1 にデプロイされます。
WAR の初期化で、2 つのスケジューラーを開始します。最初のスケジューラーはクラスター化された JobStoreTX で構成され( WARはクラスターにデプロイされます)、2 つ目はサーバー固有の設定を監視するためにRAMJobStoreで構成されます。
RAM スケジューラには、 MySQLデータベースからテーブルを監視するジョブも含まれています。エラーが発生した場合、Quartz ジョブを起動し続けることが望ましいですが、実際には、スケジューラがフリーズしてこれらのジョブが起動されないことがあります。
たとえば、テストで次の方法を使用しましたが、スケジューラを再インスタンス化することはできませんでした。
/**
* Resets all scheduled jobs.
*/
public void reset(final long currentTime) {
try {
final StdSchedulerFactory schedFactory = new StdSchedulerFactory();
schedFactory.initialize("quartz.properties");
Scheduler myScheduler = schedFactory.getScheduler();
if (myScheduler != null) {
myScheduler.clear();
myScheduler.shutdown(); --> HERE, THE THREAD IS LOCKED !!!
myScheduler = null;
}
myScheduler = schedFactory.getScheduler();
loadJobs(myScheduler);
myScheduler.start();
//myScheduler.startDelayed(10);
} catch (SchedulerException e) {
LOG.error("Scheduler error !!!");
}
}
Quartz Scheduler を再起動する適切な方法はどれですか?
前もって感謝します
更新 1
Scheduler オブジェクトは同じように見えるため、shutdown を呼び出す前に StdSchedulerFactory と Scheduler を再インスタンス化する方法を変更しましたが、うまくいきませんでした。
機能的な例を教えてください。
ありがとう