この節では、次の内容について説明します。
Sun Java System Application Server 8.2 では、EJB は JNDI サブコンテキスト ejb/ に体系的にマップしています。JNDI 名 Account を EJB に帰属させた場合、Sun Java System Application Server 8.2 によってグローバル JNDI コンテキスト内に、参照 ejb/Account が自動的に作成されます。したがって、この EJB のクライアントは、対応するホームインタフェースを取得するために、ejb/Account をルックアップする必要があります。
ここで、Sun ONE Application Server 6.x に配備されるサーブレットメソッドのコードを調べてみましょう。
ここに提示されるサーブレットでは、ステートフルセッション Bean の BankTeller を呼び出しています。これは JNDI コンテキストのルートにマップされています。ここでコードを検討するメソッドは、EJB のホームインタフェースを取得して、BankTeller オブジェクトをインスタンス化し、このオブジェクトのリモートインタフェースを取得できるようにします。これによって、ユーザーはこのコンポーネントに対するビジネスメソッド呼び出しを作成できるようになります。
/** * Look up the BankTellerHome interface using JNDI. */ private BankTellerHome lookupBankTellerHome(Context ctx) throws NamingException { try { Object home = (BankTellerHome) ctx.lookup("ejb/BankTeller"); return (BankTellerHome) PortableRemoteObject.narrow(home, BankTellerHome.class); } catch (NamingException ne) { log("lookupBankTellerHome: unable to lookup BankTellerHome" + "with JNDI name ’BankTeller’: " + ne.getMessage() ); throw ne; } }
このコードでは、ルックアップに対する引数として ejb/BankTeller がすでに使用されているので、Sun Java System Application Server 8.2 に配備するためのコード変更を行う必要はありません。
ここでは、EJB JNDI 参照を使用する場合に注意すべき点をまとめています。注意事項の詳細が、特定のソースアプリケーションサーバーのプラットフォームに固有なものである場合は、その旨を記してあります。
既存の WebLogic アプリケーション内の JNDI コンテキストのルートに EJB がマップされている場合は、前述の JNDI コンテキスト内の EJB 参照の名前を変更する (これらの参照を JNDI コンテキストルートからサブコンテキスト ejb/ に移動する) 必要があるだけです。
これらの EJB がすでに既存のアプリケーション内の JNDI サブコンテキスト ejb/ にマップ済みの場合は、何も変更する必要はありません。
ただし、Sun Java Studio IDE 内の配備記述子に EJB の JNDI 名を設定している場合は、EJB の JNDI 名にプレフィックス ejb/ を含めないようにすることが重要です。これらの EJB 参照は、Sun Java System Application Server 8.2 によって JNDI ejb/ サブコンテキスト内に自動的に配置されることを忘れないでください。つまり、配備記述子内で EJB に BankTeller という JNDI 名が指定されている場合、Sun Java System Application Server 8.2 によって、この EJB に対する参照は ejb/BankTeller に変換されます。この EJB のクライアントコンポーネントは、ルックアップの実行時に、この JNDI 名を使用する必要があります。
グローバル JNDI コンテキストを使用した EJB 参照の取得は、Sun Java System Application Server 8.2 に最も有効で適切なアプローチです。しかしながら、J2EE 仕様にできるだけ近い形で、EJB クライアントアプリケーションのローカル JNDI コンテキストを使用して、EJB 参照を取得することをお勧めします。ローカル JNDI コンテキストを使用する場合、まず、クライアント部分の配備記述子内 (Web アプリケーションの場合は web.xml、EJB コンポーネントの場合は ejb-jar.xml) に EJB リソース参照を宣言する必要があります。