0

我需要有关如何在 Weblogic 开发环境中操作的帮助(Oracle Workshop for WebLogic 10.3)。

我在一个 .jar 中有一个会话 bean,我需要从另一个 .jar 中的消息驱动 bean 中使用它。我想在查找会话 bean 时使用“java:comp/env/...”表示法。

jndiCtx = new InitialContext();
workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome");
WorkerSBLocal worker = workerHome.create();

因此我需要在 MDB 组件部署描述符 (ejb-jar.xml) 中创建 ejb 引用:

<ejb-local-ref>
    <ejb-ref-name>ejb/WorkerSBLocalHome</ejb-ref-name>
    <ejb-ref-type>Session</ejb-ref-type>
    <local-home>test.WorkerSBLocalHome</local-home>
    <local>test.WorkerSBLocal</local>
    <ejb-link>WorkerEJB.jar#WorkerSB</ejb-link>
</ejb-local-ref>

这有效(经过测试)。问题是,生成了 MDB 部署描述符,每次我编辑 MDB 源时,Oracle Workshop 使用类注释重新生成部署描述符,并覆盖我添加的内容。

所以我的问题是:在使用 Oracle Workshop for WL 时,从 MDB 引用 EJB 的最佳方式是什么?或者,在使用 ejb 注释时,除了我上面概述的方法之外,还有其他首选方法来创建 bean 引用吗?或者我应该将我的 bean 引用放在其他地方吗?

4

1 回答 1

0

似乎无法手动编辑生成的部署描述符(如果您不想放弃更改)。但是,您仍然可以使用注释指定其内容。

@EjbLocalRef(name="ejb/WorkerSBLocalHome", type=Constants.RefType.SESSION, 
    home="test.WorkerSBLocalHome", local="test.WorkerSBLocal",
    link="WorkerEJB.jar#WorkerSB")
@MessageDriven(ejbName = "HelloWorldMDB", 
    destinationJndiName="jms.RequestQueue", destinationType = "javax.jms.Queue")
public class Test extends GenericMessageDrivenBean implements
    MessageDrivenBean, MessageListener {
    .....
    jndiCtx = new InitialContext();
    workerHome = (WorkerSBLocalHome) jndiCtx.lookup("java:comp/env/ejb/WorkerSBLocalHome");
    WorkerSBLocal worker = workerHome.create();
    .....
}

这种方法仍然强制您在代码中指定具体的 jndi 名称,但您始终可以在部署时修改生成的部署描述符内容。

于 2012-03-29T11:31:49.393 回答