Java 在同一集群中运行的web应用程序之间共享事务

Java 在同一集群中运行的web应用程序之间共享事务,java,hibernate,spring,cluster-analysis,Java,Hibernate,Spring,Cluster Analysis,我们(将)拥有以下架构: Base.war将是一个独立的spring hibernate应用程序 所有应用程序都将在Glassfish下运行,并且可能是群集的 E1.war将位于Base.war之上,扩展其功能 在Base.war 任何一场战争都可以启动一个事务,而事务可以跨越两次战争 在不关闭Base.war或任何其他Ex.war的情况下,应该可以升级Ey.war spring hibernate glassfish环境是否有解决方案?问自己/团队的问题: 我们的数据库支持XA吗 JDBC

我们(将)拥有以下架构:

  • Base.war
    将是一个独立的spring hibernate应用程序
  • 所有应用程序都将在Glassfish下运行,并且可能是群集的
  • E1.war
    将位于
    Base.war
    之上,扩展其功能
  • Base.war
  • 任何一场战争都可以启动一个事务,而事务可以跨越两次战争
  • 在不关闭
    Base.war
    或任何其他
    E
    x
    .war
    的情况下,应该可以升级
    E
    y
    .war

spring hibernate glassfish环境是否有解决方案?

问自己/团队的问题:

  • 我们的数据库支持XA吗
  • JDBC驱动程序支持XA吗
  • Glassfish/database/JDBC的组合能与XA一起工作吗
  • 我们真的需要分布式事务吗
  • 我将回到第4点——不要做分布式事务。您需要确保分布式事务是您的最佳解决方案。这并不简单,建议尽量避免。这直接来自Spring的联合创始人和高级开发者Jürgen Höller


    Spring不支持在进程之间传播事务,因此您需要容器来支持这一点,或者自己手动完成这一点。

    好吧,我不确定我是否需要分布式事务,但我如何提供一个解决方案,您可以调用E1(内部称为Base)和Base,例如在Web服务上,和维护原子性?一种方法(我不知道这是否适合您的问题域)是使用异步消息传递-关于这方面的最终工作是,我还没有研究过它,但它是否允许我与应用程序合作来决定复杂(多应用程序)操作的结果(提交/回滚)?它似乎是一个具有松散耦合应用程序的系统的解决方案。不会使用分布式事务。所有的东西都会进入一个战争档案。