2009-10-28 93 views
2

我正在使用带有很多MDB的Weblogic 9.2。这些MDB访问JDBC DataSources并分别使用本地和外部XAConnectionFactorys写入本地和外部管理的JMS目标。每个MDB都划定一个容器管理的JTA事务,该事务应该在所有这些资源中分配。使用EJB 2.1时,是否声明了对ejb-jar.xml中资源的引用?

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

就是用<资源引用>和<消息目的地裁判>标签,露出连接工厂和队列的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

你试过了吗? – skaffman 2009-10-28 14:13:36

+0

我澄清了我的问题。我对它是否可以工作不感兴趣。我想知道为什么会这样或那样做。 – adgoudz 2009-10-28 15:39:43

回答

2

我倒在的Weblogic/J2EE文档一天,发布上述问题,那么预期我立即在我一直在寻找的文件来了。

最低限度我需要为了争取在JTA事务及其连接声明远程连接工厂一个<资源引用>(在我的情况下,IBM的Websphere MQ)。

为了保持一致性,添加了远程目标的相应的< message-destination-ref >,并且Weblogic透视图中没有实际的增值。另外,在指定对本地管理的目标,ConnectionFactorys和Datasources的引用时,不会有任何增值。

从Weblogic的FAQs: Integrating Remote JMS Providers

问:JMS资源 引用提供什么样的优势?

A. JMS资源引用提供 以下优点:

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

的此功能的细节在Enhanced J2EE Support for Using WebLogic JMS With EJBs and Servlets中描述。