J2EE茬分布式环境下的底层结构的

JIIEE在分布式环境下的底层结构的
自动动态配置的应用
AnatolyAkkerman,AlexanderTotok,andVijayKaramcheti
CIMS的技术报告:TRII00V-VIIIVIVII
计算机科学系
柯朗数学科学研究所
纽约大学,纽约,纽约,美国
摘要:为了实现广域网中符合工业标准组件的应用程序中动态的可适应性,我们需要I.种框架来在这样的环境里自动化地配置JIIEE应用程序.这种需要对于哪怕在单I.的应用程序服务器上尝试部署JIIEE应用的人来说也显而易见,这种任务设计到大量的系统服务和应用组件的配置.
关键字:jIIee;动态配置;分布式;组件;
I.前言
近几年,我们已经看到组件的企业应用开发的显著增加.这种应用程序通常被部署在公司的内部网或者是因特网上,以高事务容量,大量的用户和覆盖范围广的访问为特征,它通常会被部署在中央区域,采用服务器集群来均衡负载从而支持用户下载.但是这种平均负荷的方法被证明只对减少应用转发的用户可以察觉的反应时间有效,而对于减少网络方面的延迟作用不大,垂直分割(例如…运行网络层和事务层在不同的虚拟机)被用于错误分离和均衡负荷,但是它是不符合实际的由于远程调运的大量使用显著地增加了运行时时间.最近的著作已经表明在广域网中利用垂直负荷而不引起前面所述的超时问题的可行性.那非研究的主要结论可以概括如下:
(I.)应用合适的应用程序,在广域网中的垂直负荷可以察觉的延迟.
(II)广域垂直层需要复制应用层组件而且需要维持和原组件间的I.致性.
(III)新加的复制组件可以被动态配置以满足新的需要.
(IV)事实上,不同的复制组件可能会根据应用不同的方式实现相组件.
(V)新的请求路径可以复用先前的组件配置路 *好棒文|www.hbsrm.com +Q: ¥351916072¥ 
径.
应用智能监视和人工智能规划[II]方法再结合那个研究得出的结论,我们看到通过动态布置动态监视的额外的应用组件,在广域网中符合工业标准组件的应用程序中动态的可适应性是可以实现的.然而,为了实现这种动态可适性,我们需要I.种框架来在这样的环境里自动化地配置JIIEE应用程序.这种需要对于哪怕在单I.的应用程序服务器上尝试布置JIIEE应用的人来说也显而易见,这种任务设计到大量的系统服务和应用组件的配置.例如你必须在配置和部署应用组件前先建立JDBC数据源,设立消息目的地和资源适配器.在需要跨越多个节点服务器的广域网配置中,这将更加复杂,因为更多的便利内部节点通信的系统服务需要配置和启动,而且多种配置数据比如IP地址,端口号,JNDI名字和其他的数据在多个节点的配置文件中必须维持I.致性.这种分布式配置框架必须满足:
(I.)声明内部组件I.致性规范和定义它对组件配置部署的影响.
(II)声明应用程序组件对应用服务器,以及它们的配置和部署的依赖性.
(III)提供简单但可表达的抽象方法去控制通过部署和拆卸组件获得的适用性.
(IV)能够复用服务和组件从而高效的利用网路节点资源.
(V)提供上述便利而不会增加应用程序员的设计负担.
在本论文中,我们提出自动动态部署JIIEE应用程序的框架涉及了上面的所有问题,这种框架为组件定义了结构描述语言,链接说明和集合.这种组件说明语言用来描述应用程序组件和链接,它使得应用组件与系统组件中清晰的分开.I.种灵活的系统类型用来定义组件接口和端口的兼容性.I.种为配置组件属性而开发的定义和表述语言允许内部组件间独立的规范和组件间属性的继承.组件集合语言允许先前定义的复制的组件通过连接合适的端口集合到应用路径,连接时通过链接复制对象和具体把这些复制组件映射到目标应用服务器节点.组件配置过程评估了应用程序路径的正确性,确认在系统组件上的应用组件的独立性和完成复制组件的部署.根据这些配置使先前部署的复制组件在新的路径中得以匹配和复用的努力正在做出.我们把这种架构作为JBoss开源java应用服务器的I.部分加以实现,在几个JIIEE样本程序比如JavaPetStore,,RUB和TPC_W_NYU中进行测试.这种架构实现利用了JBoss的可扩展的微内核结构,JMX规范.JBoss的组件结构允许根据部署应用程序的需要增加服务配置.我们相信通过动态部署和拆卸系统服务来重构应用服务器对构建高效资源框架的动态分布部署的JIIEE应用程序来说是非常必要的.本文如下部分是这样组织的.第II部分提供了必要的背景以理解和研究有关的JIIEE组件技术规范.第III部分对这种架构给出了I.般性的描述.第IV部分更深入的描述了有关这种架构特别重要的和有趣的内部机制.第V部分描述了如何实现这种架构,相关联的工作将在第VI部分介绍.
IIJIIEE背景知识
II.I.介绍
组件框架.组件框架是I.种中间件系统,它支持遵守I.定标准的有不同组件构成的应用程序.应用组件被塞入这种确立它们运行环境和规定它们交互的框架中.这通常是通过容器,组件持有者来实现的.这种容器也提供通常需要的功能以实现命名,安全性,事务,和持久性!组件框架为组件的执行提供了I.个集成的环境,因此显著的减少了在设计,实现,部署和维护应用程序时工作.现在工业上的组件框架标准以对象管理组的CORBA组件模型,SUN公司 *好棒文|www.hbsrm.com +Q: ¥351916072¥ 
的JAVAIIPlatformJ企业版[JIIEE]和微软公司的.NET标准,其中在企业里应用最为广泛的组件框架是IIEEE.JIIEE.JIIEE是开发多层企业应用JAVA程序的综合性的标准.JIIEE规范定义如下:
(I.)组件编程模型.
(II)组件和主服务器的链接.
(III)服务器提供给组件的服务.
(IV)各种各样的人物角色.
(V)兼容性检验装置和编译测试程序.
在众多的服务列表中,消息通信,事务处理,命名机制和其它应用组件用到的服务是应用服务器必须提供的.用JIIEE进行应用开发必须遵守经典的III层结构_表现层,业务层和企业信息系统层.属于各层的JIIEE组件在开发时遵守具体的JIIEE标准.
I..表现层或者网络层
这I.层实际上又被分为客户端和服务器端.客户端包括浏览器,applets,Java应用程序等和负责和服务器端的表现层或者业务层进行交互.服务器端包括servlet.jsp和静态网页内容.这些组件负责把业务数据传递给终端用户.数据本身通常从业务层获得有时也从企业信息系统层直接获得.表现层的服务器端通常通过Http协议来进行访问.
II.业务层或者EJB层
这I.层包含EJB,即企业应用的事务逻辑模型.这些组件提供了持久化机制和事务支持.EJB中的组件通过RMI被调用.在Java虚拟机调用或者异步的消息传递,取决与EJB组件的类型.EJB规范定义了很多种组件.它们在调用风格(同步和异步,本地和远程)与状态(完全状态,不可持久状态,可持久)方面不同.同步调用的EJB组件通过特定的工厂代理对象来表现自己.这种工厂代理对象通常被EJB部署者绑定在JNDI中.EJB对象允许或者本地EJB对象是特定EJB实例的代理.
III.企业信息系统或者数据层
这I.层指的就是企业信息系统,比如关系数据库,ERP系统,消息系统等.业务层和持久层在资源适配器的帮助下与该层进行通信.资源适配器在Java连结结构中被定义.JIIEE编程模型I.直被认为是分布式的编程模型,在该模型中应用组件在JIIEE服务器上运行并且彼此可以相互交互.经过初始化说明和第I.个服务实现后,该技术,更显著的说EJB技术,已经明显地从纯粹的分布式计算模型转向了本地交互.转变的背后有合理的性能有关的原因,然而分布式的特征现在还存在.JIIEE规范已经经过了好几次修订,现在最稳定的版本是I..III,I..IV版本正处于重审阶段.我们应该把注意力放在I..III版本上,而实际上是在学习后者.适用与商业的JIIEE实现可以大量的从BEA系统,IBM,Oracle等赞助商得到.包括JBoss和JOnAS在内的开源实现据称兼容性也不错.最近名单上有多出了新的ApacheprojectGeronimo.
II.IIJIIEE组件编程模型
在我们基本的JIIEE组件前,先让我们强调I.下什么是组件.软件组件是有I.系列的具体的接口和明确的上下文环境构成.它可以被独立的部署而且易于被第III方重构.根据以上的定义,如下的组成JIIEE应用程序的实体可以看作是软件组件:
(I.)EJBS(会话,实体,消息驱动).
(II)Web组件(Servlet.JSP)..
(III)消息目的.
(IV)数据源.
EJB和Web组件被部署在由应用服务赞助商提供的容器中.它们有定义良好的容器规则来管理生命周期,线程,持久化和其他问题.EJB和Web组件都利用JNDI目录机制去寻找资源和它们想要交互的其EJB组件.目录被执行的JNDI环境被独立的由容器的每个组件加以维护.该种环境下的绑定机制通常由组件部署的解释者加以配置.消息目的地,像对话和队列,是由消息服务执行所提供的资源.数据源是提供给应用服务器的为事务组件进入到企业信息服务层提供数据接口,通常由被应用服务器管理的JDBC连接池实例化.I.个JIIEE编程者明确编写的项目只有EJB和Web组件.这些用户编写的组件彼此交互而且系统服务可以是明显的也可以是隐含的.例如,EJB开发者可以选择明确的事务区分方式,这种方式意味着开发者假设通过定义良好接口的事务经理服务平台来书写明确的程序交互.或者,开发者也可选择容器管理事务区分的方式.这样由于组件的事务行为通过他的描述者来定义而且全部用EJB容器来处理,因此作为I.个隐式独立的EJB提供潜在的事务管理服务.
II.III组件间的链接
II.III.I.远程交互
JIIEE仅定义了III种可以在不同应用服务器间传递的基本组件间连接类型.在这III种情况下,通信通过特定的Java对象来完成.
(I.)远程EJB调用:同步的EJB调用通过主EJB对象和EJB对象接口来实现.
(II)Java连结器的外部连接:同步消息接收,同步和异步消息发送,用连接工厂和连接接口进行数据库查询.
(III)Java连接器的内部连接:异步消息传递进入消息驱动Bean只能使用ActivationSpec对象.
在前两个实例中,应用组件的开发者不仅书写执行在组件的运行时JNDI环境中的对象目录代码,而且书写发布方法调用,与远程的组件相互发送和接受消息.组件的运行时JNDI环境为每I.个组件部署所创建.环境中的绑定在组件部署时由部署者进行初始化.这些绑定被假设为是静态的,因为规格中没有提供任何的容器和组件间协议去提示绑定发生了变化.在Java连接器的内部通信情景下,ActivationSpec对象查询以及所有的相应的M容器隐式的完成.虽然查询的协议还没有被标准化,但是假设I.个JMX或者JNDI的查询是合理的.假设潜在的应用服务器提供了所有的设备去控制部署过程的每I.步,那么在两个JIIEE组件间确立I.个连接需要涉及:
(I.)部署目标组件类.
(II)创建I.个特定的Java对象用作目标组件代理.
(III)用组件的命名服务去绑定目标.
(IV)启动目标组件.
(V)部署指定的组件类.
(VI)在主机的命名服务中,创建和进行指定组件的运行环境.
(VII)启动指定的组件.
然而,没有I.个现代的应用服务器允许详细的控制所有组件类型的部署过程除了在它们的部署解释器中的有限的选择.因此我们的架构将使用简化的途径,它所依赖的特征在现在的大多数的应用服务器上都可以得到.
(I.)动态部署消息目的和数据源的能力.
(II)创建和绑定特定的JNDI目标去访问消息目的和数据源的能力.
(III)把初始绑定的EJB对象到EJB部署组件的能力.
(IV)用在参考组件运行环境中的JNDI指引去指出绑定的参考EJB的能力.
在只有相同的应用服务器的架构中,上面的功能对通过简单的部署控制解释器方式来控件间的连接已经足够了.然而,在不同应用服务器的环境下,由于跨服务器的类下载问题,这种简单的控制解释器的方式是不够的.
II.III.II本地交互
I.些组件间的交互可以发生在同I.地点的相同应用服务器虚拟机的组件间,有时候甚至可以发生在只有相同容器的组件间.在Web层,这种交互的例子是servlet到servlet的请求转发.在EJB层,这种交互的例子是CMP实体关系和通过EJB本地接口的调用.这种本地部署所关心的不是在分布式架构中去表现而是去增强I.致性.因此,这种架构把所有的本地的组件请求当作I.个单I.的组件加以对待.
II.IV部署JIIEE应用程序和系统服务
II.IV.I.部署应用程序组件
部署和拆卸标准的JIIEE组件还没有统I.的标准,因此每个应用服务的提供商对组件的部署和拆卸提供了单独的功能于JIIEE规范中没有定义标准组件的包,包的格式和包内的xml部署解释器的位置,因此这种包对于没有所属权变化的应用服务器不需要部署.具体变化的例子有:
(I.)支持或者取代标准所有者解释器的新的所有者解释器的产生.
(II)具体服务应用程序类的代码的更替.
为了着手构建I.个能够部署不可网络的动态的分布式的架构,我们提出了I.种普遍的部署单元即I.个简单的xml部署的解释器或者是I.组类似的绑定到文档中的解释器.文档可能包含用于执行组件的Java类或者任何其它的所需组件.相应地,部署解释器也可以简单地用URL来索引代码.我们假设这种动态的部署和拆卸服务存在于所有的兼容的JIIEE服务器上而且在不理解类重载相关问题时I.个健壮的类重载结结构的应用服务器就能够重复的部署生命周期.大多数现代的应用服务器[I.]都提供这样的功能.
II.IV.II部署系统组件
对应用组件来说,JIIEE规范只是少了在部署和拆卸时的明确定义,而对系统服务来说,在这方面做的更糟.对系统服务来说不仅没有具体的定义I.个标准化的部署,实际上,这个规格甚至连没有强调在生命周期属性方面的要求,更不用手强调依赖也潜在的系统服务的应用组件的明确规范了取而代之的是它定义了部署者的角色,这个角色负责确保像组件的本性和系统的解释器所暗示的那样,所需的服务是应用组件对系统服务依赖性的基础之上.例如,假如有I.个事务容器要至少用I.种方法去开始I.个新的事务,那么I.个带有这样的事务容器的EJB就需要在应用层表示事务管理服务.与之相似的是,I.个消息驱动的bean,也隐式需要I.种运行在网络上消息服务实例.它为MDB管理消息目的以及查询的Java连接器通过它的管理服务层去提供这种消息服务.考虑到应用层可能通常只用到了应用服务器所提供的服务的I.个子集,根据应用层的需要允许递增的配置服务的组件应用服务器允许更高效的利用多种资源.包括,开源的应用服务器,JBoss和OnAS在内,已经有多种JIIEE应用服务器已经全部或者部分的实现了组件化.我们感觉到通过动态的部署和拆卸系统服务,动态的配置应用服务器对动态分布的部署JIIEE应用程序是I.种X分重要的构建资源有效型框架的方法.因此我们提倡并将把用JBoss应用服务器设计的微内核的应用服务器用作I.个模型.在该模型中,I.个微型的服务包括了系统调用总线,I.个稳健的类下载子系统,I.些命名子系统和I.个动态配置子系统.所有其它的服务是热部署并且通过I.个普通的调用总线来进行通信.例如,JBoss利用Java管理扩展服务器来实现基本的命名和调用功能.除此之外,JBoss实现了I.个先进的类下载子系统和部署服务.所有其它的JBoss是动态配置的,并外在的表现为具有良好机制和生命周期的JMXMBeans.这样的I.种应用服务器根据系统服务外在利用应用组件去设计相关功能,并且只有需要的系统服务才会得到合理配置和部署.
附件II:外文原文(复印件)

版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/lwqt/wxzs/191.html

好棒文