2011-07-21 13 views
4

2つのJBOSSノードを持つクラスタがあります。我々は、アクティブなディレクトリからDBにすべてのユーザの詳細をロードするバッチジョブを持っています。この仕事は毎日実行されます。以前はクラスタ化されていない環境で実行されていたため、シングルトンとして設計しました。 今私たちはクラスタ化された環境を持っており、同じ結果を達成するための最良の方法は何か分かりません。バッチジョブを1日に1回しか実行しないでください。私たちは春と冬眠を使用し、私は春のバッチを見ました。私は私の質問に簡潔な答えを得ることができませんでした。クラスタ環境のJavaバッチジョブ

クラスタ環境でバッチを実装したことがある人は教えてください。このシナリオでは最高の解決策は何でしょうか?

+1

自分自身で解決策を見つけました:)。 JBossはこの種の状況で使用できるHASingleton [link](http://community.jboss.org/wiki/HASingletonDeployer)を提供しています –

答えて

5

これは、MQを介して外部からジョブを開始して開始することで実装しました(ジョブを開始するためのhttp要求も同様に機能します)。スケジューラはメッセージをキューに入れ、キューを聞いているノードが「n」ある場合でも、1つのノードがメッセージを受信し、その内容に基づいてジョブを開始します。これもHTTPで行うことができます。

実際の '解決策'は、バッチジョブを内部的なcronトリガーではなく '外部'にスケジュールすることです。実際の起動メカニズムは、それに続くものです。

0

を備えていますバッチ・ジョブをトランザクション・システムから外部化/分離することは、可用性やパフォーマンスを妨げないようにすることをお勧めします。つまり、バッチジョブをクラスター化されたアプリケーション(シンプルさ、コードの再利用など)に埋め込む理由があれば、前述の解決策とは別に、ShedLockが最適です。

その価値は何でも、batch jobs in clustered environmentsについてのブログ投稿です。

関連する問題