[英]EJB 3.0 JNDI lookup (Weblogic 10.x)
我使用weblogic 10.3.6,所以使用EJB 3.0。 我有EJB和本地接口。 两者都包装在耳朵内的ejb-jar中。
@Local
public interface TestLocal {
...
}
@Stateless
public class TestEJB implements TestLocal {
...
}
为了从战争中访问这个EJB,我在我的web.xml
<ejb-local-ref>
<ejb-ref-name>ejb/TestLocal</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>testpackage.TestLocal</local>
</ejb-local-ref>
查找看起来像
test = (TestLocal) new InitialContext().lookup("java:comp/env/ejb/TestLocal");
一切正常。 现在,我需要从与打包时相同的ejb-jar中调用此EJB。 但是我一直都有javax.naming.NameNotFoundException
。 我已经尝试过的:
在ejb-jar.xml
jar中的ejb-jar.xml
中(不是耳朵)
<ejb-name>TestEJB</ejb-name> <ejb-local-ref> <ejb-ref-name>TestEJB</ejb-ref-name> <ejb-ref-type>Session</ejb-ref-type> <local>testpackage.TestLocal</local> <ejb-link>myjar.jar#TestEJB</ejb-link> </ejb-local-ref>
和后续查询
initialContext.lookup("java:comp/env/TestEJB");
initialContext.lookup("TestEJB");
在weblogic-ejb-jar.xml
<weblogic-enterprise-bean> <ejb-name>TestEJB</ejb-name> <jndi-name>TestEJB</jndi-name> <local-jndi-name>TestEJB</local-jndi-name> <enable-call-by-reference>True</enable-call-by-reference> </weblogic-enterprise-bean>
weblogic-ejb-jar.xml
和ejb-jar.xml
您对我在做什么错有任何想法吗?
Java EE中的JNDI具有不同的名称空间。 在Java EE 6之前,通常只有“全局”名称空间和“组件环境”名称空间。
每个EJB都有自己的组件环境。 Web应用程序还具有自己的组件环境。 这是使用以java:comp/env
的JNDI名称时要查找的内容。 对象通过部署描述符(ejb-jar.xml和web.xml)添加到组件环境中:
<ejb-name>TestEJB</ejb-name>
<ejb-local-ref>
<ejb-ref-name>TestEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local>testpackage.TestLocal</local>
<ejb-link>myjar.jar#TestEJB</ejb-link>
</ejb-local-ref>
...
因此,从TestEJB的调用上下文中,您将查找上面的参考:
TestLocal testLocal = (TestLocal) new InitialContext().lookup("java:comp/env/TestEJB");
JNDI查找名称始终为java:comp/env/<ejb-ref-name>
。
您可以看到它实际上在查找自身的另一个实例,因为这是您在上面声明的内容。 这可能不是您想要的。
鉴于以上所述,对您问题的答案取决于POJO的调用上下文。
如果是webapp-> POJO-> TestEJB,则应该使用webapp的组件环境并查找“ java:comp / env / ejb / TestLocal”。
如果是webapp-> SomeEJB-> TestEJB,则需要将组件环境添加到SomeEJB(而不是示例中的TestEJB),并查找在其中定义的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.