通过将一个或多个步骤包含在不可分的工作单元,事务可确保数据的完整性和一致性。本章包含以下各节:
事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所做的所有更改都会被撤消。例如,将资金从支票帐户转到储蓄帐户中是一项事务,按步骤如下进行:
检查支票帐户是否有足够的资金来支付此转帐操作。
如果支票帐户中有足够的资金,则将该笔资金记入此帐户的借方。
将这些资金记入储蓄帐户的贷方。
将此次转帐记录到支票帐户日志中。
将此次转帐记录到储蓄帐户日志中。
如果这些步骤的任何一个步骤失败,则必须撤消在前面的步骤中所做的所有更改,而且支票帐户和储蓄帐户的状态必须与它们在事务开始之前的状态相同。该事件称为回滚。如果所有步骤均成功完成,那么事务即处于已提交状态。事务以提交或回滚结束。
J2EE 技术中的事务处理包括以下五个参与者:
通过实现各自的 API 和功能,每个实体均有助于提高事务处理的可靠性,如下所述:
事务管理器提供了支持事务划分、事务资源管理、同步和事务上下文传播所需的服务和管理功能。
Application Server 提供了支持应用程序运行时环境(包含事务状态管理)所需的基础结构。
应用程序可以使用资源管理器(通过资源适配器)访问资源。资源管理器通过实现事务管理器用来就事务关联、事务完成及恢复工作进行通信的事务资源接口来参与分布式事务。例如,关系型数据库服务器就是这样的资源管理器。
资源适配器是一个系统级的软件库,应用服务器或客户机可使用它连接到资源管理器。资源适配器通常专用于资源管理器。它以库的形式存在,并在使用它的客户机地址空间中使用。例如,JDBC 驱动程序就是这样的资源适配器。
为在应用服务器环境中运行而开发的事务用户应用程序可以使用 JNDI 查找事务数据源及事务管理器(可选)。应用程序可使用 Enterprise Bean 的声明事务属性设置或明确的程序事务划分。
由于服务器崩溃或资源管理器崩溃,事务可能未完成。完成这些被搁置的事务并将其从故障中恢复至关重要。Application Server 旨在在服务器启动时从故障中恢复并完成这些事务。
执行恢复操作时,如果无法访问某些资源,则服务器重新启动操作可能被延迟,因为服务器正在尝试恢复事务。
如果事务跨服务器进行,启动该事务的服务器会联系其他服务器以获得事务的结果。如果无法访问其他服务器,则该事务将使用“试探性决定”字段来确定结果。
您可以使用管理控制台配置 Application Server 以恢复事务。有关执行此操作的详细过程,请参见管理控制台联机帮助。
默认情况下,服务器不会使事务超时。即,服务器无限期地等待事务完成。如果为事务设置了超时值,而事务在配置的时间内未完成,则 Application Server 将回滚此事务。有关执行此操作的详细步骤,请参见管理控制台联机帮助。
为了保持被调用资源的数据完整性,同时为了能够从故障中恢复,事务日志将记录有关每个事务的信息。事务日志保存在“事务日志位置”字段指定的目录的 tx 子目录中。用户无法读取这些日志。
密钥点操作将压缩事务日志文件。密钥点间隔是日志中密钥点操作之间的事务数量。密钥点操作可以减小事务日志文件的大小。密钥点间隔数越大(例如,2048),事务日志文件也越大,但密钥点操作较少,性能可能更佳。密钥点间隔越小(例如,256),日志文件也越小,而同时由于密钥点操作较为频繁,性能会略微降低。