我在实体层-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;的事情。
答案 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>
它无效。你必须决定哪个适合你的商业案例:)