Spring EJB 3 Jndi查找失败

时间:2016-02-12 18:57:55

标签: spring websphere

问题:似乎无法通过spring在Websphsere服务器中查找jndi查找EJB 3。继续找不到我的jndi名字。我没有看到我的错误。对于Websphere,你有什么不同的jndi名称查找?

Stack overflow Reference Question - EJB 3 injection into spring beans

版本:

  1. 春季版:4.1.2
  2. WebSphere服务器版本:7.0.0.27
  3. 春季错误:

    使用名称' myLocalEjb'创建bean时出错: 调用init方法失败;嵌套异常是javax.naming.NameNotFoundException:上下文:WMTN123456Node10Cell / nodes / WMTN1234569Node10 / servers / server1,name:ejb / myBean:未找到名称myBean中的第一个组件。 [root例外是org.omg.CosNaming.NamingContextPackage.NotFound:IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]

    Spring配置JNDI查找

    <jee:local-slsb id="myLocalEjb"
                         jndi-name="ejb/myBean"
                         business-interface="spring.ejbtest.MyBeanLocal"
        </jee:local-slsb>
    
    <bean id="targetPOJO" class="different.pojo.localPOJO">
        <property name="injectedEJB3" ref="myLocalEjb"/>
    </bean>
    

    WebSphere部署描述符

    <ejb-jar id="ejb-jar_ID" version="3.0" metadata-complete="false" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" > 
     <display-name> MyEJB</display-name> 
     <enterprise-beans> 
     <session> 
     <ejb-name> myBean</ejb-name> 
     <mapped-name> ejb/myBean</mapped-name> 
     <business-local> spring.ejbtest.MyBeanLocal</business-local> 
     <ejb-class> spring.ejbtest.MyBean</ejb-class> 
     <session-type> Stateless</session-type> 
     <service-ref> 
     <service-ref-name> service/someOtherService</service-ref-name> 
     <service-interface> some.other.service.MyHTTPService</service-interface> 
     <service-ref-type> some.other.service.MyHTTPService</service-ref-type> 
     <wsdl-file> META-INF/wsdl/MyHTTPServiceExport.wsdl</wsdl-file> 
     <service-qname> http://company.foo/service/Service/:MyHTTPService</service-qname> 
     </service-ref> 
     </session> 
     </enterprise-beans> 
    <assembly-descriptor/> 
     </ejb-jar>
    

1 个答案:

答案 0 :(得分:1)

花了一些时间才能在堆栈溢出上找到正确的问题以找到答案。我对上面的例子感到困惑,并认为它使用映射的名称作为jndi名称。相反,IBM为JNDI查找提供了更长的命名上下文模式。

IBM Docs:EJB JNDI Naming Convention

如何覆盖IBM默认命名并引用它 - 请参阅Ed Randall的回答。解释如何覆盖。 Stack overflow answer

Spring查询应该是:

   <jee:local-slsb id="myLocalEjb"
                     jndi-name="ejblocal&#58;ejb/myBean"
                     business-interface="spring.ejbtest.MyBeanLocal"
    </jee:local-slsb>