使用EJB 2.1,是否需要在ejb-jar.xml中声明对资源的引用?

时间:2009-10-28 14:11:33

标签: java-ee weblogic ejb ibm-mq jta

我正在使用Weblogic 9.2和许多MDB。这些MDB分别使用本地和外部XAConnectionFactorys访问JDBC DataSource并写入本地和外部管理的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>

1 个答案:

答案 0 :(得分:2)

我将Weblogic / J2EE文档倾倒了一天,发布了上述问题,然后按照预期我立即遇到了我正在寻找的文档。

至少我需要声明一个&lt; resource-ref&gt;用于远程ConnectionFactory(在我的情况下,IBM Websphere MQ),以便在JTA事务中登记其连接。

相应的&lt; message-destination-ref&gt;为了保持一致性而添加远程目标,并且从Weblogic角度来看,这里没有真正的增值。此外,在指定对本地管理的目标,ConnectionFactorys和数据源的引用时,没有任何增值。

来自Weblogic的FAQs: Integrating Remote JMS Providers

  

问。 JMS资源有什么优势   参考文献提供?

     

一个。 JMS资源引用提供了   以下优点:

     
      
  • 它们确保了servlet和EJB应用程序的可移植性:可以使用它们   更改应用程序的JMS   没有重新编译的资源   应用程序的源代码。
  •   
  • 他们提供自动池化JMS连接,会话和   MessageProducer对象
  •   
  • 他们为非WebLogic JMS提供自动事务登记   提供商即可。这需要XA支持   JMS提供者。如果资源   没有使用引用,然后征集   一个非WebLogic JMS提供程序   当前交易需要额外的   程序化步骤。
  •   

此功能的详细信息在Enhanced J2EE Support for Using WebLogic JMS With EJBs and Servlets

中有所描述