|
1
3
这就是如何从理论上处理这种情况。首先,您需要在每个节点上有几个JTA分布式事务管理器。一个充当主人,另一个充当奴隶。主服务器协调向从服务器提交/回滚分布式事务。存在独立的JTA实现,例如 JOTM . Vanilla RMI不支持传播上下文信息,例如操作的事务ID。但是我认为RMI有钩子,所以它可以被扩展来支持这一点。你可以看看 Carol . 你需要使用 XAResource 包装事务中的参与者,以便它们可以登记到分布式事务中。主服务器将需要向从服务器发送提交/回滚消息,这些消息将需要使用 XATerminator 采取相应行动。 JTA规范只是一个分布式事务 经理 ,需要由服务器在事务日志中记录操作。存在用于事务日志管理的库,例如 HOWL . 我不认为可以使用Spring——即使是与分布式事务管理器一起——来轻松地实现这一点。我曾经尝试过将RMI与从独立客户机和几个从机控制的分布式事务一起使用。这里是一个 blog post 关于它。这相当复杂。 如果使用JavaEE应用服务器,IIOP,则可以免费获得所有这些。IIOP支持分布式事务传播。客户可以是 application client container ,您可以控制 UserTransaction . 这实际上是一种罕见的情况,我认为使用应用服务器是非常合理的。 但也就是说,分布式事务是复杂的事情,它可能导致启发式失败、一个节点死亡时的超时以及复杂的恢复过程。 我最后的建议是:如果可能的话,尽量找一个不涉及分布式事务的设计。这会让你的相貌更容易。 你可以从BPEL那里获得灵感 compensation mechanism . 可能还有其他的错误处理和健壮性设计方法可以避免使用分布式事务。 |
|
|
2
1
据我所知,Spring本身并不管理分布式事务。它可以使用
你可以自己写
|