【发布时间】:2015-03-27 21:31:49
【问题描述】:
由于交易不完整,我的代码中发生了一些虚假活动,我不知道该怎么办。
例如,如果我有:
User user = new User();
userService.save(user);
Email email = new Email(user, "Welcome!");
emailService.send(email);
服务器在保存user 后死机,但无法发送电子邮件,那么我该如何恢复交易?
此外,让事情变得更复杂,假设我们先发送电子邮件,然后持久化用户,然后发送电子邮件,但用户没有持久化。由于该交易不可能被撤销,因此必须有一种方法来管理所有“假设”案例。
问题在于它不一定只与电子邮件有关,它可以是任何东西 - 电子邮件、短信、银行交易、网络服务调用、数据库过程调用等......
Java 是否有办法管理此类问题?我知道这可以被视为一个开放式问题,但问题是我实际上不知道从哪里开始了解这个问题。
【问题讨论】:
-
春天你有@transactional annotionas,他们关心事务......对于特定场景你可以尝试捕获异常并决定做什么。
-
这不只是为了数据库的东西吗?
-
当然可以,事务复杂且困难,不能只说“嘿Java,回滚”
-
因为您无法恢复正在发送的电子邮件这一事实,它必须是此类事务中的最后一个操作。没有充分的理由先发送电子邮件。
-
@libik:实际上我希望我能说更多的话,比如“嘿 Java,恢复你没有完成的线程”
标签: java spring jakarta-ee transactions