Tag: distributed transactions

XA / JTA事务:在DB更改可见之前到达JMS消息

上下文是: producer(JTA transaction PT )既向JMS队列发送消息又进行DB更新; consumer(JTA事务CT )侦听同一队列并在收到消息时读取DB; 应用程序服务器 – WebLogic,DB – Oracle。 我观察到,如果已经收到相应的JMS消息( PT已经提交了?),有时CT不能(但是?)能够看到PT的 DB更改,事件。 似乎JTA不能保证这种一致性(这在Jurgen Holler的演讲“性能交易选择”中也得到了证实)。 避免此类问题的最佳方法是什么(除了明显的 – 不使用JTA)? 谢谢。

涉及RMI调用的Spring分布式事务可能吗?

背景 我有Spring Client应用程序,它使用RMI为两台服务器提供服务。 在客户端中,我将实体保存到数据库(简单),并使用实体的详细信息对两个服务器进行rmi调用。 我在服务器上使用Spring 3.0.2,客户端是一个简单的Spring-mvc站点。 要求 我的要求是,如果任何rmi调用对整个事务回滚的服务器失败,那么实体不会保存在客户端上,如果rmi调用成功,那么它也会回滚。 我对分布式事务比较陌生,但我想我想要一个使用RMI调用的XA事务。 我确实找到了关于这个主题的一个很好的链接,但它没有提到调用两个远程方法调用到不同服务器时的模式。 我希望在推荐阅读方面听到更多有关该主题的内容,以及有关如何使用spring实现此目的的任何指示。 是否可以使用事务管理器? 谢谢。

Java:许multithreading中的XA事务传播

如何在Java SE(非Java EE或Spring)中使用事务管理器(如Bitronix , JBoss TS或Atomikos )来支持以下用例: 我们假设我们有以下类: public class Dao { public void updateDatabase(DB db) { connet to db run a sql } } 我们从中创建一个Java Runnable,如下所示: public class MyRunnable extends Runnable { Dao dao; DB db; public MyRunnable(Dao dao, DB db) { this.dao=dao; this.db = db; } public run() throws Exception { return dao.updateDatabase(db); […]

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

我认为这是一个相当普遍的问题:如何将我的业务逻辑放在分布式系统环境中的全局事务中? 举个例子,我有一个包含几个子任务的TaskA: TaskA {subtask1,subtask2,subtask3 …} 这些子任务中的每一个都可以在本地机器或远程机器上执行,我希望TaskA通过事务以primefaces方式(成功或失败)执行。 每个子任务都有一个回滚函数,一旦TaskA认为操作失败(因为其中一个子任务失败),它就会调用子任务的每个回滚函数。 否则,TaskA会提交整个事务。 为此,我按照“审计试用”事务模式来记录每个子任务,因此TaskA可以知道子任务的操作结果,然后决定回滚或提交。 这听起来很简单,但是,困难的部分是如何将每个子任务与全局事务相关联? 当TaskA开始时,它会启动一个关于哪个子任务什么都不知道的全局事务。 为了使子任务意识到它,我必须将事务上下文传递给每个子任务调用。 这真是太可怕了! 我的子任务可以在新线程中执行,也可以通过AMQP代理发送消息在远程执行,很难巩固上下文传播的方式。 我做了一些研究,如“交易模式 – 四个交易相关模式的集合”,“异步消息传递环境中的已检查事务”,这些都没有解决我的问题。 他们要么没有实际的例子,要么没有解决上下文传播问题。 我想知道人们如何解决这个问题 因为这种交易必须在企业软件中很常见。 X / Open XA只是解决方案吗? JTA可以在这里提供帮助(我没有关注JTA,因为它与数据库事务有关,我使用Spring,我不想在我的软件中涉及另一个Java EE应用服务器)。 有些专家可以和我分享一些想法吗? 谢谢。 结论 Arjan和Martin给出了非常好的答案,谢谢。 最后我没有这样做。 经过更多的研究,我选择了另一种模式“ CheckPoint ” 1 。 根据我的要求,我发现我的“审核试验事务模式”的意图是知道操作已经进行到哪个级别,如果它失败了,我可以在重新加载某些上下文后在失败的地点重新启动它。 实际上这不是事务,它在失败后没有回滚其他成功的步骤。 这是CheckPoint模式的本质。 然而,研究分布式交易的东西让我学到了很多有趣的东西。 除了Arjan和Martin提到的。 我还建议人们深入研究这个领域,看看CORBA,这是一个众所周知的分布式系统协议。