Jakarta ee 对于EJB2.1,是否需要声明对EJB-jar.xml中资源的引用?

Jakarta ee 对于EJB2.1,是否需要声明对EJB-jar.xml中资源的引用?,jakarta-ee,weblogic,ejb,ibm-mq,jta,Jakarta Ee,Weblogic,Ejb,Ibm Mq,Jta,我将WebLogic9.2与许多MDB一起使用。这些MDB分别使用本地和外部XAConnectionFactory访问JDBC数据源并写入本地和外部管理的JMS目标。每个MDB划分一个容器管理的JTA事务,该事务应该分布在所有这些资源中 下面是我的ejb-jar.xml中的一个摘录,用于一个MDB,它从一个名为“MyDestination”的本地队列进行消费,并生成一个名为“MyTherDestination”的IBM Websphere MQ队列。这些逻辑名称链接到我的weblogic-ejb

我将WebLogic9.2与许多MDB一起使用。这些MDB分别使用本地和外部XAConnectionFactory访问JDBC数据源并写入本地和外部管理的JMS目标。每个MDB划分一个容器管理的JTA事务,该事务应该分布在所有这些资源中

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

是否需要使用和标记向MDB公开ConnectionFactory和队列?如果需要,是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>

MyMDB
com.mycompany.MyMessageDrivenBean
容器
javax.jms.Queue
我的目的地
jms/myQCF
javax.jms.XAConnectionFactory
容器
jms/myOtherDestination
javax.jms.Queue
生产
我的目的地

我花了一天时间浏览Weblogic/J2EE文档,发布了上述问题,然后不出所料,我立即发现了我正在寻找的文档

至少我需要为远程连接工厂(在我的例子中是IBM Websphere MQ)声明一个连接,以便在JTA事务中登记其连接

为了保持一致性,添加了远程目的地的对应值,从Weblogic的角度来看,这里没有真正的附加值。此外,在指定对本地管理的目标、ConnectionFactory和数据源的引用时,没有任何附加值

来自Weblogic的:

Q.JMS资源有哪些优势 参考资料提供?

<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>
JMS资源引用提供了 以下优点:

  • 它们确保了servlet和EJB应用程序的可移植性:可以使用它们 更改应用程序的JMS 资源,而不重新编译 应用程序的源代码
  • 它们提供了JMS连接、会话和会话的自动池 MessageProducer对象
  • 它们为非WebLogic JMS提供自动事务登记 提供商。这需要在中提供XA支持 JMS提供程序。如果资源 不使用引用,然后登记 具有 当前事务需要额外的 方案步骤

有关此功能的详细信息,请参见。

我澄清了我的问题。我对它是否可行不感兴趣。我想知道为什么有人会这样或那样做。