我在我的实体层 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 中
现在,我意识到,Doctor 应用程序中确实不存在 EJB。它存在于实体层-EAR 中。我已经看到这个类似的链接,所以我想我必须找出正确的绑定名称才能输入“EJB 引用”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:global/MyEntityLayerApp/entity-service/DoctorDaoImpl!myPath.DoctorDao 现在得到:java.lang.IllegalArgumentException: Can not set myPath.DoctorDao field myPath.DoctorDataEjb.doctorDao to myPath。 EJSLocal0SLDoctorDaoImpl_
佐伊克斯。关于“本地”的一些东西。