当前位置 主页 > 关于我们 > 站长日志 >

    transactions,应运而生的Transaction

    栏目:站长日志 时间:2021-03-04 13:31

         企业级应用会在一个或多个数据库中存取数据。
         这些数据必须是准确的、实时的、可靠的(accurate, current, reliable)
        当多个操作同时更新同一条数据时,或者执行一个操作时出现了异常,都可能会导致数据的完整性缺失。
         Transaction应运而生。
         Transaction会控制多个操作同时访问的情况。
         Transaction会在出现异常的时候,执行回滚操作,确保数据处于一致性状态。consistent state。
         例:
         从账户A转账300到账户B,事务表现为:
    begin
    账户A减去300
    账户B加上300
    记录日志
    end
         三步缺一不可,因此组成一个事务。
         事务以begin开始,以commit或rollback结束。发生异常的时候,也rollback。
         rollback时会把此事务已经完成的操作都恢复回去,因此,即使事务失败了,数据还是一致的,完整的。不会出现账户A已经减了300,而账户B却还没有加上。
         两种类型:
         Container-Managed Transactions
         Bean-Managed Transactions
         不同类型的事务,边界界定是不一样的形式。
         Container-Managed Transactions
          容器里的事务,由EJB容器来设定事务的边界。
         代码中无需显式的界定事务。
          通常,每个EJB方法都是一个事务。方法开始的时候begin,方法结束的时候commit。不允许嵌套的或多个事务。
    非必需的,可以通过属性设置。
         如果method-A()所处的事务为TX1,那么method-B()所处的事务是什么?
         如果method-A()没处在事务中,嘛呢method-B()的事务应是如何的?
         可以通过设置method-B()的属性来控制其事务,即给method-B()加上@TransactionAttribute注释。
         TransactionAttribute共有6中属性 :
         Required, RequiredNew, Mandatory, NotSupported, Supports, Never。
         表格中显示: method-B's Transaction 
         TX1时,代表B和A处于同一个事务。
         TX2时,代表在执行B之前,容器会把TX1挂起,然后开启一个新的事务TX2,执行完B之后,在重启TX1。
         None时,代表B不在事务中执行。
         Error时,代表此时的设置,由A来调用B会报错。
         属性设置示例:
         Rollback Container-Managed Transactions
         (1) system exception : 容器会自动rollback。
         (2) EJBContext.setRollbackOnly()。
         (3) application exception : 容器不会自动rollback,可通过调用setRollbackOnly()执行rollback。
         Container-Managed Transaction中不允许调用的方法:
         (1) java.sql.Connection : commit(), rollback(), setAutoCommit()
         (2) javax.ejb.EJBContext : getUserTransaction()
         (3) javax.transaction.UserTransaction : 所有方法。
         Bean-Managed Transactions
         Container-Managed Transaction 可以简化代码,但是有其限制: 一个方法要么在一个事务中,要么不在事务中。不能自定义事务。
         Bean-Managed Transaction 需要显示的设定事务的开始、结束或回滚,容易控制。
         也可称为Application-Managed Transactions
         (1) JDBC Transactions
         (2) JTA Transactions
         原文链接:https://blog.csdn.net/xuefeng0707/article/details/7908589
    下一篇:没有了