我使用JTA,兩階段提交,JMS和JDBC事務處理結構。這個想法是(簡稱)以如何在提交時使用JTA確認JMS消息?
- 收到一條消息在隊列上
- 執行一些數據庫操作
- 確認該消息,當數據庫操作已經成功
所以我就XAQueueConnectionFactory
,創建XAQueueSession
,從會話創建接收器並設置消息監聽器。
在偵聽器內部,在onMessage
方法中,我開始我的用戶事務,執行jdbc的東西並提交事務或執行回滾,如果出現錯誤。現在,我期望(又稱「希望」)在用戶事務提交時確認該消息。
但是,這並沒有發生,消息仍然在隊列中,並一次又一次地重新遞送。
我錯過了什麼?我仔細檢查了會話,確認模式確實是「SESSION_TRANSACTED
」,getTransacted
返回true。
我沒有Java EE容器,沒有彈簧,沒有消息驅動的bean。我使用獨立的JTA bitronix。