【问题标题】:Spring EJB 3 Jndi look-up FailingSpring EJB 3 Jndi 查找失败
【发布时间】:2016-02-12 18:57:55
【问题描述】:

问题:整个春季似乎无法在 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

弹簧错误:

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

Spring Config 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>

【问题讨论】:

    标签: spring websphere


    【解决方案1】:

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

    IBM 文档:EJB JNDI Naming Convention

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

    春季查找应该是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 2014-05-08
      • 2013-06-29
      相关资源
      最近更新 更多