リモートで取得されたマネージドBean(ビュースコープ)からのデータをテーブルに表示するjsfビューがあります。
現在、データは、primefaces ポーリング コンポーネントを使用したクライアント ビューからのポーリングによって更新されます。
大量のトラフィックがクライアントに送信され、primefaces が server-push をサポートするようになったため、これでは十分ではありません。データが変更された場合にのみ、データをリロードしてクライアント ビューにプッシュしたいだけです。
これは、Web 層からアプリケーション層へのポーリングで のようなメソッドを呼び出して実現する必要がありますhasChanged(...)
。データが変更された場合、Web 層はクライアントに通知をプッシュしてデータをリロードします。
現在のクライアントの投票
クライアント>> Web 層>>アプリケーション層
クライアントは ajax を介して Web 層にデータを要求し、それが再びアプリケーション層にデータを要求し、ビューを更新します
希望する Web 層のポーリングとプッシュ
クライアント<< Web 層>>アプリケーション層
データが変更された場合は web-tier が app-tier をポーリングし、代わりにリロードし、ビューを更新するようにクライアントに通知 (プッシュ) します。
アプローチ:
Web 層のマネージド Bean でポーリングを実現するための最良のアプローチは何ですか?
- マネージド Bean の TimerTask
タイマーを使用したスケジュールされたタスクの JSF マネージド Bean でのスレッドの生成 - Schedule アノテーションを持つ追加の EJB
- TimerService を使用した追加の EJB
- 他の?
編集:
アーキテクチャ: (3 層)
- Server1: データベース
- Server2: アプリケーション層 (リモート EJB + Hibernate を使用する EAR)
- Server3: Web 層 (JSF 2.0 + Primefaces 3.4 を使用した WAR)
- クライアント: ブラウザ