環境:Sybase ASE + WebLogic 8.1 + Tx Data Source。測試容器管理事務(CMT,Required)下,Stored Procedure(SP)與多 Connection 交互的具體行為。
SET CHAINED ON(開啟隱式事務模式)。trans-attribute=Required,容器啟動/傳播 JTA 事務。setAutoCommit(false) 或預設;設 true 會拋出「Cannot set auto commit to true when in distributed transaction」。| 場景 | Connection 策略 | setAutoCommit | 結果 |
|---|---|---|---|
| 方法一 | 多方法共用同一 Connection | false/預設 | ✅ 成功,同一 JTA 事務內多 SP 參與 |
| 方法二 | 各方法各自獲取 Connection | false/預設 | ✅ 成功,WebLogic 同一 JTA 事務下多 Connection 自動登記 XA |
| 方法二(錯誤) | 各方法各自 Connection | 某方法設 false | ❌ 拋出「SET CHAINED command not allowed within multi-statement transaction」 |
| 方法三 | 各方法各自 Connection + 方法級 Required | false/預設 | ❌ 同理報錯,嵌套 Required 導致事務邊界混亂 |