0

我在我的实体层 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_

佐伊克斯。关于“本地”的一些东西。

4

1 回答 1

2

看起来您正在定义一个本地 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>

它行不通。您必须决定哪个适合您的业务案例:)

于 2013-05-08T18:48:01.653 回答