企业级应用程序中的事务

时间:2014-10-22 08:33:29

标签: java spring jdbc jta

我正在尝试理解这些事务,更具体地说,我正在使用Spring框架。通过我拥有的材料(互联网和书籍),我看到了这些术语:

  1. 集装箱管理交易(CMT)。
  2. Bean托管交易(BMT)。
  3. Java事务API(JTA)。
  4. 此外,对于大型企业级应用程序,术语如" local"和"全球"我也遇到了交易。

    我所理解的是,全局事务是针对我们管理两个或更多不同资源(例如One Oracle DB,其他MySQL等)的情况,如果两者都成功/失败,则会发生/回滚。本地事务是指我们只有一个资源需要管理(比如只有一个与MySQL的数据库连接)。

    我有以下怀疑:

    1. 在编写简单的JDBC独立程序时,我们可以编写提交/回滚代码。我相信这是本地交易的例子,这是正确的吗?这笔交易是否由" JDBC"图书馆本身还是司机?

    2. 什么是CMT?我的理解是Container负责事务管理(如Jboss AS)。如果这是正确的,它管理的内部如何? CMT是本地还是全球?他们是否在内部使用JDBC API来管理交易?

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

    4. 在阅读Spring框架时,我读到Spring框架有自己的管理事务的方式。下线,我读到Spring Framework使用JTA来管理交易?我很困惑。如果JTA是API,我们是否有多个供应商实现JTA(对于JPA,我们可以有多个供应商提供实现,例如Hibernate)。

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

    6. 对于CMT来说,CMT是否遵循JTA所规定的规则(主要是API)?

    7. 如果你逐点回答,我会在网上搜索,我的怀疑仍未得到回答,那就太棒了。

1 个答案:

答案 0 :(得分:2)

关于本地/全局事务:全局我认为你在谈论XA事务(2阶段提交:http://en.wikipedia.org/wiki/X/Open_XA)。当您处理多个数据库或事务资源时,这只是强制性的。

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

  2. CMT:Container Managed:容器将检测开始和     事务结束并将执行提交/回滚     取决于方法返回状态(成功返回:提交,     例外:回滚)。 CMT依靠JTA来管理其上的交易     资源。然后由适当的资源适配器(RA)进行通话     到jdbc或与您的EIS(数据)相关的任何其他驱动程序。看着     http://docs.oracle.com/javaee/5/tutorial/doc/bncjx.html

  3. BMT:这意味着由豆来控制交易     边界。使用这种交易非常罕见     管理这些天。使用BMT,您可以控制UserTransaction     对象,直接控制事务边界是一个错误     用JDBC。还要记住,即使你在BMT一些     像JPA(而不是JTA)这样的框架将使当前事务无效     即使您没有明确要求回滚,也会出现任何错误。它     意味着使用BMT非常困难/危险/无用。

  4. JTA(我希望你没有拼错JPA)处于另一个层面:JTA     资源适配器必须实现的API才能成为容器的一部分     交易。除了UserTransaction类(您将使用的内容)     BMT控制交易边界)你无关     JTA。 JTA没有多重实现,但JTS(Java Transaction Service)有多个实现,每个应用服务器供应商都实现自己的JTS。

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

  6. CMT使用JTA,但JTA再次是一个低级别的合同     应用程序服务器的组件。应用设计师应该     不关心JTA。

相关问题