1
我們有一個應用程序,它讀取JMS並執行一些數據庫事務,這些應用程序全部作爲一個XA事務的一部分。 如果我們發現消息有一些問題,我們要回滾數據庫 但我們不希望回滾JMS讓我們再次讀取消息(如果以前啓動了回滾,我們不希望MDB再觸發整個過程)。JMS/MDB回滾
我們有一個應用程序,它讀取JMS並執行一些數據庫事務,這些應用程序全部作爲一個XA事務的一部分。 如果我們發現消息有一些問題,我們要回滾數據庫 但我們不希望回滾JMS讓我們再次讀取消息(如果以前啓動了回滾,我們不希望MDB再觸發整個過程)。JMS/MDB回滾
爲了確保我的理解正確:您有一個事務性消息驅動的bean,它對數據庫執行一些操作。您仍然希望MDB成爲XA事務的一部分,但您不希望數據庫操作影響MDB參與的事務處理的狀態。
這就是說,有兩種解決方案:
@REQUIRES_NEW
註釋—除非他們已經都在這樣的事務上下文中運行。如果您的MDB是bean管理,消息的傳遞不是交易的一部分,所以它不會被重新傳遞,無論什麼—的EJB核心合同和需求 5.4.12節:
當使用Bean管理的事務分界的消息驅動Bean使用javax.transaction時。 UserTransaction接口用於劃分事務,導致調用bean的消息接收不是事務的一部分。