事务的目的就是为了确保数据的完整性,一个事务通常被定义为一个包含多步操作的不可分割的单元。事务具有下列四个特征:
原子性(Atomicity):事务能够以两种方式结束:提交或回滚。当事务被提交后,在这个事务边界内对数据的更改会被保存。当事务回滚,所有对数据的更改都要被恢复。
一致性(Consistency):如果事务失败,数据的完整性将被保护。
隔离性(Isolation):并发执行的事务都应该表现为独立执行。
持久性(Durability):事务提交后的改变应该是持久的。
在J2EE平台中,可管理的事务资源包括三种,数据库连接池、消息系统连接和符合J2EE™连接器架构(J2EE Connector Architecture,JCA)的资源。Apusic应用服务器中的事务管理器提供对以上三种资源的事务管理。
J2EE通过两个规范支持分布式事务:
Java Transaction API (JTA)
Java Transaction Service (JTS)
JTA是上层的、中立于协议的应用程序接口,允许应用和应用服务器访问事务。JTS规定事务管理的实现必须支持JTA,并且实现OMG对象事务服务(Object Transaction Service,OTS)规范的Java映射。JTS使用IIOP协议传播事务。 Apusic应用服务器的事务管理器完全支持JTS和JTA,EJB容器使用JTA和JTS进行交互。
Apusic应用服务器的事务服务支持在EJB和客户端中使用事务。
Apusic应用服务器的EJB容器支持两种类型的事务管理:
Bean管理事务(程序型的事务划分)
容器管理事务(声明型的事务划分)
客户端通过JNDI查找(lookup)java:comp/UserTransaction获得服务器的事务服务,返回的对象实现了javax.transaction.UserTransaction接口。客户端通过调用UserTransaction的begin、commit和rollback方法管理事务。使用JNDI查找UserTransaction接口的范例代码如下:
InitialContext ic = new InitialContext(); String txName = "java:comp/UserTransaction"; UserTransaction tx = (javax.transaction.UserTransaction)ic.lookup(txName); tx.begin(); // transacted commands, such as JDBC calls tx.commit();