EAR在其他EAR中找不到EJB(WAS共享库问题)

时间:2013-05-08 13:56:46

标签: ejb websphere ejb-3.0 jndi ear

我在实体层-EAR中设置了EJB:

    <session>
        <ejb-name>DoctorDaoImpl</ejb-name>
        <business-local>mypath.DoctorDao</business-local>
        <ejb-class>mypath.DoctorDaoImpl</ejb-class>
        <session-type>Stateless</session-type>
    </session>

根据日志,EAR及其EJB启动良好。我在共享库中有外观(例如DoctorDao),实体层EAR具有实现(例如DoctorDaoImpl)。

现在,当我部署Doctor服务时,它有一个data-service.jar,他的DoctorDataEjb会注入DoctorDao。

但是我收到一个错误说:

无法解析Doctor应用程序的data-service.jar模块中DoctorDataEjb组件中的mypath.DoctorDao EJB引用。嵌套异常是:com.ibm.ejs.container.EJBNotFoundException:带有接口mypath.DoctorDao的EJB在应用程序Doctor中不存在

现在,我意识到,实际上,EJB应用程序中不存在EJB。它存在于实体层EAR中。我已经看到了这个类似的link,所以我想我必须找出正确的绑定名称才能进入&#34; EJB引用&#34; WAS Admin UI(或者我可以在ibm-ejb-jar-bnd.xml中设置它)。

如果我查看生成的ejb-jar_merged.xml,我看到ref定义如下:

<ejb-ref>
     <ejb-ref-name>mypath.DoctorDao</ejb-ref-name>
     <remote>mypath.DoctorDao</remote>
     <injection-target>
        <injection-target-class>mypath.DoctorDataEjb</injection-target-class>
        <injection-target-name>doctorDao</injection-target-name>
     </injection-target>
</ejb-ref>

我尝试将目标资源JNDI名称设置为: Java的:全球/ MyEntityLayerApp /实体服务/ DoctorDaoImpl myPath.DoctorDao 现在得到: java.lang.IllegalArgumentException:无法将myPath.DoctorDao字段myPath.DoctorDataEjb.doctorDao设置为myPath.EJSLocal0SLDoctorDaoImpl _

zoiks。关于&#39; Local&#39;的事情。

1 个答案:

答案 0 :(得分:1)

看起来你正在定义一个本地ejb接口:

 <ejb-name>DoctorDaoImpl</ejb-name>
    <business-local>mypath.DoctorDao</business-local>

并且您尝试将其作为远程引用:

<ejb-ref>
 <ejb-ref-name>mypath.DoctorDao</ejb-ref-name>
 <remote>mypath.DoctorDao</remote>

它无效。你必须决定哪个适合你的商业案例:)