如何将JTA事务传播到不同的JVM?

时间:2014-07-28 13:03:01

标签: transactions jms jta distributed-transactions atomikos

我有一个多域应用程序。每个域都是一个单独的Spring应用程序,它使用JPA提供服务并访问它自己的数据库。我没有使用任何Java EE容器只是Jetty将域作为Web应用程序运行。在我的项目中,要求可以在远程计算机上安装这些域,这样我就无法将组件绑定到单个JVM上。我正在寻找的是通过网络在这些域之间进行可靠交易的方法。

例如。考虑到我们有一个计费和用户帐户处理域,我喜欢使新的用户注册操作原子化,涉及以下步骤:

  • 通过调用用户域的功能
  • 创建用户帐户
  • 通过致电结算域的功能
  • 记录用户的注册费

如果其中一个步骤失败,我预计会回滚两个域的数据库。

我目前正在试用JTA + Spring + Atomikos based on this article,但这仅考虑单个JVM。我的目标是以这样的方式设置Atomikos:如果在其自己的JVM中运行的域接受JMS消息,该消息是在调用者域中启动的JTA事务的一部分,并且该侦听器操纵域的数据库,创建的数据库事务也将参与JTA事务。这样,只有在JTA协调器提交全局事务时才提交对本地数据库所做的更改,而不是在onMessage函数结束时本地提交。

这就是我暂时停留的地方,因为我认为Atomikos可以单独实例化,而不仅仅是嵌入式,如上面的示例所示,Spring应用程序可以配置为使用此共享事务管理器在事务中注册资源。但我无法找到任何相关的教程,仅用于本地事务管理。

我正在寻找一些建议,或者 - 甚至更好 - 一个代码示例,展示我如何实现这一目标。 Atomikos不是必需的,但我需要一个非Java EE解决方案,而不是付费。

1 个答案:

答案 0 :(得分:0)

我来自Atomikos。我们提供此功能,但不是我们的开源/免费版(而是付费版)的一部分。

然而,我们的价格相当实惠(请查看我们的网站了解详情)。

希望这有帮助,