現在、バックエンドでメッセージ駆動型 Bean (EJB3) を使用して ActiveMQ から読み取りを行っています。私が直面している問題は、メッセージ駆動型 Bean で ActiveMQ からメッセージを受信するとすぐに、JSF ページのテーブルを更新する必要があることです。
私が試すことができる技術の提案は素晴らしいでしょう。現在、プライムフェイスとグラスフィッシュを使用しています。
どうも
現在、バックエンドでメッセージ駆動型 Bean (EJB3) を使用して ActiveMQ から読み取りを行っています。私が直面している問題は、メッセージ駆動型 Bean で ActiveMQ からメッセージを受信するとすぐに、JSF ページのテーブルを更新する必要があることです。
私が試すことができる技術の提案は素晴らしいでしょう。現在、プライムフェイスとグラスフィッシュを使用しています。
どうも
primefaces poll を使用して、新しいメッセージがあるかどうかを定期的に確認できます
<h:form>
<p:dataTable id="msgTable" var="msg" value="#{tableBean.messages} ">
...
</p:dataTable>
<p:poll interval="3"
actionListener="#{mdBean.messagesAvailable}" update="msgTable" />
</h:form>
詳細については、 http://97.107.138.40:8080/prime-showcase/ui/ajaxPollHome.jsfを参照してください。
(JSF) マネージド Bean メソッドをメッセージ駆動型 Bean から直接呼び出すことは実際にはできません。これは、アクティブなスコープと時間がまったく異なるためです。
マネージド Bean は、基本的に HTTP リクエスト中にアクティブです。その後、その状態はまだどこかに保存されている可能性があります (つまり、アプリケーション、セッション、または会話スコープが使用されている場合) が、アクティブには何もしていません。
できることは、基本的にバッキング Bean からの要求を一時停止するコメットのようなテクノロジを使用することです。その後、リクエストを再開する前にバッキング Bean を待機させることができます。メッセージ駆動型 Bean がリッスンしているのと同じ JMS キューをマネージド Bean にリッスンさせるか (JMS が使用されていると仮定)、マネージド Bean に CDI イベント バスをリッスンさせることができます。MDB が ActiveMQ から何かを受け取るとすぐに、MDB はこれを CDI イベント バスに置くことができ、バッキング Bean がそれを受け取ります。
実際には、MDB はブリッジ コンポーネントとして機能しています。
Devoxx '10 に関するいくつかのプレゼンテーションで、あなたが求めているものと非常によく似たものを示しました。
とりわけ、このプレゼンテーションはそのようなものに入ったと思います: http://www.adam-bien.com/roller/abien/entry/pets_and_aliens_running_on