有沒有人有一個很好的教程或關於如何實現自己的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. 鎖表直到交易提交
- 3. 如何將交易電子郵件直接發送到收件箱?
- 4. 交易提交?
- 5. 表格提交和郵件發送
- 6. 郵件發送但不提交?
- 7. 發送表單提交電子郵件
- 8. 發送郵件提交表格的信息在提交php
- 9. SuiteScript 2日誌郵件發送到交易
- 10. 發送電子郵件沒有延遲
- 11. 延遲發送電子郵件
- 12. 延遲發送電子郵件與PHP
- 13. 開始交易...提交交易問題
- 14. Phpmailer延遲交付
- 15. System.Net.Mail.SmtpClient.Send /交換延遲
- 16. PayPal幫助IPN在交易後發送電子郵件
- 17. 貝寶PayFlowPro交易後發送電子郵件
- 18. 如何以延遲提交Javascript表單
- 19. 延遲表單提交後的preventDefault()
- 20. 的Javascript:延遲提交不正確
- 21. 使用JQuery延遲表單提交
- 22. 在Chrome中延遲提交表單
- 23. 上提交延遲頁變化 - jQuery的
- 24. 如何在延遲後提交表格
- 25. jQuery的預防提交延遲
- 26. JS/JQuery表單提交延遲?
- 27. 延遲提交表單與jQuery
- 28. jquery ajax延遲表單提交
- 29. PHP:提交按鈕值被髮送到郵件
- 30. phonegap提交表格,如何發送到我的電子郵件
謝謝,似乎這將解決我的問題。 – Zecrates 2010-11-15 07:49:01