6

サーブレット コンテキスト リスナーのcontextInitialized()メソッドから EJB サービスを呼び出す必要があります。アプリケーションは JBOSS で実行されていますが、コンテキスト リスナーは正常に動作しますが、JNDI ルックアップを介して EJB Bean にアクセスできません。

JBOSS での Web デプロイメントは、EJB Bean が JNDI ツリーにバインドされる前に行われるためです。これからどうやって乗り越える?JNDI バインドを早期に構成する方法や、EJB が完全にデプロイされた後で Web デプロイメントを開始する方法はありますか?

Thread.sleep()メソッドのサービス呼び出しの前に配置contextInitialized()しましたが、JBoss5.1.0 GA では正常に動作していますが、同じバージョンの他のマシン JBoss では同じことが動作しませんでした。

アプリケーションがこれを必要とするのは、DB からいくつかのマスター データをロードし、それを Web レイヤーで利用できるようにする (一種のキャッシュ) ためです。JBOSS startupmbean はこの要件に適合しますか? はいの場合、データを Web レイヤーで使用できるようにするにはどうすればよいですか?

また、代替手段があれば提案してください。

4

1 に答える 1

1
  • で EJB をポーリングしcontextInitialized()ます。したがって、特定の時間だけスリープするのではなく、EJB への接続を試みます。それが失敗した場合は、EJB が使用可能になるまでスリープして再試行します。この場合、コンテキストの初期化はブロックされます。

  • キャッシュを遅延キャッシュとして実装します。最初のクエリ中にキャッシュを埋めます (また、同じポーリング手順を使用します。EJB に接続し、利用可能になるまで再試行します)。この場合、キャッシュはブロックされます。

  • 配置を 2 つの部分に分割できます。1 つは EJB 用、もう 1 つは Web アプリケーション用です。次に、最初のデプロイを行い、EJB がバインドされるまで Web アプリケーションのデプロイを遅らせます (ログ ファイルを監視するか、コマンド ライン アプリから EJB へのバインドを試行します)。

于 2014-06-24T15:22:47.210 に答える