1

context.lookup("java:comp/env/MyBean")を使用すると NameNotFoundException が発生するのに、使用すると発生しないのはなぜcontext.lookup(MyBean.class.getName())ですか?

エラーは「java:comp/env/MyBean にバインドされたオブジェクトがありません」と報告しclass.getName()ます。java:comp/env を使用する理由

Netbeans 6.5、Glassfish 2.1 を使用しています。

4

2 に答える 2

2

java:comp/envプレフィックスは、リソース参照と呼ばれるものに使用されます。これは、検索しているリソースとリソースの実際の JNDI 名との間の抽象化です。これにより、参照コードに影響を与えることなく、基になるリソースの場所 (つまり、別のサーバーとコンテキスト) を変更できます。

私は WAS でしか使用していませんが、リソースにアクセスする必要があるモジュールごとに、既存のリソース (JMS、JDBC、EJB ...) への参照を作成するという考え方です。これは展開構成の一部です。

Sun のチュートリアルはこちらGlassfish の例はこちら。

于 2009-03-17T12:20:08.193 に答える
0

これがGlassfishに当てはまるかどうかはわかりませんが、JBOSSの場合、DEBUGをオンにすると、使用されるjndi名に気付くことができます。

たとえば、DemoBeanという名前のセッションBeanのデプロイ中に、server.logファイルに次のログが表示されます。-

2009-07-24 09:08:18,747 DEBUG [org.jboss.ejb3.stateless.StatelessDelegateWrapper] jboss.j2ee:jar = SessionBeanDemo.jar、name = DemoBean、service =EJB3の作成2009-07-2409:08:18,747 DEBUG [org.jboss.ejb3.ProxyDeployer]宣言されたリモートバインディングはありません:DemoBean 2009-07-24 09:08:18,747 DEBUG [org.jboss.ejb3.ProxyDeployer] DemoBean2009-07-2409のリモートインターフェイスがあります。 08:18,747DEBUG[org.jboss.ejb3.ProxyDeployer]デフォルトのリモートバインディングにはDemoBean/remoteのjndiNameがあります

次に、クライアントコードで、次のように検索できます。-

        InitialContext ctx;
        try {
            ctx = new InitialContext();
            DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
            System.out.println(demo.sayHello());
        } catch (NamingException e) {
            e.printStackTrace();
        } 
于 2009-07-24T21:52:44.750 に答える