Java 企业级应用程序中的事务

Java 企业级应用程序中的事务,java,spring,jdbc,jta,Java,Spring,Jdbc,Jta,我试图理解这些事务,更具体地说,我是使用Spring框架来完成的。翻阅我的资料(包括互联网和书籍),我看到了以下术语: 容器管理事务(CMT) Bean管理事务(BMT) Java事务API(JTA) 此外,对于大型企业级应用程序,我也遇到过“本地”和“全局”事务之类的术语 据我所知,全局事务适用于我们管理两个或多个不同资源(如一个Oracle DB、其他MySQL等)的情况,如果两个资源都成功/失败,则提交/回滚到它们。当我们只有一个资源需要管理时(比如只有一个到MySQL的DB连接),本地事

我试图理解这些事务,更具体地说,我是使用Spring框架来完成的。翻阅我的资料(包括互联网和书籍),我看到了以下术语:

  • 容器管理事务(CMT)
  • Bean管理事务(BMT)
  • Java事务API(JTA)
  • 此外,对于大型企业级应用程序,我也遇到过“本地”和“全局”事务之类的术语

    据我所知,全局事务适用于我们管理两个或多个不同资源(如一个Oracle DB、其他MySQL等)的情况,如果两个资源都成功/失败,则提交/回滚到它们。当我们只有一个资源需要管理时(比如只有一个到MySQL的DB连接),本地事务是适用的

    我有以下疑问:

  • 在编写简单的JDBC独立程序时,我们可以编写提交/回滚代码。我相信这是本地交易的例子,对吗?这个事务是由“JDBC”库本身处理还是由驱动程序处理

  • 什么是CMT?据我所知,容器负责事务管理(如Jboss AS)。如果这是正确的,它在内部是如何管理的?CMT是本地的还是全球的?他们是否在内部使用JDBCAPI来管理事务

  • 什么是BMT?这一点我无法理解。我们可以在应用服务器中部署应用程序(我相信在这些情况下,事务将由容器管理),或者我可以编写一个独立的应用程序,在其中我可以自己使用事务管理代码(try..catch block等)。那么,BMT属于哪一类

  • 在阅读Spring框架时,我了解到Spring框架有自己的事务管理方式。接下来,我读到Spring框架使用JTA来管理事务?我对此感到困惑。如果JTA是API,我们是否有多个供应商实现JTA(就像JPA一样,我们可以有多个供应商提供实现,例如Hibernate)

  • JTA是针对本地交易还是全球交易?当我编写一个简单的JDBC程序来管理事务时,它是否使用符合JTA的API?或者JTA与简单JDBC程序使用的事务管理完全不同

  • 与CMT相同,CMT是否遵循JTA制定的规则(主要是API)


  • 如果你回答得准确一些,那就太好了,我确实在网上搜索过,我的疑问仍然没有得到回答。

    关于本地/全局事务:通过全局,我想你说的是XA事务(2阶段提交:)。当您处理多个数据库或事务资源时,这是必需的

  • 是的,这是一个“本地事务”,它意味着只有一个数据库可用 交易的一部分。事务由数据库管理 在这种情况下由JDBC控制

  • CMT:Container Managed:容器将检测开始和结束 事务结束,并将执行提交/回滚 根据方法返回状态(成功返回:提交, 异常:回滚)。CMT依靠JTA管理其上的事务 资源。然后由适当的资源适配器(RA)进行对话 到jdbc或与EIS(数据)相关的任何其他驱动程序。看看

  • BMT:这意味着由bean控制事务 边界。使用这种事务是非常罕见的 这些天的管理。通过BMT,您可以控制UserTransaction 对象,直接控制事务边界是错误的 使用JDBC。请记住,即使你是在BMT的一些 像JPA(而不是JTA)这样的框架将使上的当前事务无效 任何错误,即使您没有明确请求回滚。信息技术 意味着使用BMT相当困难/危险/无用

  • JTA(我希望你没有错报JPA)是另一个级别:JTA 资源适配器必须实现的API是容器的一部分 交易除了UserTransaction类(您将在 BMT控制交易边界)与您无关 JTA。JTA没有多个实现,但是JTS(Java事务服务)有多个实现,每个应用服务器供应商都实现自己的JTS

  • JTA是框架设计师的API,JTA向 资源适配器RA,RA将使用JDBC或任何其他API 处理它的EIS(我们称之为企业信息存储) 您的数据库)。JTA适用于XA和非XA事务(如果RA支持XA事务)

  • CMT使用JTA,但JTA也是双方之间的低级合同 应用服务器的组件。应用程序设计者应该 不在乎JTA


  • 谢谢你的回复。没有JTA我们可以进行事务管理吗?我们也可以只使用JPA进行交易管理吗?事实上,我从互联网上读得越多,我对某些方面感到困惑。某处提到了JPA交易。那么,这是否意味着JPA也能够进行交易呢?我指的是这个链接:。这就是本页中提到的内容。“跨不同事务API(如Java事务API(JTA)、JDBC、Hibernate、Java持久性API(JPA)和Java数据对象(JDO))的一致编程模型”JTA是J2EE的一部分,而不是Spring。您仍然可以使用Spring执行JTA,但没有附加值,因为Spring有自己的事务抽象层。是的,您可以在没有JTA的情况下进行事务管理。您可以使用JDBC、JPAForJavaSE或容器外的任何其他ORM框架提交/回滚。使用单个资源运行单个JVM是非常容易的。当您有一个跨越多个服务器实例和多个数据库的XA事务时,这样做会变得更加困难。应用服务器(用于J2EE的JTA/JTS和用于Spring的定制API)提供了一个方便的平台