3.2. EJB3 以外の Beans から EJB3 Session Beans の参照

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 にアクセスするには、以下の 二つの内、一つを実行する必要があります:

  1. Seam がない場合 - JNDI Lookup

    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 となります。

  2. Seam がある場合 - Seam Framework に任せます

    Seam Framework を使用する場合、 その心配をする必要はありません。 Seam Framework はいずれにしても Beans の動作を管理するため、 このタイプの相互作用を既に Seam Framework で実装しています。

    Seam framework を使用してこれを達成する方法の詳細説明には、章 6. Seam の使用 を参照して下さい。