2014-10-31 20 views
0
Environment details:- 
  1. 的WebSphere MQ: - 7.5.0.2在Redhat Linux 6.4
  2. IBM DB2: - 10.1.0.2在Redhat Linux 6.4
  3. 的Java 1.7
  4. 的WebSphere MQ類爲Java
  5. MQ作爲trasnaction協調​​

Scenario:- 

以下所有步驟在同一個線程上執行。數據庫連接打開並保持對該線程上正在執行的所有UoW處於打開狀態。WebSphere MQ作爲TXN協調員: - MQ.begin()MQ退出後失敗,因爲DB2無法啓動XA

  1. qm.begin
  2. 獲取信息和處理信息
  3. qm.commit
  4. qm.begin
  5. 獲取消息和異常被消息處理過程中拋出
  6. qm.backout
  7. qm.begin(此錯誤與MQJE001:完成代碼'2',原因'2009'。

隊列管理器的錯誤日誌顯示

AMQ7605:XA資源管理「DBNAME」已經返回了意外的返回碼-6,呼籲xa_start時

有誰知道哪裏出了錯誤?


如果我們重複上面方案中的步驟以結束後每個數據庫連接提交或回滾,一切工作正常。但是這意味着我們必須打開和關閉每個事務的連接,這可能會影響性能。

這是否意味着事務回滾後,退出時使用的連接無法重用?或者我們錯過了什麼?

感謝, Vaibhav的

+0

任何人都可以幫忙嗎? – Vaibhav 2014-11-03 14:49:47

回答

0

你在表演粘貼的AMQ7605返回錯誤代碼-6。這是一個XA返回代碼,其中的細節可以在XA規範中找到:

http://pubs.opengroup.org/onlinepubs/009680699/toc.pdf

在第24頁,你會發現-6定義:

的#define XAER_PROTO -6/*在不正確的上下文中調用的例程*/

在這種情況下,這意味着當MQ(事務管理器)在數據庫(資源管理器)上調用xa_open時,數據庫拒絕嘗試聲明它違規的XA協議。

我猜測MQ不是正確的做法,或者數據庫無效地抱怨嘗試。無論哪種方式,我都建議使用IBM MQ開放PMR來爲您查找問題並給出正式答覆。

+0

感謝Tim的迴應。是的,我們已經聯繫IBM MQ。 – Vaibhav 2014-11-07 14:05:08

0

通過將DB2XADataSource的supportsAsynchronousXARollback標誌設置爲true解決了此問題。

final DB2XADataSource dataSource = new DB2XADataSource(); 
dataSource.setsupportsAsynchronousXARollback(DB2BaseDataSource.YES); 
... 
... 

希望這會幫助別人了。