相关疑难解决方法(0)

如何设计全局分布式事务(无数据库)?JTA可以用于无数据库事务吗?

我认为这是一个相当普遍的问题:如何将我的业务逻辑放在分布式系统环境中的全局事务中?举个例子,我有一个包含几个子任务的TaskA:

TaskA {subtask1,subtask2,subtask3 ...}

这些子任务中的每一个都可以在本地机器或远程机器上执行,我希望TaskA通过事务以原子方式(成功或失败)执行.每个子任务都有一个回滚函数,一旦TaskA认为操作失败(因为其中一个子任务失败),它就会调用子任务的每个回滚函数.否则,TaskA会提交整个事务.

为此,我按照"审计试用"事务模式来记录每个子任务,因此TaskA可以知道子任务的操作结果,然后决定回滚或提交.这听起来很简单,但是,困难的部分是如何将每个子任务与全局事务相关联?

当TaskA开始时,它启动一个关于哪个子任务什么都不知道的全局事务.为了使子任务意识到它,我必须将事务上下文传递给每个子任务调用.这真是太可怕了!我的子任务可以在新线程中执行,也可以通过AMQP代理发送消息在远程执行,很难巩固上下文传播的方式.

我做了一些研究,如"交易模式 - 四个交易相关模式的集合","异步消息传递环境中的已检查事务",这些都没有解决我的问题.他们要么没有实际的例子,要么没有解决上下文传播问题.

我想知道人们如何解决这个问题 因为这种交易必须在企业软件中很常见.

X/Open XA只是解决方案吗?JTA可以在这里提供帮助(我没有考虑JTA,因为它与数据库事务有关,我使用Spring,我不想在我的软件中涉及另一个Java EE应用服务器).

有些专家可以和我分享一些想法吗?谢谢.

结论

Arjan和Martin给出了非常好的答案,谢谢.最后我没有这样做.经过更多的研究,我选择了另一种模式" CheckPoint " 1.

根据我的要求,我发现我的"审核试验事务模式"的意图是知道操作已进行到哪个级别,如果失败,我可以在重新加载某些上下文后在失败的地点重新启动它.实际上这不是事务,它在失败后没有回滚其他成功的步骤.这是CheckPoint模式的精髓.然而,研究分布式交易的东西让我学到了很多有趣的东西.除了Arjan和Martin提到的.我还建议人们深入研究这个领域,看看CORBA,这是一个众所周知的分布式系统协议.

java jta distributed-transactions

16
推荐指数
2
解决办法
9107
查看次数

标签 统计

distributed-transactions ×1

java ×1

jta ×1