繁体   English   中英

EJB 3.0 JNDI查找(Weblogic 10.x)

[英]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 我已经尝试过的:

  1. 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");
  1. 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> 
  2. weblogic-ejb-jar.xmlejb-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM