私は現在、IBM Websphere Application Server 7 (Java EE 5) 上で動作する小さな EJB アプリケーションを開発しています。アプリは主に、変換されて DB に格納される受信 MQ メッセージをリッスンする 1 つの MDB で構成されます。現在、構成、マッピング、データソース ルックアップなどを共有するために、多くのシングルトン/ファクトリを使用しています。解決策は、guice/spring のような (単純な) DI フレームワークを使用して、さまざまなインスタンスを注入することです。問題は、初期化/セットアップ コードをどこに配置するかということです。アプリケーションのメイン エントリ ポイントはどこですか。インスタンスを MDB に挿入するにはどうすればよいですか?
2 に答える
Guice の使用を控え、Java EE 5 ですでに利用可能なインジェクション メカニズムを使用することを検討する価値があるかもしれません。
適切な「開始点」を見つけることに関して、残念ながら、EJB 仕様では、開始時に Bean を実行する方法が定義されていません。ただし、EE 仕様の Web プロファイルには 1 つがあります。アプリケーションに WAR を追加し、サーブレット リスナー コンポーネントを設定できます。
http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html
これは、アプリケーションがコンテナー (WebSphere) によってロードおよび開始されるたびに開始するように設定できます。ただし、クラスローダーの問題に注意してください。
Spring を使用すると、EJB3 インターセプター経由で実行できます。http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/ejb.html#ejb-implementation-ejb3 を参照してください
警告に関する有用な情報は javadoc にあります。必ずお読みください: http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/ejb/interceptor/SpringBeanAutowiringInterceptor.html