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