首页 理论教育EJB事务编程及处理架构分析

EJB事务编程及处理架构分析

【摘要】:EJB的事务编程及事务处理架构的分析武汉东湖学院计算机科学学院罗旋对于EJB在商业应用中经常用到的事务处理,J2EE应用服务器提供了很好的支持。本文主要分析了EJB的事务编程方法和应用服务器的事务处理架构。EJB技术的主要目标是为分布式的业务系统提供标准的组件体系结构。EJB的编写者有两种事务边界划分方法可供选择。

EJB的事务编程及事务处理架构的分析

武汉东湖学院计算机科学学院 罗 旋

对于EJB在商业应用中经常用到的事务处理,J2EE应用服务器提供了很好的支持。本文主要分析了EJB的事务编程方法和应用服务器的事务处理架构。

一、引言

提高软件系统的重用性和提高软件系统对应用需求变化的适应性,这一直是软件业关注的两大热点问题,而基于组件技术的出现,为解决这两个问题铺平了道路。CORBA,J2EE和.net这三种都是基于对象级的远程过程调用技术的。J2EE是在CORBA的基础上提出的针对企业级计算的分布式平台,它结合了Java的跨平台及对互联网良好支持的特性,并且定义了良好的架构。

Enerprise Java Bean(EJB)是J2EE平台中适用于企业计算的组件,组件的提供者只要是按照J2EE规范定义的EJB标准编写的EJB,就可以运行在任何遵行J2EE标准的应用服务器(或者容器)中。EJB技术的主要目标是为分布式的业务系统提供标准的组件体系结构。

二、EJB的事务编程

尽管分布式事务处理是一个非常复杂的问题,但是由于J2EE应用服务器为我们提供了很好的“基础设施”,很多后台的处理都交给应用服务器完成,这样就可以将组件的编写人员从复杂的事务处理中解脱出来,从而专注于商业逻辑的编写。EJB的编写者有两种事务边界划分方法可供选择。

(一)编程型事务划分

现有大多数系统都还是用编程型来划分事务边界。当使用这种方法的时候,你必须将事务的逻辑操作编入应用程序代码中,即应用程序自己负责一个事务的开始的声明和一个提交或者异常结束的声明。

组件首先应该通过命名服务(JNDI)实现对事务服务的透明访问。

例如下面的代码就是一个使用编程型的事务的示例:

try{

img52

(二)声明型事务划分

声明型事务是首先由微软公司在微软交易服务(MTS)中提出的组件的事务策略定义方法。通过这种方式,组件的编写人员可以不用编写对事务的控制代码,而是让部署人员在部署阶段根据具体的应用情况,设置某些方法的事务策略属性。如果在部署阶段选择容器管理的事务,则每种方法有六种策略可供选择。

表2-1总结了在不同事务属性的情况下对事务上下文产生的影响。

表2-1 声明型事务划分表

img53

三、J2EE应用服务器分布式事务处理架构(www.chuimin.cn)

从上面我们看到,应用服务器为组件的事务处理提供了很多的功能,可以很大地提高开发效率,但同时也给开发人员带来了更大的迷惑。如果我们不对应用服务器分布式事务处理的架构进行分析,我们很难理解和利用好这些功能。

要分析应用服务器分布式事务处理的实现,我们必须熟悉整个应用服务器内部的组织架构。为了在企业计算中各种服务能达到最大限度的开放性和兼容性,美国升阳电脑公司(Sun Microsystem )定义了J2EE的开放规范,任何公司和组织都可以根据这套规范开发自己的应用服务器,而且可以保证和其他服务器甚至各种服务的兼容。

准切的说,应用服务器是集成各种服务包容器(包括EJB、jsp/serlet包容器)和各种服务的系统。这里所说的各种服务包括有事务服务、安全服务、资源连接服务、命名服务等。这些服务可以由各种中间件厂商提供,理论上只要它们遵循J2EE的规范,就可以和其他的服务器进行集成了。一般应用服务器的整体结构如图3-1所示。

img54

图3-1 应用服务器的整体结构图

从上图我们就能理解编程型事务划分和声明型事务划分中事务处理的工作机理了。当服务器启动后,会将实现javax.transaction.UserTransaction接口的对象绑定到JNDI (Java Name and Directory Interface) 服务器上去,该对象直接和服务器的事务管理器交互。客户端需要与事务管理器交互时,只用通过JNDI查找到该对象就可以了,如编程型事务划分中:

UserTransaction userTx = (UserTransaction) ctx.lookup(“javax.transaction.UserTransaction”);

声明型事务的工作原理是,当服务器端响应客户端请求,调用EJB实例方法的时候,取得当前方法的事务属性,然后根据表2-1,决策如何与事务管理器交互。

应用服务器还要完成的一个重要的功能就是进行事务上下文的传播。客户端创建了事务上下文后,当其请求服务器端的调用时,客户端的事务上下文会自动传入到服务器端,而不论服务器端是本地还是远程的。如图3-2所示。

img55

图3-2 应用服务器的整体结构图

应用服务器分布式事务处理的核心功能是由事务管理器提供的,事务管理器是实现分布式事务管理的关键,特别是对于大型的、广域的分布式系统,事务管理器一般还要提供事务级的安全验证、失败恢复、容错处理和负载均衡等功能。

四、小结

在某些应用中,J2EE规范中定义的事务处理也有一些缺陷,如不支持嵌套事务、长串事务等其他事务模型,接口方法的事务属性对客户端和EJB开发者的不确定性。按照上述声明型的事务策略,组件方法的事务属性在部署其定义,这样的好处是增加了组件的灵活性,但是给客户端和EJB开发者带来的弊端是方法事务属性的不确定性。

参考文献

[1] 朱俊成等.《EJB 3.0从入门到精通》[M].北京:电子工业出版社,2009.

[2] 吴克河,张雅,何霞.基于J2EE的分布式事务技术的研究[J].中国电力教育.2008(S3).

[3] 韩学洲.分布式事务处理模型研究[J].南通纺织职业技术学院学报.2006(3).