2010-06-04 86 views
37

我是JTA的新手,它是基础交易经理。任何人都可以解释每个这些的利弊吗?随意添加我没有在标题中列出的其他人。Atomikos vs JOTM vs Bitronix vs?

此外,主要的应用程序服务器(WebSphere,JBoss,Glassfish)是否有自己的符合JTA的事务管理器?在这些环境中,你会继续使用这些第三方实现吗?

回答

47

我是JTA的新手,它是底层的事务管理器。任何人都可以解释每个这些的利弊吗?随意添加我没有在标题中列出的其他人。

独立的事务管理器我所知道的包括BitronixSimpleJTATyrex(死了吗?),JOTM(乔纳斯中使用),GeronimoTM/Jencks(Geronimo中使用),JBossTS(在JBoss中使用)和Atomikos

我从来没有广泛地测试过它们(这是你必须做的,如果你必须选择一个),所以我不能提供详尽的优点/缺点(这将需要一些工作)。但这里有一些链接:

以防万一,这是我很个人的观点:

  • 我见过很多关于JOTM的抱怨。
  • 我认为GeronimoTM/Jencks缺乏文档。
  • SimpleJTA没有实现JTS,也没有激活。
  • Bitronix是体面的文件,但不提供支持。
  • Atomikos是一个令人印象深刻的产品,有据可查,并提供支持。
  • JBossTS又名ArjunaTS绝对是一个成熟的产品(请参阅announcement of the acquisition的一些历史),并提供支持。

就我个人而言,如果我不得不选择一个,我会列出Atomikos和JBossTS并对它们进行测试。

此外,主要应用程序服务器(WebSphere,JBoss,Glassfish)是否有自己的符合JTA的事务管理器?

当然他们这样做,JTA是Java EE规范的一部分,Java EE服务器必须支持它。

在那些环境中,你还会使用这些第三方实现吗?

不,我会使用提供的事务管理器(为了简单,支持等)。

+0

谢谢你这个有用的答案。有时候,为了测试和演示目的,我们的应用程序需要在Jetty或Tomcat中运行。 Atomikos和JBossTS仍然会在这些环境中工作吗? 事实上,这是第三方交易管理者的原因吗?为了在完整的应用程序服务器之外获得良好的事务支持? – HDave 2010-06-05 01:08:35

+1

@HDave:独立事务管理器在您需要全局事务支持(即您处理多个事务资源时)以及您的环境不提供对此的支持(例如独立应用程序,servlet容器)时非常有用。在这样的环境中,我会使用Spring来简化配置(并且JBossTS和Atomikos会适合)。 – 2010-06-05 01:22:23

+0

Jencks实际上是一个使用GeronimoTM作为JTA事务管理器的JCA容器... – pgras 2013-02-05 14:48:28

6

我用Jetty测试了Atomikos和JOTM。 Atomikos工作得很好,我完全推荐它。我制作了例如在我的应用程序中测试分布式事务的自动化单元测试,这些测试工作正常

就JOTM而言,我确信它至少有时会伪造两阶段提交协议。我有一个PostgreSQL数据库,关闭了两阶段提交功能,JOTM能够像我有真正的分布式事务一样工作。真正的事务管理器(例如GlassFish中实现的管理器)在这种情况下报告了错误。

如果它很重要,我在我的应用程序中使用了JPA2和Hibernate 4。

+0

关于JTOM如何伪造两阶段提交协议的有趣评论。 WebLogic提供的JTA管理器/驱动程序也是这样做的。更好的方式是,当它们出现一个不支持它的数据库(或关闭它)时,让它们伪造。 – 2012-04-08 12:11:00

+0

通常,您可以在XA事务中拥有一个非XA资源。如果您的事务管理器识别出这种情况,它将在XA资源上调用prepare(),如果成功,它就可以在事务涉及的所有资源(包括非XA资源)上调用commit()。 – 2014-09-06 16:26:18

+0

是的,他们称之为投票。非XA资源可以决定它是否全部有效 – stringy05 2014-10-02 00:27:48