首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >企业级应用程序中的事务

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

Stack Overflow用户
提问于 2014-10-22 08:33:29
回答 1查看 1.1K关注 0票数 2

我试图理解这些事务,更确切地说,我是使用Spring框架进行的。通过我所拥有的材料(包括互联网和书籍),我看到了以下术语:

  1. 容器管理事务(CMT)。
  2. Bean管理事务(BMT)。
  3. Java事务API (JTA)。

此外,对于大型企业级应用程序,我也遇到过“本地”和“全局”事务等术语。

我所理解的是,全局事务用于管理两个或多个不同的资源(比如一个Oracle、另一个MySQL等),并在两者都成功/失败时向它们提交/回滚。本地事务用于当我们只有一个资源要管理时(比如只有一个到MySQL的DB连接)。

我有以下疑问:

  1. 在编写一个简单的JDBC独立程序时,我们可以编写提交/回滚代码。我相信这是本地交易的例子,这是对的吗?这个事务是由"JDBC“库本身还是由驱动程序来处理的?
  2. 什么是CMT?我理解的是Container负责事务管理(就像Jboss )。如果这是正确的,它如何在内部管理?CMT是本地的还是全球的?他们是否在内部使用JDBC来管理事务?
  3. 什么是BMT?这一点我无法理解。我们可以在App服务器中部署应用程序(我相信在这种情况下事务将由容器管理),或者我可以编写一个独立的应用程序,在其中我可以自己使用事务管理代码(尝试)。(抓挡等)。那么,BMT属于哪一类呢?
  4. 在阅读Spring框架时,我看到Spring框架有自己的事务管理方式。接下来,我看到Spring使用JTA来管理事务吗?我对此感到困惑。如果JTA是API,那么是否有多个实现JTA的供应商(就像JPA一样,我们可以有多个供应商提供实现,例如Hibernate)。
  5. JTA用于本地或全球事务吗?当我编写一个简单的JDBC程序来管理事务时,它是否使用符合JTA的API?或者JTA与简单JDBC程序使用的事务管理完全不同?
  6. 对于CMT来说,CMT是否遵循JTA已经制定的规则(主要是API)?

如果你能以点的方式回答,那就太好了,我确实在网上搜索过,我的疑虑仍然没有得到回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-22 10:00:41

关于本地/全局事务:通过全局,我想您是在讨论XA事务(2阶段提交:XA)。在处理多个数据库或事务资源时,这只是强制性的。

  1. 是的,这是一个“本地事务”,它意味着只有一个数据库是事务的一部分。事务由数据库管理,在这种情况下由JDBC控制。
  2. CMT :容器管理:容器将检测事务的开始和结束,并将根据方法返回状态执行提交/回滚(连续返回:提交、异常:回滚)。CMT依赖于JTA来管理其资源上的事务。然后由合适的资源适配器(RA)来与jdbc或任何其他与EIS (数据)相关的驱动程序进行对话。看看http://docs.oracle.com/javaee/5/tutorial/doc/bncjx.html
  3. BMT:这意味着要由bean来控制事务边界。现在很少使用这种事务管理。对于BMT,您控制UserTransaction对象,直接使用JDBC控制事务边界是一个错误。还请记住,即使您在BMT中,即使您没有明确地请求回滚,像JPA这样的框架(而不是JTA)也会在任何错误上使当前事务无效。这意味着使用BMT非常困难/危险/无用。
  4. JTA (我希望您没有漏掉JPA)处于另一个级别: JTA,一个资源适配器必须实现的API,才能成为容器事务的一部分。除了UserTransaction类(您将在BMT中使用它来控制事务边界)之外,您与JTA无关。JTA没有多个实现,但JTS (Java Transaction )有多个实现,每个应用服务器供应商都实现自己的JTS。
  5. JTA是框架设计器的API,JTA将合同强加给资源适配器RA,RA将使用JDBC或任何其他API来处理它的EIS (企业信息存储,我们称它为DB)。JTA适用于XA事务和非XA事务(如果您的RA支持XA事务)。
  6. CMT使用JTA,但是JTA是应用服务器组件之间的一个低级契约。应用程序设计人员不应该关心JTA。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26503286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档