2017-03-20 15 views
0

実行中のMDBインスタンスの識別子を取得できますか? 私はMDBのプールを持っています(例えば10)、同じJMSXGroupIDを持つすべてのメッセージを同じMDBインスタンスで処理するために、メッセージのプロパティJMSXGroupIDを設定しました。 現在のMDBインスタンスの識別子をログに記録することを確認するには、どうすればその情報を取得できますか?MessageDrivenBeanインスタンス識別子

+0

MDBテクノロジは、パフォーマンス上の理由からステートレスです。あなたがステートフルな方法でそれを使用したいなら、あなたのアーキテクチャを元に戻してリファクタリングするべきです。あなたは間違った道にいる。 IDを追加するだけの場合は、アプリケーションスコープのカウンタを使用して@PostConstructイベントハンドラでIDを追加できます。 –

答えて

2

おそらくそれはあなたのMDBベンダーAPIを使用して達成されるかもしれませんが、EJB仕様によるそのような識別子はありません。

@PostConstructメソッドでは一意のMDB識別子をいつでも作成できますが、私の意見では、プール内のすべてのBeanは同じ方法で処理する必要があるため、良い解決策ではありません。

JMSXGroupIDをメッセージヘッダとして設定し、MDBのメッセージセレクタを使用して、指定されたMDB実装でそれを処理して、複数のBeanが特定のキュー(example)でリッスンするようにすることはできますか?

上記のヘッダを抽出し、JMSXGroupIDごとに達成したい状態のEJBシングルトンBeanを呼び出す汎用MDB Beanを作成することもできます。

+0

同じキューでリッスンするさまざまなMDBのセレクタが既にあります。同じエンティティを基準にしたメッセージの到着順序を維持するためにJMSXGroupIDを使用しています。同じエンティティに関連するすべてのメッセージを同じMDBに送信すると、それらが順番に処理されることを期待できますか? – Wallkan

+0

ActiveMQは、すべてのメッセージが同じMDBインスタンスによって処理されることを保証するため、@PostContructメソッドで一意の識別子を作成できます。 – iskramac

+0

そして、hashCode()メソッドを使用して異なるインスタンスを識別する場合は、または、同じクラスのすべてのMDBが同じhashCodeを共有しますか? – Wallkan