2

我正在使用带有很多 MDB 的 Weblogic 9.2。这些 MDB 访问 JDBC 数据源,并分别使用本地和外部 XAConnectionFactory 写入本地和外部管理的 JMS 目标。每个 MDB 划定一个容器管理的 JTA 事务,该事务应该分布在所有这些资源中。

下面是从我的 ejb-jar.xml 中摘录的一个 MDB,它从名为“MyDestination”的本地队列消费并生成到名为“MyOtherDestination”的 IBM Websphere MQ 队列。这些逻辑名称链接到我的 weblogic-ejb-jar.xml 文件中的物理对象。

是否需要使用 <resource-ref> 和 <message-destination-ref> 标签将 ConnectionFactory 和 Queue 公开给 MDB?如果是这样,它是 Weblogic 要求的还是 J2EE 规范要求的?出于什么目的?例如,是否需要支持 XA 事务性?

我已经意识到使用暴露给 MDB 命名上下文的名称将管理对象与我的 MDB 分离的好处。这是指定这些标签时唯一添加的值吗?换句话说,仅使用 InitialContext 和对象的完全限定名称从我的 MDB 中引用这些对象是否可以接受?

<enterprise-bean>
    <message-driven>
        <ejb-name>MyMDB</ejb-name>
        <ejb-class>com.mycompany.MyMessageDrivenBean</ejb-class>
        <transaction-type>Container</transaction-type>
        <message-destination-type>javax.jms.Queue</message-destination>
        <message-destination-link>MyDestination</message-destination-link>
        <resource-ref>
            <res-ref-name>jms/myQCF</res-ref-name>
            <res-type>javax.jms.XAConnectionFactory</res-type>
            <res-auth>Container</res-auth>
        </resource-ref>
        <message-destination-ref>
            <message-destination-ref-name>jms/myOtherDestination</message-destination-ref-name>
            <message-destination-type>javax.jms.Queue</message-destination-type>
            <message-destination-usage>Produces</message-destination-usage>
            <message-destination-link>MyOtherDestination</message-destination-link>
        </message-destination-ref>
    </message-driven>
<enterprise-bean>
4

1 回答 1

2

我翻了一天的 Weblogic/J2EE 文档,发布了上面的问题,然后不出所料,我立即找到了我正在寻找的文档。

至少我需要为远程 ConnectionFactory(在我的例子中是 IBM Websphere MQ)声明一个 <resource-ref> 以便在 JTA 事务中登记其连接。

添加远程 Destination 的相应 <message-destination-ref> 是为了保持一致性,从 Weblogic 的角度来看,这里没有真正的增值。此外,在指定对本地管理的目标、连接工厂和数据源的引用时,没有任何附加值。

来自 Weblogic 的常见问题解答:集成远程 JMS 提供程序

问:JMS 资源引用提供了哪些优势?

A. JMS 资源引用具有以下优点:

  • 它们确保 servlet 和 EJB 应用程序的可移植性:它们可用于更改应用程序的 JMS 资源,而无需重新编译应用程序的源代码。
  • 它们提供JMS Connection、Session 和 MessageProducer 对象的自动池化
  • 它们为非 WebLogic JMS 提供者提供自动事务登记。这需要 JMS 提供程序中的 XA 支持。如果不使用资源引用,那么为当前事务登记非 WebLogic JMS 提供程序需要额外的编程步骤。

此功能的详细信息在Enhanced J2EE Support for Using WebLogic JMS With EJBs and Servlet中进行了描述。

于 2009-10-28T16:55:16.813 回答