問題は、同じ EAR、JAR、クラス、およびインターフェース名を維持する場合、この名前は常に同じになるかということです。それとも、アプリケーション サーバーから変更できますか?
JNDI 名は Java EE 5 では標準化されておらず、アプリケーション サーバーごとに変更されます。Adam Bien は、これを説明する素晴らしい投稿を書きました。
前回の投稿で述べたように、Java EE 5 アプリケーションの移植性は、古い J2EE 1.4 の世界よりもはるかに優れています。私は 1 つの問題を発見しました。これは、定義済みで統一された JNDI ネーミングとアドレス指定の欠如です。Glassfish アプリケーション サーバー
は、リモート ビジネス インターフェースの完全修飾名をデフォルトとして使用します。JBoss appserver は、"/remote" で終わる EJB の名前を使用します。したがって、次のセッション Bean:
package com.abien;
@Stateless
public class HelloWorldBean implements HelloWorld {
public String sayHello(String hello){
return "Echo from server: ";
}
}
次のコード スニペットを使用して、JBoss (EJB3 サポート付き) で見つけることができます。
Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup("myEarName/HelloWorldBean/remote");
および Glassfish (v1 および v2) では、リモート ビジネス インターフェイスの完全修飾名を使用します。
Context context = new InitialContext();
HelloWorld helloWorld = (HelloWorld) context.lookup(HelloWorld.class.getName());
これを処理する適切な方法の 1 つはServiceLocator
、「プラグ可能な」アプリケーション サーバー固有の戦略を使用することです。ServiceLocator、JNDI Naming Helper、および Java EE 5をご覧ください。
Java EE 6 では問題が修正され、最終的にPortable Global JNDI Namesが用意されました。