3.2. EJB3 以外の Beans から EJB3 Session Beans の参照
JBoss Enterprise Application Platform 5 は Java 5 Enterprise Edition 使用を全面的にサポートします。その状況で JBoss Enterprise Application Platform 4.2 は、EJB MBean コンテナが JBoss アプリケーションサーバー内の プラグインとして実行する方法で、 EJB3 機能を実装します。これは、アプリケーション 開発にとって特定の問題を含みます。
EJB3 プラグインは照合を EntityManager に注入し、@EJB リファレンスは、 EJB オブジェクトから別のオブジェクトにインジェクションします。 しかし、 このサポートは EJB3 MBean と、それが管理する JAR ファイルに限定されています。 WAR (Servlets、 JSF JSF backing beans など)からロードされる JAR ファイルはいずれもこのプロセスは通りません。 Java 5 Enterprise Edition 標準では Servlet は、 @EJB アノテーションの参照を経由した Session Bean を参照することが出来ると指定していますが、 これは JBoss Enterprise Application Platform 4.2 内では実践されていません。
Servlet 又は JSF Backing Bean から EJB3 Session Bean にアクセスするには、以下の 二つの内、一つを実行する必要があります:
JBoss Enterprise Application Platform の一部である Seam framework を活用しない場合は、明示的な JNDI lookup を使用して、 EJB3 Session Bean にアクセスする必要があります。これは、章 5. サンプルの JSF-EJB3 アプリケーション 内で説明してある、jsfejb3 凡例 アプリケーションの TodoBean.java ファイルの中でその実行例として見る ことが出来ます。
private TodoDaoInt getDao () {
try {
InitialContext ctx = new InitialContext();
return (TodoDaoInt) ctx.lookup("jsfejb3/TodoDao/local");
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("couldn't lookup Dao", e);
}
}
ctx.lookup("jsfejb3/TodoDao/local"); は、 EJB3 Session Bean を参照するために使用するメソッドです。 その形式は アプリケーション名/SessionBean 名/local となります。
Seam Framework を使用する場合、 その心配をする必要はありません。 Seam Framework はいずれにしても Beans の動作を管理するため、 このタイプの相互作用を既に Seam Framework で実装しています。
Seam framework を使用してこれを達成する方法の詳細説明には、章 6. Seam の使用 を参照して下さい。