在介绍EJB的事务之前,我们很有必要再对事务的基本概念再做一个回顾和了解,通过对基础概念的掌握能够帮助我们深一步的去理解EJB中的事务.
事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取。简单点说就是事务的正确执行使得数据库从一种状态转换成另一种状态。
事务本身有着自己的原则,而且必须遵循ACID原则.ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
原子性:
即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。
一致性:
事务的执行使得数据库从一种正确状态转换成另一种正确状态。
隔离性:
在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。
持久性:
事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
事务在什么时候开始运行呢? 当我们执行一条SQL语句的时候,事务就会自己启动. 启动之后必须让启动事务的用户或者应用 程序来显示的终止此事务,除非你用了自动提交 Automatic commit.这种情况是每个SQL语句就是一个单独的事务.这里涉及到数据库系统所支撑的两种事务模式,一种事务模式就是我们刚才所说的自动提交模式.当数据库执行完一个Sql语句之后,会自动提交事务,另一种是手动提交模式,也就是事务必须由数据库客户端程序制定事务开始 边界和结束边界.
我们通过执行Commit或RollBack语句来终止事务。
Commit表示事务正确的提交,RollBack表示事务被回滚,具体来解释就是当执行Commit语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了--即它们被写到磁盘。当执行RollBack语句时,自从事务启动以来对数据库所做的一切更改都被撤销,并且数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。
一般运行一个事务的时候基本上没有什么问题,但是当运行多个事务的时候,并且这些事务同时访问数据库中相同的数据,便会产生各种并发问题.如何解决这些问题,我们需要采取一定的隔离机制.