有沒有人有一個很好的教程或關於如何實現自己的XAResource的一些建議?我需要Spring的MailSender是事務性的,所以只有在事務提交後纔會發送郵件,而且似乎沒有任何現有的事務包裝器。延遲發送郵件,直到交易提交
回答
如果您只是需要等待提交,就像您在評論中所說的那樣,您可以使用TransactionSynchronizationManager.registerSynchronization()
調查以在提交時觸發電子郵件發送。
我懷疑是否有可能爲SMTP實現真正的XAResource。資源管理器應該有事務支持(在這種情況下是SMTP服務器),我不相信有任何支持。我會說你最好的選擇是'上次資源提交'模式 - 它允許一個非XA資源參與XA事務。搜索谷歌,有很多信息。大多數Java EE服務器都支持這個。
我同意,兩階段提交可能沒有問題,所以我需要的是發送操作等待提交。看起來這正是'上次資源提交'所做的,謝謝。然而,雖然有很多資源解釋'最後的資源提交'是什麼,但我仍然需要找到一個解釋如何實現它。我還會實現一個XAResource嗎? – Zecrates 2010-11-04 05:05:55
gpeche提到的旁邊的另一個選項是從事務中發送事務性JMS消息。然後讓消息監聽器(如MDB bean)發送電子郵件。
EJB中的另一個訣竅是從事務中調度一個計時器。計時器也是事務性的,只會在事務提交時啓動。只需使用timeout = 0的計時器,它將在事務提交後立即啓動。
您可以使用TransactionSynchronizationManager.registerSynchronization
與TransactionSynchronizationAdapter
具有各種各樣的被稱爲在當前事務的各個階段的方法(如gpeche提到)。我認爲這個問題最適合的方法是afterCommit。
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
super.afterCommit();
sendEmail();
}
});
請避免代碼只回答。至少說一下你剛添加的代碼的解釋。它將幫助其他用戶瞭解所做的事情。 – 2017-08-31 13:08:35
謝謝,我添加了一些解釋和javadoc鏈接。 – 2017-08-31 13:27:02
- 1. AXI4延遲交易
- 2. 發送交易電子郵件magento
- 3. 交易電子郵件不發送
- 4. 鎖表直到交易提交
- 5. 提交的交易電子郵件
- 6. Html表單在提交時直接發送到電子郵件
- 7. 如何將交易電子郵件直接發送到收件箱?
- 8. 低延遲ř提交
- 9. 延遲提交結果
- 10. 延遲表單提交(AngularJS)
- 11. 延遲表單提交,直到檢索到位置
- 12. 兩種形式之一提交 - 提交,延遲,提交
- 13. 交易提交?
- 14. 郵件發送但不提交?
- 15. 表格提交和郵件發送
- 16. 發送郵件在php表單提交
- 17. 發送表單提交電子郵件
- 18. 發送郵件提交表格的信息在提交php
- 19. 提交按鈕,將提交表單併發送電子郵件?
- 20. 直到div動畫完成後延遲html表單提交
- 21. jQuery - 如何延遲表單提交,直到動畫完成?
- 22. SuiteScript 2日誌郵件發送到交易
- 23. PDO交易是否阻塞,直到所有其他交易被提交?
- 24. NodeJS發送延遲電子郵件
- 25. 如何延遲發送電子郵件?
- 26. SMTP:郵件延遲發送(~8小時)
- 27. 發送電子郵件沒有延遲
- 28. 延遲發送電子郵件
- 29. 郵件發送延遲PHP CodeIgniter
- 30. 延遲發送電子郵件與PHP
謝謝,似乎這將解決我的問題。 – Zecrates 2010-11-15 07:49:01