java – Glassfish上EAR文件中的EJB3的JNDI查找

前端之家收集整理的这篇文章主要介绍了java – Glassfish上EAR文件中的EJB3的JNDI查找前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个包含大量JAR的EAR文件,其中一个JAR包含Local Session Beans(EJB3).我需要从非托管POJO中执行这些会话Bean的JNDI查找,这些POJO也包含在EAR中(在这种情况下也与EJB中的JAR相同).我试过跟随 Glassfish EJB FAQ,但无论我尝试什么,我都会继续收到javax.naming.NameNotFoundException.

我不确定一些事情.我应该在哪里放置我的ejb-jar.xml(我尝试过EARs Meta-INF以及JARs Meta-INF)?我需要sun-ejb-jar.xml吗?究竟什么是ejb-link,它做了什么?我可能做错了什么(我的配置几乎与常见问题解答中给出的本地查找相同)?

我列出了我尝试的一些配置和结果如下:

  1. <enterprise-beans>
  2. <session>
  3. <ejb-name>ITestBean</ejb-name>
  4. <ejb-class>com.test.TestBean</ejb-class>
  5. <ejb-local-ref>
  6. <ejb-ref-name>ITestBean</ejb-ref-name>
  7. <local>com.test.ITestBean</local>
  8. </ejb-local-ref>
  9. </session>
  10. </enterprise-beans>

应用程序部署但JNDI查找返回null.

  1. <enterprise-beans>
  2. <session>
  3. <ejb-name>ITestBean</ejb-name>
  4. <ejb-class>com.test.TestBean</ejb-class>
  5. <ejb-local-ref>
  6. <ejb-ref-name>ITestBean</ejb-ref-name>
  7. <local>com.test.ITestBean</local>
  8. <ejb-link>ITestBean</ejb-link>
  9. </ejb-local-ref>
  10. </session>
  11. </enterprise-beans>

应用程序未部署:无法确定EJB 3.0 ref的未解决的Ejb-Ref ITestBean @ jndi的本地业务与远程业务指定.

  1. <enterprise-beans>
  2. <session>
  3. <ejb-name>ITestBean</ejb-name>
  4. <ejb-class>com.test.TestBean</ejb-class>
  5. <ejb-local-ref>
  6. <ejb-ref-name>ITestBean</ejb-ref-name>
  7. <local>com.test.ITestBean</local>
  8. <ejb-link>MyJar.jar#ITestBean</ejb-link>
  9. </ejb-local-ref>
  10. </session>
  11. </enterprise-beans>

应用程序未部署:错误:未解决:MyJar.jar#ITestBean.

  1. <enterprise-beans>
  2. <session>
  3. <ejb-name>ITestBean</ejb-name>
  4. <local>com.test.ITestBean</local>
  5. <ejb-local-ref>
  6. <ejb-ref-name>ITestBean</ejb-ref-name>
  7. </ejb-local-ref>
  8. </session>
  9. </enterprise-beans>

处理EjbDescriptor时出错

解决方法

您始终可以在System.out或日志中转储InitialContext中的所有名称.
  1. //Get all the names in the initial context
  2. NamingEnumeration children = initialContext.list("");
  3.  
  4. while(children.hasMore()) {
  5. NameClassPair ncPair = (NameClassPair)children.next();
  6. System.out.print(ncPair.getName() + " (type ");
  7. System.out.println(ncPair.getClassName() + ")");
  8. }
  9. }

猜你在找的Java相关文章