应用服务器公共服务松耦合接入方法

文档序号:6609721阅读:131来源:国知局

专利名称::应用服务器公共服务松耦合接入方法
技术领域
:本发明属于软件
技术领域
,是一种针对应用服务器中公共服务集成的松耦合方法。
背景技术
:如今各大公司、机构如今都在搭建各自的企业级信息平台,这些平台通过开发新的功能模块,或整合原有独立开发的应用系统,以提供统一完整的框架。J2EE(Java2platformEnterpriseEdition,见SUNMicrosystems,Java2PlatformEnterpriseEditionSpecification,Version1.3,2001)技术正是在这种情况下应运而生,它通过定义一系列开发分布式企业级应用的规范(如图l所示),简化企业级应用的开发、部署和管理等复杂问题,EJB(EnterpriseJavaBeans)作为其中的构件规范,开发人员按照此规范开发实现业务逻辑的EJB构件,然后利用这些应用构件,像搭积木一样建立分布式企业级应用系统。J2EE应用服务器遵循J2EE规范,介于操作系统与企业级应用之间,将分布式企业级应用中存在的共性如事务,如事务、安全、通信等特性剥离出来,形成公共服务,为应用构件提供开发和运行环境。一般来说,J2EE应用服务器包含两类系统构件一类是公共服务,向应用构件提供非功能属性,如安全、事务等;另一类是构件容器,包括EJB容器和Web容器,提供应用构件的运行环境和所需的公共服务,例如构件的生命周期管理、分布事务的支持,数据库连接的管理等,使应用构件(如EJB构件)可以更加高效地运行在应用服务器中。随着J2EE规范的不断扩充,J2EE应用服务器的复杂度和规模也不断增长,因此除了一些专业厂商外,对大多数应用服务器开发商而言,很难建立一个全面的应用服务器体系,也就说任何应用服务器开发商都无法实现J2EE规范中要求的所有公共服务或容器。为了应对日渐庞大的应用服务器规模,目前大多数应用服务器开发商一方面选择自己实现EJB容器和某些公共服务,另一方面希望能够集成第三方提供的公共服务和Web容器。与此同时,一些开源社区也开始提供可靠的公共服务实现,这就使在应用服务器中集成公共服务成为一种主流趋势。目前大多数公共服务集成都采用一种紧耦合的方式,EJB容器直接在代码中写入对某个公共服务实现的调用,这就使应用服务器中容器和公共服务的演化相互依赖,譬如当公共服务实现提供给容器的调用方法改变后,容器中的调用代码也需要相应地进行修改,由此带来了很高的维护代价;另一方面也不能使应用服务器用户根据企业应用的需求,动态地配置或定制公共服务的实现,譬如对于事务服务,有的应用服务器用户希望其具有较快的事务处理速度而无需过多的事务处理附加功能,有的用户则恰好相反,同时由于EJB容器已经在代码中硬性地绑定了某一确定的公共服务实现,而用户不可能直接修改应用服务器中的EJB容器代码,因此这就使得应用服务器无法根据用户的不同需求集成不同的事务服务实现。由此不难看出,如何以一种松耦合的方式集成公共服务,即不在应用服务器的代码中硬性地绑定某一个公共服务实现,已成为应用服务器方面一个亟待解决的问题。
发明内容本发明的目的是提供一种应用服务器中公共服务的松耦合接入方法,指导应用服务器开发者建立一个灵活的、可扩展的服务集成框架,框架中通过引入适配器模式和反射机制,将具体的公共服务实现同EJB容器分离,从而使应用服务器中系统构件(公共服务和容器)的升级和替换相互独立,最终为应用服务器建立一个可插拔体系结构。本发明的应用服务器公共服务松耦合接入方法,其步骤包括-1.根据应用服务器设定该服务器构件容器所需实现的公共服务功能;2.将上述公共服务所需提供的每一功能用一方法表示;3.将上述方法封装在一接口中,此接口作为不同连接适配器面向应用服务器的统一接口;4.如一公共服务实现能够提供上述构件容器所需实现的公共服务功能,则选定能够提供上述相应功能的一个或多个方法;如该公共服务实现无法提供上述构件容器所需实现的功能,则编制能够实现该功能的方法;5.将上述方法进行封装或组合,'为该公共服务实现实现包含4)所述统一接口的公共服务实现的连接适配器;6.应用服务器的构件容器通过公共服务实现的连接适配器调用该公共服务实现,接入该公共服务。如一公共服务实现能够提供上述构件容器所需实现的公共服务功能,该公共服务实现的连接适配器为一个配置文件,配置文件将统一接口中的接口或方法名对应于该公共服务实现中对应的接口或方法名。如一公共服务实现无法提供上述构件容器所需实现的功能,则该公共服务实现的连接适配器为一实现类,实现类中的每一方法对应于构件容器所需实现的一功能,该实现类保留该公共服务实现的实例。在应用服务器中创建公共服务信息文件,该文件指定待调用的公共服务实现。应用服务器的构件容器通过公共服务工厂类在运行时刻读取公共服务信息文件,利用反射机制通过连接适配器调用相应的公共服务实现。对于能够提供上述构件容器所需实现的公共服务功能的公共服务实现,所述公共服务信息文件为连接适配器的配置文件。对于不能够提供上述构件容器所需实现的公共服务功能的公共服务实现,所述公共服务信息文件写入指定的连接适配器实现类类名。本发明方法总体包括三个方面(1)定义EJB容器同公共服务之间的合约。(2)分析合约和同一公共服务不同实现的API之间的匹配程度。(3)利用适配器模式和反射机制将公共服务松耦合地集成到应用服务器中。一、定义EJB容器同公共服务之间的合约合约是指EJB容器需要公共服务提供的一个或多个方法或接口(方法在其它编程语言中也可以称为函数,接口是计算机面向对象中的经典概念,这里可以理解为方法的聚合),这些接口和方法表示了构件容器要求公共服务对外提供的功能,这样当容器需要公共服务的某些功能的时候,在容器代码中可以直接调用这些方法和接口,实现对公共服务的调用。因此一个准确定义的合约是应用服务器中公共服务集成的重要基础。而目前J2EE规范中有关EJB容器同公共服务之间关系的定义相当模糊,也就是说通常情况下对公共服务对外提供的功能接口,即服务提供商接口(SPI)没有明确的定义或者分散在多个规范中。因此为了定义出EJB容器同公共服务之间清晰的合约,本步由以下两阶段构成第一阶段收集需求。在收集需求阶段,应用服务器开发者需要对服务相关的规范和主流应用服务器关于该项服务的实现情况进行调研。确定构件容器,如EJB容器必须实现的公共服务的服务功能和扩展功能,这些功能通过容器调用公共服务实现获得。第二阶段定义合约。在定义合约阶段,应用服务器开发者应首先对现存的有关该项服务的J2EE规范进行分类,然后根据需求选择J2EE规范中相关的服务提供商接口(SPI)。对规范中无法满足的需求,定义特定的方法或接口。二、分析合约和同一公共服务不同实现的API之间的匹配程度类似于生活中多个不同的生产厂商提供同一商品,对于某一公共服务可能有多个不同的服务提供商,提供不同的公共服务实现。通常情况下,大多数公共服务实现都会提供一个描述其功能的应用编程接口(ApplicationProgrammingInterface,简称API),外界通过这个接口调用公共服务提供的功能。由于同一公共服务不同实现所提供的API各不相同,目前EJB容器为了调用某个公共服务实现,通常选择在代码中直接写入调用代码,这样带来了一个很大弊端就是,当该公共服务实现的调用接口变化或者当应用服务器希望更换某一公共服务实现时,EJB容器部分的调用代码也需要相应的更改,这便给应用服务器带来了很大的维护代价。因此应用服务器需要以一种统一的方式集成同一公共服务的不同实现,也就是说,对于EJB容器而言,它不再将某个具体公共服务实现硬编码在代码中,而是对所有公共服务实现都能以一种统一的方式进行调用,比如将不同公共服务实现中的不同方法名或接口名转化为同一方法或接口名,具体方式将在第三步中详细介绍。而第一步中定义的EJB容器同公共服务之间的合约,事实上就是在不考虑具体公共服务实现的前提下,EJB容器希望公共服务提供的API,或者说对该项公共服务的功能要求。对于合约中的某一方法或接口,不同的公共服务实现会有不同的应用编程接口(API),例如,合约中定义了方法a,表示功能A,公共服务实现一中完成方法A功能的方法叫b,公共服务实现二中有可能叫c,也有可能公共服务实现三中没有表示功能A的方法。为此应用服务器开发者就需要分析第一步中定义的合约和不同公共服务实现API间的匹配程度,以便在第三步中选择合适的公共服务集成框架。本发明涉及两个级别的匹配程度完全匹配,合约中定义的接口和方法,公共服务实现的API都有相应方法或接口对应,只是接口、方法名称不一致。部分匹配,合约中定义的方法在公共服务实现中没有对应,EJB容器在调用服务实现提供的API之前或之后需要进行额外处理,为该API编制与合约中定义的该方法相对应的方法,依据所接入公共服务的不同所需的额外处理也可能不同,譬如变量类型的转换,或者该方法需要调用公共服务实现API中一系列方法实现,譬如完成合约中方法A功能,需要首先调用公共服务实现API中的方法rm,然后调用方法m2.最后调用方法m3;再或者公共服务实现API中没有对该方法的支持,则需要编写相应的方法。对于部分匹配情况,应用服务器开发者需要将合约中分散的方法归并到接口中(这句话的含义请解释一下?),合约最终只含有统一接口定义。另外,在匹配程度检验过程中,当应用服务器开发者发现合约定义不够合理时,可以对合约进行修改后,再重新进行匹配程度检査,重复此过程,直至完成合约定制和匹配程度检验(。三、利用连接适配器模式和反射机制将公共服务松耦合地集成到应用服务连接适配器模式(AdapterPattern)是面向对象中一个经典的设计模式,核心思想类似于生活中的变压器,把一种电压变换成另一种电压,而连接适配器模式可以将一个接口转化成客户所期望的接口,以消除接口不匹配带来的问题。连接适配器模式由客户端(Client)、目标接口(target)、适配器(adapter)和被适配方(adaptee)四部分组成(如图2所示)。Java的反射机制允许运行中的Java程序对自身进行检查,用来获得编译时所不知道的属性和功能,从而使程序更加灵活。下面的程序段说明了Java程序如何获得已装载类的属性、方法和构造函数,并调用方法或设置属性值。〃获得类实例Classclass=Class.forName("ClassName");〃通过Java反射机制获得类中声明的方法Methodmethod=class.getMethod("MethodName,',newClass[]{});〃实例化该类Objectobject=cl.newInstance();〃通过反射机制调用实例object上的方法methodmethod.invoke(object,newObject[]{});从前面的介绍中已知,虽然同一公共服务的不同实现所提供的API各不相同,但EJB容器希望以统一的方式——合约中定义的统一接口方式,访问不同公共服务实现,从而使构件容器和公共服务实现的演化相互独立。为此,本发明引入连接适配器模式,将不同实现提供的各不相同的API转化成构件容器希望的形式,也即合约中所定义的统一接口形式。构件容器、合约和服务实现API分别对应于连接适配器模式中的客户端、目标接口和被适配方。连接适配器的形式根据第二步中的匹配程度决定对于完全匹配,由于只需要声明合约同公共服务实现API之间的映射关系,比如合约中的某一接口A对应于公共服务实现API中的接口B,因此适配器实现为一个配置文件(如附图3所示),简称文件适配器,文件的每行分别描述一个对应关系,具体形式为合约中的接口或方法名=某一公共服务实现中对应的接口或方法名;对于部分匹配,由于不存在这种直接的对应关系,比如在调用公共服务实现提供的某个方法之前,EJB容器需要进行一些额外的处理,那么就需要另外编写一个方法,首先完成额外处理,使得公共服务实现具有与合约对应的方法,再调用公共服务实现提供的方法。因此适配器实现为一个Java类(如附图4所示),简称类适配器,类中的每个方法对应于合约中定义的一个功能,具体每个方法中完成对公共服务实现不匹配的适配。适配器类保留一个公共服务实现的实例,以便调用公共服务实现提供的功能。对于同一公共服务的不同实现,应用服务器开发者需要分别为其实现合约中定义的不同接口。另外,考虑到服务集成的灵活性,本发明引入反射机制(如附图5所示)。在应用服务器中创建公共服务信息文件用于描述具体装载哪个具体的公共服务实现。在文件适配器中,配置文件中包含的信息足以满足服务装载所需的信息,因此公共服务信息文件等同于配置文件。而在类适配器中,需要一个额外的文件声明,文件中直接写入与所选服务实现相应的适配器类类名。EJB容器通过公共服务工厂类在运行时刻读取公共服务信息文件,利用反射机制加载相应的公共服务实现。这样做的好处就是不再将具体的公共服务实现硬编码在EJB容器中,而是写在公共服务信息文件中,因此当应用服务器需要更换公共服务实现,或者公共服务实现提供的功能接口发生变化的时候,只需要变更相应的公共服务信息文件,不再需要更改EJB容器中的代码,因为这对于应用服务器开发者而言将会带来很高的维护代价,对于应用服务器使用者而言更改应用服务器内部代码更是不现实的。至此,本发明完成了该公共服务松耦合集成框架的建立。由于应用服务器中EJB容器对公共服务的调用通过合约完成,完全不依赖于服务实现,这样就使得EJB容器和公共服务实现的演化相互独立,而当需要更改公共服务实现的时候,只需要简单地修改公共服务信息文件。公共服务的接入流程如下应用服务器启动时,首先从公共服务信息文件中读取需要加载的具体公共服务实现名称,利用Java反射机制加载具体公共服务实现的实现类。当EJB容器需要公共服务功能时,它使用合约中定义的方法或接口,对公共服务进行调用,本发明中的连接适配器进一步将以合约规定的统一调用形式,转化为具体公共服务实现对应的形式,实现对某一具体公共服务的真正调用,完成EJB容器要求的功能。图1为J2EE体系结构图。图2为适配器模式图。图3为文件形式的适配器模式。图4为类形式的适配器模式。图5为本方法反射机制结构。图6为事务服务集成框架。具体实施例方式本节给出一个事务服务的集成实现。事务是指多个分布构件对共享数据的一个单元性操作,保证共享数据的原子性、一致性、隔离性和持久性。Java事务服务(JTS,一种公共服务)和Java事务应用编程接口(JTA,一种API)是JavaEE5中两个基本的规范,其中规定了事务公共服务实现需要提供接口的最小集合。JTS指定了Java事务模型核心构件——Java事务管理器(公共服务中定义的功能性模块)的实现,它提供需要的服务和管理功能,以支持事务的划分,事务资源的管理,同步和事务上下文的传递,是每个事务公共服务都必须实现的一部分。JTA规定了事务管理器和其它分布事务参与构件间的高层接口。通常情况下,应用服务器都绑定一个事务管理器,企业级应用开发者只能配置一些简单的事务参数,例如事务超时时间。而这无法满足事务用户的需求,通常他们希望可以根据不同的应用场景选择不同的事务实现,譬如有时事务管理器的处理速度是首要因素,而非强大的功能,而有时则恰好相反。为此使用本发明,为事务服务建造一个松耦合的公共服务集成框架,依照本发明,具体实现步骤如下1.定义EJB容器同事务服务之间合约。通过分析JavaEE5和JTS规范,和调研目前通用服务器上事务服务的实现,应用服务器中所需的事务服务功能需求主要有以下三点(l)控制事务边界划分。(2)关联全局事务和事务资源所完成的任务。(3)支持事务同步。进一步分析确定EJB容器同事务服务之间的合约中的方法包括(l)事务管理器(TransactionManager)的实现。(2)事务类(Transaction)的实现。(3)事务类中获取事务主键(Xid)的方法。(4)事务管理器中通过事务主键获取事务类的方法。2.分析合约和事务服务不同实现的API之间的匹配程度。由于合约中的(1)、(2)两部分来自于JTA规范中定义的标准接口,所以任何事务服务实现都会给出响应的实现支持。而对于合约中的(3)、(4)两部分,经过调研可知,目前几乎所有的事务服务实现也都提供支持,因此匹配程度为完全匹配。3.利用适配器模式和反射机制将事务服务松耦合地集成到应用服务器中。鉴于第二步,合约和事务服务不同实现API之间的匹配程度为完全匹配,因此采用文件适配器,实现框架如图6所示,EJB容器调用事务服务工厂(该事务服务工厂是完成事务服务创建功能的模块,实现为一个类TxFactory)中的静态方法,该静态方法直接读取配置文件中记载的事务服务实现信息。配置文件中标明事务服务实现体的信息,下面为ObjectWebJOTM这个事务实现所对应的配置文件<image>imageseeoriginaldocumentpage10</image>当用户要替换事务服务实现体时,只需将等号右边的内容换成相应事务实现的API即可。在TxFactory中,通过下述方式使用Java中的反射机制,加载具体的事务服务实现。<table>tableseeoriginaldocumentpage11</column></row><table>权利要求1.一种应用服务器公共服务松耦合接入方法,其步骤包括1)根据应用服务器设定该服务器构件容器所需实现的公共服务功能;2)将上述公共服务所需提供的每一功能用一方法表示;3)将上述方法封装在一接口中,此接口作为不同连接适配器面向应用服务器的统一接口;4)如一公共服务实现能够提供上述构件容器所需实现的公共服务功能,则选定能够提供上述相应功能的一个或多个方法;如该公共服务实现无法提供上述构件容器所需实现的功能,则编制能够实现该功能的方法;5)将上述方法进行封装或组合,为该公共服务实现实现包含4)所述统一接口的公共服务实现的连接适配器;6)应用服务器的构件容器通过公共服务实现的连接适配器调用该公共服务实现,接入该公共服务。2.如权利要求1所述的应用服务器公共服务松耦合接入方法,其特征在于如一公共服务实现能够提供上述构件容器所需实现的公共服务功能,该公共服务实现的连接适配器为一个配置文件,配置文件将统一接口中的接口或方法名对应于该公共服务实现中对应的接口或方法名。3.如权利要求1所述的应用服务器公共服务松耦合接入方法,其特征在于如一公共服务实现无法提供上述构件容器所需实现的功能,则该公共服务实现的连接适配器为一实现类,实现类中的每一方法对应于构件容器所需实现的一功能,该实现类保留该公共服务实现的实例。4.如权利要求1所述的应用服务器公共服务松耦合接入方法,其特征在于在应用服务器中创建公共服务信息文件,该文件指定待调用的公共服务实现。5.如权利要求4所述的应用服务器公共服务松耦合接入方法,其特征在于应用服务器的构件容器通过公共服务工厂类在运行时刻读取公共服务信息文件,利用反射机制通过连接适配器调用相应的公共服务实现。6.如权利要求4所述的应用服务器公共服务松耦合接入方法,其特征在于对于能够提供上述构件容器所需实现的公共服务功能的公共服务实现,所述公共服务信息文件为连接适配器的配置文件。7.如权利要求4所述的应用服务器公共服务松耦合接入方法,其特征在于对于不能够提供上述构件容器所需实现的公共服务功能的公共服务实现,所述公共服务信息文件写入指定的连接适配器实现类类名。全文摘要本发明涉及一种应用服务器公共服务松耦合接入方法,定义EJB容器同公共服务之间的合约,分析合约和同一公共服务不同实现的API之间的匹配程度,利用适配器模式和反射机制将公共服务松耦合地集成到应用服务器中。本发明可为应用服务器开发者建立一个灵活的、可扩展的服务集成框架,框架中通过引入适配器模式和反射机制,将具体的公共服务实现同EJB容器分离,从而使应用服务器中系统构件的升级和替换相互独立,最终为应用服务器建立一个可插拔体系结构。文档编号G06F9/44GK101126979SQ20071011067公开日2008年2月20日申请日期2007年6月8日优先权日2007年6月8日发明者周明辉,曹东刚,研李,宏梅申请人:北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1