Java事务

在java事务管理中,三种可用的模型分别为本地事务模型,编程式事务模型以及声明式事务模型。

ACID是事务中所持有的属性名缩写,这些属性为:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。

 

1.本地事务模型

 

指事务管理是被底层的数据库系统或JMS消息提供者来处理的。

 

问题:本地事务模型在使用XA全局事务协调多个资源的时候,是不能同时并发存在的。

 

2.编程式事务模型

 

与本地事务模型最大的区别在于前者管理的是事务,而不是连接。

 

只应在必要的情况下才使用,例如:客户端初始事务,局部化JTA事务,长时间运行的事务(一个事务跨多个服务器请求)。

 

3.声明式事务模型

 

在使用编程式事务模型时,开发者必须显式地使用begin(),commit()和rollback()方法来开始,提交和回滚一个事务,而对于声明式事务模型而言,容器对事务进行管理。

 

注意:在EJB中,ejbContext.setRollbackOnly()被业务逻辑方法调用时使用的是Supports,NotSupports或Never事务属性,容器必须抛出一个java.lang.IllegalStateException,throw new EJBException()效果等于ejbContext.setRollbackOnly()。

 

事务属性

 

事务隔离级别:

1)TransactionReadUncommitted:这个设置是隔离级别中的最低值,该隔离级别允许事务读取到其他事务未提交到数据库中的数据。

2)TransactionReadCommitted:该隔离级别允许在多个事务访问相同的数据时,隐藏其他事务未提交的数据(大部分数据库默认隔离级别)。

3)TransactionRepeatableRead:该级别保证在事务中所读取到的数据集都是相同的(可重复读)。

4)TransactionSerializable:隔离级别中最高的设置,某一个时刻只有唯一一个事务被允许执行。

 

4.XA事务处理

 

XA接口是系统级别的双向接口,该接口是单个事务管理器与一个或多个资源管理器之间的沟通桥梁。

事务管理器控制着JTA事务。

资源管理器负责控制和管理实际的资源(数据库或JMS队列)。

 

 
Java事务_第1张图片
 

XA接口应该只被用于你想要在相同事务环境内协调多个资源(DB或JMS)

 

4.1在JMS中使用XA

 

在XA环境下一个资源必须实现javax.transaction.xa.XAResource接口才能被包含进XA全局事务。对于JMS而言,这是通过在具体的应用程序服务器中使用管理控制台或者配置文件的方式来说明,而你开启XA功能的配置文件的方式来说明的。

 

4.2在数据库中使用XA

 

在数据库中启用XA是通过使用相应的数据库驱动来实现的。

你可能感兴趣的:(java)