【问题标题】:How to propagate JTA transactions to different JVMs?如何将 JTA 事务传播到不同的 JVM?
【发布时间】:2014-09-19 16:19:04
【问题描述】:

我有一个多域应用程序。每个域都是一个单独的 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 解决方案。

【问题讨论】:

    标签: transactions jms jta distributed-transactions atomikos


    【解决方案1】:

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

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

    希望这会有所帮助,

    男人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2013-01-19
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多