2012-06-28 4 views
6

私は、クラスタとEJB 3.1アプリケーションで動作するGlassfish 3.1.2を持っています。日 1つのノードとすべてのクラスタでスケジュールされたメソッドを実行する方法

  • 後に一度だけ(単一ノード上の)実行さ

    • 一種と、すべてのノード上で動作する他の種類(すべての1-2分:そして、私は自分のアプリケーションでのスケジュール方法の2種類が必要) - 彼らはsyncronの方法を実行する必要はありません!要件は、この種のものがすべてのノードで実行されることです。

    私はこのクラスタから始めるには手がかりがありません - 問題は@Scheduleで可能ですか?

  • +0

    この回答のこの回答への回答です:http://stackoverflow.com/a/11465568/280244 – Ralph

    答えて

    8

    私はまったく同じ問題に直面しました(clusterタイマーとper nodeタイマーが必要です)、この質問に出くわしました。だから、興味のある人のために:あなたは(永続...、=真)@Scheduleでタイマーを宣言すると

    、あなたは(移行することができます)タイマーDBに保存されているclusterタイマーを取得します

    の場合@Schedule(...、persistent = false)でタイマーを宣言すると、nodeタイマーはタイマーdbに保存されません(マイグレーションできません)。

    +0

    これはちょうど観測、またはいくつかのドキュメンタリーですか? – Ralph

    +0

    @Ralphこの動作は、私のアプリケーション(Glassfish 3クラスタで動作している)で確認されています。私は正確なドキュメントを見つけることができませんが、私はその動作を説明することができます: タイマがタイマーデータベース(私の場合はMySQLデータベース、あなたはクラスタ内の埋め込みDBを使用することはできません)で永続的であれば、データベースを介したノード。 非永続タイマーの場合、各ノードはタイマーが他のノードに存在することを知る方法がないため、各タイマーに新しいタイマーが作成されます。 – Cascader

    +0

    また、[this](http://www.java.net/forum/topic/glassfish/glassfish/non-persistent-singleton-timers-clustered-environment-using-gf31) – Cascader

    0

    JMSを使用して見ることができます。単一のノードで実行する必要があるメソッドでは、キューを使用し、すべてのノードで実行する必要があるメソッドに対してはトピックを使用します。

    関連する問題