多个操作组成一个不可分割的整体,可以称为一个JBoss事务。
1.JBoss事务的四要素简称ACID,分别是
Atomicity 原子性:事务的多个操作组成一个单元,所有操作要么一起成功,要么一起失败
Consistency 一直性:事务操作的前后,数据库必须保持数据的一致性和完整性
Isolation 隔离性:多个事务之间彼此不会相互影响
Durability 持久性:事务成功之后,事务结果应该持久化,也就是说事务的成功是持久的
2.加锁:锁分为悲观锁和乐观锁,当使用悲观锁时,分为五个隔离级别,分别是SERIALIZABLE、 REPEATABLE_READ (default)、READ_COMMITTED、READ_UNCOMMITTED和NONE,隔离级别逐步减弱。乐观锁也叫版本锁,其对数据进行操作时,将其复制到临时区,操作之后将版本与原有数据比较,如果一致则将递增版本并写回,如果不一致则回滚,由于乐观锁仅在复制出数据和提交数据时对数据加锁,所以并行度更高,但如果写操作比较频繁地话则容易出现冲突导致回滚。
3.两阶段提交(Two-Phase Commit)
如果对多种可恢复的资源进行操作,在事务提交时,可能会导致部分事务成功而部分事务失败,使数据处于不一致的状态,这时候可使用分布式事务,分布式事务采用两阶段提交协议,在事务提交之前,先询问各种资源是否为提交做好准备(第一阶段),然后再提交(第二阶段),如果失败,则全部回滚
JBoss事务管理器配置在JBOSS_HOME/server/all/config/jboss-service.xml中,如下:
- <mbean code="org.jboss.tm.TransactionManagerService" name="jboss:service=TransactionManager" xmbeandd="resource:xmdesc/Transaction ManagerService-xmbean.xml">
- <attribute name="TransactionTimeout">300</attribute>
- <attribute name="GlobalIdsEnabled">true</attribute>
- <depends optional-attribute-name="XidFactory">jboss:service=XidFactory</depends>
- </mbean>
可以通过JNDI名java:/UserTransaction访问事务
- UserTransaction ut = (UserTransaction) ctx.lookup("java:/UserTransaction");
- ut.begin();
- ut.commit();
【编辑推荐】