【发布时间】:2013-05-02 19:09:40
【问题描述】:
我在我的实体层-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: EJB with interface mypath.DoctorDao not present in application Doctor
现在,我意识到,Doctor 应用程序中确实不存在 EJB。它存在于实体层 EAR 中。我见过类似的link,所以我想我必须找出正确的绑定名称才能输入“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:无法将 myPath.DoctorDao 字段 myPath.DoctorDataEjb.doctorDao 设置为 myPath.EJSLocal0SLDoctorDaoImpl_
zoiks。关于“本地”的一些东西。
【问题讨论】:
标签: ejb websphere ejb-3.0 jndi ear