有没有人有一个很好的教程或关于如何实现自己的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