2.5. 隐性的事务传递和 Interposition
你可以在一个域里创建事务并在另外一个域里使用它。因此,事务的信息,称为事务上下文,需要在这些域间进行传递。
传递事务上下文
- 显性传递
- 应用程序把上下文对象作为显性参数传递。这些对象是
Control接口或者PropagationContext结构的实例,且由 Transaction 服务定义。使用PropagationContext结构比Control接口效率更高。 - 隐性传递
- 对对象的请求隐性地和客户的事务相关联,并共享客户的事务上下文。上下文隐性地传递给对象,而无需用户直接的干预。
支持 Control 接口的 OTS 对象是标准的 CORBA 对象。当这个接口作为操作调用里的参数传递到远程服务器时,只传递对象引用。远程对象在接口上执行的任何操作都将在实际的对象上执行。
考虑到远程调用产生的负载,对于频繁使用这些接口的应用程序,这种行为可以强加坚实的惩罚。要避免出现这种负载,JBoss Transaction 服务支持 interposition。在 interposition 里,服务器创建一个本地对象,它充当远程事务的代理,处理通常将传递回请求者的所有请求。这个本地对象向原始事务协调者注册,所以它可以正确地参与事务的终止。如里 图 2.1 “Interposition” 所展示的,Interposed 协调者和其父协调者有效地组成了一个树型结构。
图 2.1. Interposition
注意
隐性的事务传递并不意味着服务器里也使用 Interposition。相反,Interposition 通常要求隐性的传递。
如果你要求隐性上下文传递和 Interposition,请确保 JBoss Transaction 服务在创建任何对象之前正确地进行了初始化。客户端和服务器需要同意是否使用隐性传递或 Interposition,或者是都不使用。隐性上下文传递只可能位于这些支持过滤器和拦截器或
CosTSPortability 接口的 ORB 上。JacORB 和 JDK miniORB 都支持所要求的支持。
启用传递
- 隐性的上下文传递
- 设置 com.arjuna.ats.jts.contextPropMode 属性变量为
CONTEXT。 - Interposition
- 设置 com.arjuna.ats.jts.contextPropMode 属性变量为
INTERPOSITION。
注意
要使用 JBoss Transaction 服务的高级 API,你必须使用 interposition。