我正在使用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>
答案 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。
中有所描述