48.4. 使用Apusic事务服务

48.4.1. 事务服务简介

事务的目的就是为了确保数据的完整性,一个事务通常被定义为一个包含多步操作的不可分割的单元。事务具有下列四个特征:

  • 原子性(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进行交互。

48.4.2. 配置Apusic事务服务

请参考???。

48.4.3. 使用事务服务

Apusic应用服务器的事务服务支持在EJB和客户端中使用事务。

48.4.3.1. 在EJB中使用事务服务

Apusic应用服务器的EJB容器支持两种类型的事务管理:

  • Bean管理事务(程序型的事务划分)

  • 容器管理事务(声明型的事务划分)

请参考第 46.11 节 “EJB的事务”

48.4.3.2. 在客户端中使用事务服务

客户端通过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();