我有一个 EAR 文件,其中包含一堆 JAR,其中一个 JAR 包含本地会话 Bean (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到底是什么,它有什么作用?我可能做错了什么(我的配置与本地查找常见问题解答中给出的配置几乎相同)?
我列出了一些我尝试过的配置以及下面的结果:
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
</ejb-local-ref>
</session>
</enterprise-beans>
应用程序部署但 JNDI 查找返回 null。
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
<ejb-link>ITestBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
应用程序未部署:无法确定 EJB 3.0 ref Unresolved Ejb-Ref ITestBean@jndi 的本地业务与远程业务指定。
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<ejb-class>com.test.TestBean</ejb-class>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
<local>com.test.ITestBean</local>
<ejb-link>MyJar.jar#ITestBean</ejb-link>
</ejb-local-ref>
</session>
</enterprise-beans>
应用程序未部署:错误:未解决:MyJar.jar#ITestBean。
<enterprise-beans>
<session>
<ejb-name>ITestBean</ejb-name>
<local>com.test.ITestBean</local>
<ejb-local-ref>
<ejb-ref-name>ITestBean</ejb-ref-name>
</ejb-local-ref>
</session>
</enterprise-beans>
处理 EjbDescriptor 时出错