なぜdoを取得しまNameNotFoundExcpetion使用時のコンテキストlookup("java:comp/env/MyBean")
質問
なぜdoを取得しまNameNotFoundException利用の場合 context.lookup("java:comp/env/MyBean")
な利用の場合 context.lookup(MyBean.class.getName())
?
エラー報告書"なにバインドされたオブジェクトのためのjava:comp/env/MyBean"どうやって結合するのはなぜですか class.getName()
まだ。なくなりましたjava:comp/env?
私を使用6.5,Glassfish2.1.
解決
の java:comp/env 接頭辞を使ったリソースを参考にした。この抽象化とは、資源および実際のJNDI名のリソースです。で変更することができます。所の裏付資源(異なるサーバやコンテキストに影響のないご参照のコードです。
していだけに使われていたが、そのシェイプの作成を参考に、既存のリソース(JMS,JDBC,EJB---のように各モジュールが必要なアクセスの資源です。での展開を設定します。
他のヒント
私は、これはGlassfishのために真であるかどうかわからないけど、あなたはDEBUGをオンにした場合JBOSSの場合には、あなたが使用されるJNDI名を気づくことができます。
たとえば、DemoBeanという名前のセッションBeanのデプロイメント中に、あなたはserver.logファイルに次のログが表示されます。 -
2009-07-24 09:08:18747 DEBUG [org.jboss.ejb3.stateless.StatelessDelegateWrapper] jboss.j2ee作成します。jar = SessionBeanDemo.jar、名前= DemoBean、サービス= EJB3を 2009-07-24 09:08:DemoBean:18747 DEBUGは[org.jboss.ejb3.ProxyDeployer]何のためのリモートバインディングを宣言されていません 2009-07-24 09:08:18747デバッグ[org.jboss.ejb3.ProxyDeployer] DemoBeanためのリモートインタフェースがあります 2009-07-24 09:08:18747 DEBUG [org.jboss.ejb3.ProxyDeployer]遠隔デフォルトのバインディングは、ののjndiNameを持っているの のDemoBean /リモートのの
次に、あなたのクライアントコードで、あなたがこのようにそれを見ることができます: -
InitialContext ctx;
try {
ctx = new InitialContext();
DemoBeanRemote demo = (DemoBeanRemote) ctx.lookup("DemoBean/remote");
System.out.println(demo.sayHello());
} catch (NamingException e) {
e.printStackTrace();
}