簡體   English   中英

使用spring jee-jndi查找注入的JMS XA連接工廠的行為與在Weblogic 12c上@Resource注入不同

[英]A JMS XA connection factory injected using spring jee-jndi lookup behaves differently than @Resource injection on Weblogic 12c

我最近有一個MDB應用程序移植到Weblogic 12c。 我使用spring 3.1注入數據源和jms資源,但是發現消息隊列的傳遞不會成功(沒有錯誤),盡管沒有明顯的回滾,但似乎沒有參與XA事務。 此后,我創建了一個測試應用程序來隔離問題。 該測試應用包含:

  1. 會話計時器bean將消息放在testQueue1上
  2. MDB1更新數據源並將消息從testQueue1移動到testQueue2。

我的彈簧配置:

<jee:jndi-lookup id="jdbcDS" expected-type="javax.sql.DataSource" jndi-name="jdbc/test_OraclePool" />
<jee:jndi-lookup id="jmsCF" jndi-name="jms/test_ConnectionFactory" />
<jee:jndi-lookup id="jmsTestQueue1" jndi-name="jms/testQueue1"/>
<jee:jndi-lookup id="jmsTestQueue2" jndi-name="jms/testQueue2"/>
<bean id="transactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager">
        <property name="transactionManagerName" value="javax.transaction.TransactionManager"/>
</bean>

連接工廠和隊列位於相同的子部署中,並且以Weblogic 12c上的相同JMS服務器為目標。

因此,我發現如果我通過ejb @Resource injection注入連接工廠,則一切正常,但是由於無法控制的原因,將應用程序更改為注入連接工廠不是一種選擇。 另一個有趣的區別是容器在每種情況下返回的具體工廠類都各不相同:@Resource返回-weblogic.deployment.jms.PooledConnectionFactory Spring jndi注入-weblogic.jms.client.JMSXAConnectionFactory。

有誰知道我想念什么,如果有的話?

在Spring配置實例中,您將直接對JMS連接工廠進行JNDI查找。 使用@Resource時,WebLogic會在同一工廠附近注入JMS包裝器。 包裝器負責自動事務登記(其他情況下,外國JMS提供程序不會自動登記)。 有關更多詳細信息,請參見此處: http : //docs.oracle.com/cd/E24329_01/web.1211/e24387/j2ee.htm#JMSPG366和此處https://docs.oracle.com/cd/E24329_01/web.1211 /e24387/interop.htm#JMSPG555

盡管WebLogic至少從8.1版開始就支持JMS Wrappers,但尚無公共API(無論如何我最后都檢查過)在Java中使用這些包裝器,因此,很難像Spring這樣的庫中使用它們。 幾年前創建了一個增強請求(錯誤20062862),但是您需要詢問Oracle在哪里。

如果不為外國JMS提供者使用包裝器,那么您需要自己應對入伍,這是不幸的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM