2016-02-12 3 views
1

Проблема: Кажется, что не удается создать JJI-EJB 3 на сервере Websphsere через весну. Продолжайте получать Не найдено для моего имени jndi. Я не вижу, что у меня не так. Для Websphere у вас есть что-то другое для поиска имени jndi?Spring EJB 3 Jndi look-up Failing

Stack overflow Reference Question - EJB 3 injection into spring beans

Версии:

  1. Spring Версия: 4.1.2
  2. WebSphere Server Version: 7.0.0.27

Spring Ошибка:

Ошибка создания компонента с именем 'myLocalEjb': Вызов метода init не удался; Вложенное исключение - javax.naming.NameNotFoundException: Context: WMTN123456Node10Cell/nodes/WMTN1234569Node10/servers/server1, name: ejb/myBean: Первый компонент в имени myBean не найден. [Root исключение 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 Deployment Дескриптор

<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

Взял меня некоторое время, чтобы получить правильный вопрос на переполнение стека, чтобы найти ответ. Я был смущен приведенным выше примером и подумал, что он использовал отображаемое имя в качестве имени jndi. Вместо этого IBM имеет гораздо более длинный шаблон контекста именования для поиска JNDI.

IBM Docs: EJB JNDI Naming Convention

Как переопределить по умолчанию именования IBM и ссылки на него - см ответ Эда Рэндалла. Объясняет, как переопределить. Stack overflow answer

Spring просмотровых должно быть:

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