我正在使用带有很多 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>