【问题标题】:Java EE / EJB vs Spring for Distributed Transaction management with multiple DB ClustersJava EE / EJB vs Spring 用于具有多个数据库集群的分布式事务管理
【发布时间】:2012-02-18 14:49:21
【问题描述】:

我需要制作一个原型(在具有 MySQL 的 J2EE 兼容应用程序服务器中运行)演示以下内容

  • 展示在全球不同站点的多个数据库上分发事务的能力(应用程序管理的数据复制)

  • 展示从位于多个位置的多个数据库集群中选择将事务写入数据库的能力。选择写入哪个数据库取决于用户位置。 (数据库管理的数据复制)

我可以选择 Spring 堆栈或 Java EE 堆栈(EJB 等)。了解您对哪个堆栈更好地支持多个数据库集群上的分布式事务的意见会很有用。

如果可能的话,能否请您指出任何您认为对学习如何使用两个堆栈中的任何一个来实现上述内容有用的资源。我认为查看两者的示例将有助于理解它们是如何工作的,并且可能会更好地决定使用哪个堆栈。

我在 Google 上搜索过很多网站,但大多数似乎已经过时(即 EJB 3 之前和 Spring 3 之前)

谢谢

【问题讨论】:

    标签: java mysql spring jakarta-ee ejb


    【解决方案1】:

    我会通过以下方式使用 JavaEE 堆栈:

    • 为每个数据库服务器配置一个 XA DataSource
    • Stateless EJB 根据用户的位置,查找对应的 DataSource 并从中获取连接
    • 在将事务广播到所有服务器时,Stateless EJB 必须迭代所有已配置的 DataSource 以对它们执行一个或多个查询,但在单个事务中

    如果出现技术故障,事务会在所有相关服务器上回滚。在业务失败的情况下,由于context.setRollbackOnly(),代码可以触发回滚。

    这样,您首先受益于 JavaEE 自动分布式事务划分,然后如果您需要手动管理事务,您可以使用更复杂的模式。

    但是,您在事务中登记的服务器越多,两阶段提交操作将持续的时间越长,此外,如果您在系统之间存在高延迟。而且我怀疑 MySQL 是执行此类复杂分布式事务的最佳关系数据库实现。

    【讨论】:

    • 谢谢伊夫。这太有趣了。如何在 Spring 中实现相同的功能。我试图了解 Spring Stack 和 Java EE 堆栈之间的实现有何不同。
    • 它与 Spring 非常相似,但是您必须设置分布式事务管理器实现(例如,如果部署在 Tomcat 中),配置事务分界和隔离级别,我认为当 JavaEE 默认值适合您时会产生开销需要。根据您的持久层,您必须使用 Spring 进行 DataSource 路由
    • 是否可以使用 Spring 但使用 JavaEE 作为事务管理器?我正在使用 Jboss 7 AS
    • 当然可以。但我发现,当只有一个可能就足够时,使用混合技术构建一个“听起来很复杂”的应用程序风险更大。万一出现故障,对涉及的部位进行诊断将更加困难。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2014-05-27
    • 2019-07-02
    • 2017-05-02
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多