background image

Java 编程:JCA 1.5:工作管理和事务流入

JCA 1.5 

 

是 J2EE 连接器体系结构的最新版本,它包含许多重要的改进和一些重要增强。本

 

文介绍的是 JCA 新的工作管理合约。该合约允许资源适配器为延迟执行或定期执行的工
作创建计时器,并允许计时器使用应用服务器的线程同步或异步执行处理。本文将描述事
务流入支持如何在资源适配器导入到服务器的事务中进行这种处理,以及资源适配器随
后如何控制事务的完成。

 

  如果想在现有资源适配器中使用这项功能,或者正在考虑编写新的 JCA 1.5 资源适
配器,那么本文是一份必不可少的读物。如果要编写使用资源适配器的应用程序,想了解
更多幕后的情况,那么本文也会吸引您。

  让工作完成

 

  在本系列的第 1 

 

部分中,我们介绍了 ResourceAdapter 接口,它提供了一种机制,能

 

够在应用服务器内部为资源适配器提供生命周期。您可能还记得 start 方法被用来传递一

 

个叫做 BootstrapContext 

 

的对象。上次我们介绍了这个对象,但是 BootstrapContext 接口的

 

三个方法才是工作管理和事务流入合约的关键,如清单 1 所示:

 

  清单 1. 

 

用来得到三个工具对象的 BootstrapContext 接口

1 public interface BootstrapContext {
2     WorkManager getWorkManager();
3     XATerminator getXATerminator();
4     Timer createTimer() throws UnavailableException;
5 }

  WorkManager 允许资源适配器对工作进行调度,在应用服务器线程上同步或异步执
行调度。这个工作可以在资源导入的事务中执行,在这种情况下,XATerminator 有助于完
成工作。Timer 负责延迟工作或定期工作的执行。本文将更深入地研究这三个类,并说明如
何使用它们。

  WorkManager 接口提供了三套处理工作的方法(doWork  

、startWork   

和 scheduleWork),

 

如清单 2 所示:

 

  清单 2. 用来提交工作项目的 WorkManager 接口
1 public interface WorkManager {
2     
3     void doWork(Work work) throws WorkException;
4     void doWork(Work work, long startTimeout, ExecutionContext execContext,