4

Glassfish3.1で実行されているJavaEEアプリケーションがあり、Javaで記述されたレガシーシステムからの通知を受け入れる必要があります。このレガシーシステムは、システムの通知をサブスクライブすることを希望する外部アプリケーションが使用する必要があるJARファイルを提供します。

Java SEアプリケーションで使用する場合、ライブラリは次のように機能します。

  1. ライブラリは、レガシーシステムへの接続パラメータで初期化されます
  2. ライブラリはシステムに接続し、通知をリッスンします
  3. 私たちのアプリケーションは、インターフェースを実装することで通知を登録します
  4. 通知が来るたびに、実装クラスのメソッドが呼び出されます

システムから通知が送信されるたびにEJBメソッドが呼び出されるように、JavaEEでも同じことを再現したいと思います。

JCAは進むべき道ですか?ライブラリを初期化し、それ自体をリスナーとして登録するシングルトンEJBはどうですか?

このトピックに関する良い例を見つけるのは難しいので、何かガイダンスがあればありがたいです。

4

1 に答える 1

6

理論的には、JCAは実際にこれに使用する専用のAPIになります。

アプリケーションがEARであり、EJBクラスが純粋なEJBモジュールに存在する場合、EJBが実行できることにはかなりの制限があります。JCAは、EJBで許可されていないこと(リフレクション、静的フィールド、スレッドの作成、ネイティブライブラリのロードなど)を具体的に実行できます。

欠点は、JCAが「慎重に」文書化されていないAPIであり、「通常の」アプリケーションプログラマーよりも、説明するようなレガシーシステムのベンダーが使用することを目的としていることです。JCAの方法を採用したい場合、情報源の1つは、おそらくQuartzソースコードです。これには、Quartz用のインバウンドJCAリソースアダプターが含まれています。

シングルトンをリスナーとして直接登録する場合は、慎重に行う必要があります。レガシーライブラリは、実際の実装ではなく、シングルトンのプロキシクラスへの参照を取得する必要があります(つまり、レガシーライブラリに渡さないでくださいthis)。

もう1つのオプションは、必要なインターフェイスを実装し、レガシーライブラリに登録する通常のクラスを提供することです。通知を受信すると、JNDIからJMS接続ファクトリとキューを検索し、メッセージドリブンBeanがリッスンしているJMSメッセージを送信できます。

于 2011-12-10T21:38:52.517 に答える