0

バックエンドのジョブ処理はEjb3 Scheduler(Timer Service)を利用。そのスケジューラは EAR ファイルにパックされています。この EAR を、負荷分散用の apache を使用して 2 つの glassfish サーバーにデプロイしています。問題は、2 つの glassfish がスケジューラを開始したことです。これは、同じスケジューラが 2 回開始されたことを意味します。ジョブを 2 つのサーバー間で分割する必要があります。たとえば、6 つのスケジューラーがあり、次に 3 つのスケジューラーがサーバー 1 によって開始され、他のサーバーは同じ EAR のコピーでサーバー 2 になります。

1 つのサーバーが既に起動している場合に、スケジューラを起動するように求める方法を提案できますか?

ご協力いただきありがとうございます

4

1 に答える 1

0

クラスターのような環境を持っていると思います。この場合、JVM ごとに 1 つの Bean インスタンスがあるため、シングルトンは役に立ちません。

一時データベース テーブルを共通の参照ポイントとして使用して、スケジュールされたジョブの詳細を保存できます。それぞれのスケジューラーはそこからジョブ/行を選択し、それに応じて実行結果のステータス/行を更新/削除する場合があります。

したがって、すべてのスケジューラーは共通の場所から選択し、冗長なことを行うことはありません。それ以外の場合は、おそらくそのようなシナリオ用に Quartz を構成して、代わりにアプリケーションに組み込むことができます。

于 2013-01-07T06:37:06.240 に答える