(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf_第1页
(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf_第2页
(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf_第3页
(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf_第4页
(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf_第5页
已阅读5页,还剩59页未读 继续免费阅读

(计算机应用技术专业论文)基于消息和web+services的构件组装的研究和实现.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 在基于构件的开发过程中,构件组装机制是基于构件的开发重要的组成部 分,在其研究领域中最为关心的就是如何使用一种灵活的组装机制,能表现构件 之间的复杂关系,使得系统内部的构件能完成各自的功能,同时又不会对其他构 件产生影响。构件组装过程中将几个不同的构件组合成为一个构件,而这个过程 是一个重新设计的过程,同时组合后的构件要满足原始构件的需求。 本文首先介绍了相关构件的模型和当今流行的三种构件技术,并分析了一些 主流的构件组装技术中的不足。在此基础上,提出了一种新的构件的组合技术, 即基于x m l 消息和w e bs e r v i c e s 的构件组装。这种组装技术的特点在于分层实 现了不同粒度大小的构件的组装,而且强调了构件之间交互的平台,语言的无关 性,构件都是分布在不同服务器上,适合分布式的应用。在对原子构件进行组装 的过程中,使用x m l 消息作为构件的通信机制,构件之问使用消息代理,这样 可以确保构件间的松散耦合特性。通过使用s o a p 协议作为消息的传送机制,保 证消息的安全性以及正确到达目标构件。原子构件动态地组装成为一个构件,多 个组装后的构件共同完成某个模块的功能,为了使得这些构件统一为外部提供服 务,通过使用复合构件将一些功能关联的构件的组合到一起形成一个动态复合构 件,复合构件本身不是构件的实体,通过调用内部原子构件的接口和服务而对外 部提供需求。对于复合构件作者采用了w e bs e r v i c e s 对构件的接口进行封装,使 得复合后的构件与外部通过w e bs e r v i c e s 进行交互和通信,提供服务级别的组 装。因而整个架构从上往下看,复合构件对外部提供服务调用,同时其内部又是 原子构件之间的x m l 消息的传递和接受,这样使得了构件之间具有高度统一性, 而内部的复杂性对于外部使用者来说是不需要关注的。 在研究基础上,将这种组装技术应用到具体项目中一广州市科技项目“机械 装备行业e r p 系统”,并在实际应用中将组装过程中的一些关键技术得以实现, 该系统在实际应用中得到很好的推广。最后作者总结了主要的研究工作和意义, 同时也指出了研究中尚不完善的地方,给出了进一步研究的方向。 关键字:构件组装,原子构件,动态复合构件,x m l 消息,w e bs e r v i c e a b s t r a c t d u r i n gt h ep r o c e s so fc o m p o n e n tb a s e dd e v e l o p m e n t ( c b d ) t h ec o m p o n e n t i n t e g r a t i o ni sa ni m p o r t a n tp a r ti nc b d ,i ni t sr e s e a r c hf i e l d ,t h ef o c u si sh o wt ou s ga f l e x i a b l em e c h a n i s m , w h i c hc a ns h o wt h ec o m p l e x i t ya m o n gt h ec o m p o n e n t s ,c a n m a k et h ec o m p o n e n tp e r f o r mt h e i rf u n c t i o n s , a n dt h e nd o n tc a n s ei n f l u e n c et oo t h e r c o m p o n e n t s c o m p o n e n ti n t e g r a t i o np r o c e s si st oc o m p o s e s e r v a ld i f f e r e n t c o m p o n e n t st os i n g l eo n e ,w h i c hc a l ls a t i s f yt h eo r i g i n a lc o m p o n e n t s r e q u i r e m e n t s , a n da r e d e s i g np r o c e s s i nt h ep a p e rf i r s tc o m p o n e n tm o d u l ea n dt h r e ep o p u l a rc o m p o n e n tt e c h n o l o g y a r ei n t r o d u c e d ,t h e ns o m ec o m p o n e n ti n t e g r a t i o nt e c h n o l o g ya r ea n a l y z e d b a s e d t h e s e t e c h n o l o g i e s ,t h e a u t h o r p r e s e n t s an e w c o m p o n e n ti n t e g r a t i o n t e c h n o l o g y - c o m p o n e n ti n t e g r a t i o n b a s e dx m lm e s s a g ea n dw e bs e r v i c e s i t s c h a r a c t e r i s t i ci st or e a l i z et h ed i f f e r e n td e g r e ec o m p o n e n ti n t e g r a t i o n , a n dt h el a y e r e d t h i n k i n gi su s e d ,t h e ni te m p h a s i z eo nt h ep l a t f o r ma n dl a n g u a g eu n r e l a t i v i t y d u r i n g t h ec o m p o n e n ti n t e r c o m m u n i c a t i o n , c o m p o n e n t sa r ed e p l o y e do nd i f f e r e n ts e r v e r s ,s o i tc a nf i tt h ed i s t r i b u t e da p p l i c a t i o n d u r i n gt h ea t o m i cc o m p o n e n ti n t e g r a t i o n , x m l m e s s a g ei su s e dt oc o m m u n i c a t ew i t ho t h e rc o m p o n e n t s ,m e s s a g eb r o k e ri sb e t w e e n c o m p o n e n t s ,w h i c h c a ne n s u r et h e ml o o s e - c o u p l e d t h es o a pi su s e dt ot r a n s m i tt h e m e s s a g et oc o m p o n e n t s ,a n dt h e nc a nm a k es u r es a f e t yo f t h em e s s a g ea n da r r i v et o t h et a r g e tc o m p o n e n t a t o m i cc o m p o n e n td y n a m i c l yc o m l ) 0 s et oas i n g l eo n e ,w h i c h f i n i s hs o m em o d u l ef u n c t i o n , i no r d e rt om a k et h e s ec o m p o n e n t su n i f o r m l yp r o v i d e s e r v i c e st ot h ec l i e n t ,t h ea u t h o ra d o p tt h ec o m p o u n dc o m p o n e n tt e c h n o l o g yt o s t a t i c l yc o m b i n et h er e l a t i v ec o m p o n e n t st oac o m p o u n dc o m p o n e n t w h i c hi sn o t 锄 e n t i t ya n di n v o k et h ei n s i d ea t o m i cc o m p o n e n t st of i n i s hf u n c t i o n s f o rt h e s e c o m p o u n dc o m p o n e n t s ,a u t h o ru s et h ew e bs e r v i c e st oe n c a p s u l a t et h e i ri n t e r f a c e s , s ot h ec o m p o n e n tc a nc o m m u n i c a t ew i t ho t h e rc o m p o n e n t st h r o u g hs e r v i c e ,a n d p r o v i d et h es e r v i c e - l e v e li n t e g r a t i o n s ow a t c h e dt h ew h o l ef r a m e w o r kf r o mu pt o b o t t o m , t h ec o m p o u n dc o m p o n e n tp r o v i d es e r v i c e si n v o c a t i o nt ot h eo u t s i d e ,i ni t s l l i n s i d ea t o m i cc o m p o n e n t si n t e r c o m m u n i c a t eb yx m lm e s s a g e ,t h ew h o l es y s t e m h a v eh i g ho n e n e s s ,i l q e f sn e e d n tk n o wa b o u tt h ec o m p l e x i t yi nt h es y s t e m b eg r o 埘d e do nt h er e s e 甜6 h ,t h ea u t h o ru s ct h et e c h n o l o g yt ot h ep r o j e c t a p p l i c a t i o n - ”b s e r p ”,a n dr e a l i z es o m ek e yt e c h n o l o g yd u r i n g t h ec o m p o n e n t i n t e g r a t i o n , t h es y s t e mi sp o p u l a ri nt h ep r a c t i c a la p p l i c a t i o n f i n a l l y ,t h ea u t h o r p o i n t so u ts o r 把i n c o m p l e t e n e s sa n dg i v et h ef u r t h e rr e s e a r c ha s p e c t s k e yw o r d s :c o m p o n e n ti n t e g r a t i o n , a t o l i l i cc o m p o n e n t ,c o m p o u n dc o m p o n e n t ,x m l m e s s a g e ,w e bs e r v i c e s i l l 1 1 研究背景 第1 章前言 商业需求的快速变化产生了对大规模,复杂以及高度可维护的软件系统的日 益增长的需求。这就对软件团体提出了新的挑战,并且驱动了一种新的,有效的 以及节约成本的软件开发范式的产生。基于构件的软件开发方法已经被认为是最 有希望和前景的解决方法。这种新的方法主要是集中于建立基于构件的软件系 统,通过选择各种商业构件以及在一种恰当的软件架构中组装这些商业构件。基 于构件的开发方法是基于这样一种思想:有如此多的小的构件在不同的系统中, 因此,通过集成构件而不是从头开始实现,可以快速的和经济的构建新系统。通 过提高构件的可用性,这些构件是由软件商家开发出来的或者开发者开发出来 的,基于构件的软件开发方法承诺软件的可重用性。因此,基于构件的软件开发 很大程度上减少了开发的成本和时间。 为了建立基于构件的软件系统,需要选择一种架构,提供相关系统的所需的 质量等级;识别属性的质量;评估以及分析软件的结构。没有这些技术将会引起 更多的技术问题。而且,选择适合新系统的构件需要评估每个候选对象以确保构 件不仅能满足功能和质量的需求,同时还要与系统中的其他构件相兼容。构件评 估需要这些信息如设计方案以及构件的质量属性,以及构件的合成工具。然而, 商业构件通常被描述为“黑盒”构件;所以构件接口是唯一让系统开发人员能看见 信息的来源。由于缺乏足够的信息,在开发时产生了几个重要的问题以及基于构 件系统的维护。这就需要我们提供一套工业标准说明以及定义好的程序,可以用 来确保为新系统选择一组正确的构件所需要的信息的可用性,完整性,完全性, 以及精确性。 1 1 1 基于构件的开发 基于构件的开发”i ( c b d ) 强调的是,首先c b d 集中于软件的构建和构件 的相互理解能力机制。j e a n - g u ys c h n e i d e r l 2 1 建议要想成功的将构件结合到一起, 最重要的部分是: ( 1 ) 每个构件的接口必须要满足构件中其他系统的需求。 ( 2 ) 构件之间的协议”要被定义好。 因此,基于构件的开发取决于对约束的理解,兼容的接口以及标准的交互协 议。而且,c b d 关心如何保证构件的质量。a n t o i n eb e u g n a r d 3 1 l 涂t 始的合约 的概念之外还对合约的概念做了更进一步的解释,对构件合约分成了一下四个级 别: ( 1 ) 基本合约,这是简单的构件接口,列举了操作以及它们的签名( 输入 和输出的类型) 没有语法的特性。 ( 2 ) 行为的合约定义了构件的接e l 行为。 ( 3 ) 同步合约说明了构件的行为为了使得方法调用之间得以同步。 ( 4 ) q o s 合约则对构件的行为进行量化或者提供协调这些量化数值的方 法。 c b d 主要是一种技术的发展因此其产生的好处也是技术方面的。这些技术 的用处转而能引导间接的商业利益。商业和技术的利益如下: 高质量的产品,减低成本,产品的高度重用,复杂性受到很好的控制,因此 提高解决方法的质量,独立的设计,实现以及测试保证了目前的开发上升了一个 高度。 下图是基于构件的软件开发的过程模型图: 图l - 1 基于构什的软件开发的过程模璀 在基于构件的开发过程中,构件组装机制是基于构件的开发重要的组成部 2 分,在其研究领域中最为关心的就是如何使用一种灵活的组装机制,能表现构件 之间的复杂关系,使得系统内部的构件能完成各自的功能,同时又不会对其他构 件产生影响。 1 1 2 目前构件组合技术的问题 对新的软件系统的日益需求提高了对结合成熟软件应用和附加功能的需要。 为了给软件注入新的特点而要修改复杂,牢固,以及成熟的应用的方法已经是不 现实的了。而且,基于目前的这些应用都是建立在这些方法上,用户必须转而去 学习新的方法,这些方法新则新,但是没有很多的必要的作用。因此,利用可用 的构建块来构建新的系统比从头开始建立新的系统来得更实际而且更受关注。这 种软件的开发技术被称为“软件的重用”。 k r u e g e r 4 1 提出的“c o g n i t i v ed i s t a n c e ”作为评估软件重用的技术的方法。对于 软件重用技术的有效性,必须减少一个系统的原始概念和其最终的可实现 c o g n i t i v ed i s t a n c e ”。换句话说,当且仅当对识别,理解以及组合一个软件构件 所做的努力是足够小的,以便程序员能够选择重用而不是重写代码片断【5 1 ,那么 软件重用是有效的。所以,软件构件必须是黑盒实体,在这个实体里面了封装了 定义好了的接口的服务【6 】。当今最流行的构件模型,有c o m 。j a v a b e a n s ,以及 c o r b 气都是采用这种原则。本文主要针对这些构件的组装。 为了完成基于构件的软件的重用,研究人员已经提出了许多的构件组装技 术。但是这些技术都存在一些不足: ( 1 ) 现存的构件组装技术不能满足开发者的需求,开发人员正是实际使用这 些基于构件方法的人。现存的构件组装技术需要开发人员来实现构件的 胶合而不是描述构件之间的交互。 ( 2 ) 很少有文章强调“重用”的现存标准模型语言,而更多的是发明新的基于 构件应用模型的“组装语言”。 ( 3 ) 软件的构件是“软件的i c s , 很难规范一个基于构件软件的合成工具, 这个工具可以自动的产生以及验证基于构件的应用的过程,这与处理 “硬件i c s ”的过程是相同的。 ( 4 ) 构件的组装集中于静念的组装,动态组装能更好的适应需求的变化。或 者是同构的构件的组装,实际中会用到多种模型的构件,这样异构的构 件的组装并不能使用同构的构件的组装方法,因而组装的方法要适合异 构的构件组装。 1 2 研究意义 本文在研究和探讨当今的多种构件的组装方法和机制之后,分析了一些经典 的组装的方法的缺陷以后,提出了一种新的构件的组装方法,该方法同时结合了 当今流行的相关技术,如:x m l ,以及w e bs e r v i c e s 等,不仅继承了传统的 组装方法一些优点,同时也加入了一些新的思想和方法一采用分层的思想和动态 的组装方法。组装根据构件的粒度大小而采用不同大的组装过程和技术。组装的 过程再整个系统的运行过程中相互交错,相互联系。组装方法将构件区别对待, 分为原予构件和复合构件。同时两者又不是相互独立的关系,而且复合构件是通 过消息机制组合成为复合构件,再将服务的技术和思想运用到构件的组装过程 中。 使用这种方法可以较好的平衡灵活性和编译效率的关系,同时借鉴结构化的 程序设计的方法和消息机制。有较好的跨平台性,以及语言的无关性,构件之问 的松散的耦合关系。将此组装方法用于实际的项目开发,使得整个系统在不仅功 能实现上体现出了其自身的优势,同时在系统的效率以及运行时间上也达到了较 好的效果。 1 3 研究内容与各章节安排 1 3 1 研究内容 首先介绍了构件以及构件组装的相关知识,本论文的主要研究内容有以下几 个方面: ( 1 ) x m l 消息对传统的消息加以改进,用x m l 来表示所要传递的消息, 由于x m l 在描述信息时,采用的标签对,这样方便用户描述相关信 息,而且接受方也容易理解所要表达的信息,而且现在有很多的工具 用来发送和解释x m l 描述的信息,更重要的是x m l 消息具有跨平 4 台性和语言无关性。 ( 2 ) 基于消息的构件组装对构件粒度较小的原子构件采用此方法进行组 装,本身原子构件的粒度较小,功能比较单一,组成简单,这样我们 可以用传递x m l 消息作为构件传递消息的机制,本身构件自己不需 要考虑过多子自身的问题,从而可以将更多的花费和重点放在消息通 信上。通过采用一些x m l 消息标准,对x m l 消息进行封装,可以 帮助解决通信过程中的很多复杂问题。 ( 3 ) 基于w e bs e r v i c e s 的复合构件的组装对粒度较大的构件采用这 样组装方法不w e bs e r v i c e s 用于构件的组装中,同时对外部以 服务接口的形式提供功能的需求。整个过程是处于动态的配置过程, 构件在运行时才是联系在一起的,这样复合构件在组成时处于动态的 构建,与静态的复合构件相比较,静态的不需要开率过多的构件组成, 结构上更紧凑,但是动态的更加灵活,可以最优化的实现构件的组装, 从分利用现有的构件所提供的服务。从而整个系统更加灵活和变化。 同时满足客户的需求而不需要进行较大的改动。 ( 4 ) 在进行了理论的研究之后,将整个的实现用于到实际的项目中,结合 了具体的项目,对研究的内容做了进一步的阐述和深化,同时最后分 析了此组装方法的特点,提出了一些存在的缺陷和不足,并对今后的 工作作了一定的展望。 1 3 2 各章节安排 首先第一章是前言部分,对问题的产生和背景作了相关的介绍,然后第二章 对构件技术和主要构件的组装技术作了相关的交代,具体介绍了几中代表性的组 装理论,对后面的组装提供了相关的支持。接下来第三章主要是组装中用到的一 些重要的理论知识,并对x m l 消息和w e b 服务做了相关的阐述,为接下来的 组装研究提供基础理论。第四和五章,是本论文的重点,着重研究了构件的是如 何组装的,同时组装过程中的具体细节以也加以阐述。并在第五章对研究加以实 现,具体的用到了项目中得以实现。最后一章是对整篇文章的总结以及提出了今 后的工作的进一步的研究。 第2 章主流构件与构件组装技术 2 1 主流构件 2 1 1 构件模型 构件模型是组软件构件的集合,这些构件具有一定的设计规范,用来约束 构件的接口和控制它们组合的规贝t s t n 。当今最流行的构件模型主要有三种,分别 是:微软的c o m a c t i v e x 构件,c o r b a r ,以及s u n 公司的j a v a b e a n s 。下面 分别就这三种构件做个简单的介绍。 2 1 2c o m 和a c f i v e x 构件 微软公司的c o m 构件是一种软件架构,基于这种架构用二进制软件构件 来建立应用。c o m 定义了一种与语言无关的构件模型【s 1 。c o m 是一种底层架构, 可以用来创建更加高级的软件服务,比如o l e 提供的那些服务。o l e 服务涉及 到系统常用功能的各个方面,包括复合文档,客户控制,相互应用脚本,数据转 换,以及其它的软件交互1 9 】。 a c t i v e x 构件是这种构件的一种,这些构件用c o m 技术实现和其他类型的 c o m 构件与服务之间的互操作性【i o l 。a c t i v e x 构件是与语言无关的构件模型, 因此开发人员可以用不同的编程语言来开发a c t i v e x 构件。微软为a c t i v e x 构件 定义一种二进制标准,每个a c t i v e x 构件都要遵循这个标准。微软的对象连接和 嵌入( o l e ) i h i l l 2 1 是另外一种基于c o m 的二进制的标准。它定义了一组c o m 对象的接口,这些接口提供各种方法组合应用构件,同时说明了它们二进制的存 储表示。 6 2 1 3j a v a b e s i i s 图2 1 微软构件对象模型 j a v a b e a n s l l 3 堤基于j a v a 语言的一种构件模型。j a v a b e a n s 扩展了j a v a 类的 可重用性,j a v a 类是用来将软件构件组合到一起并形成应用。不同形式的a c t i v e x 构件f j o l ,j a v a b e a n s 是语言有关的,因而开发人员必须要用j a v a 语言来开发每个 j a v a b e a n s 构件。但是,由于j a v a v m 的存在,j a v a b e a n s 允许开发人员只要写一 次重用的构件就可以到处运行。j a v a b e a n s 构件必须运行在b e a n 容器内。b e a n 容器提供支持b e a n s 运行和相互通信所必须的环境。j a v a b e a n s 本身就可以是一 个b e a n 容器,因此开发人员可以在其它b e a n s 的外部组合b e a n s 。主要目的是 为了软件的重用性。事实上,在j d k l 1 1 ”】中,所有的a p p l e t s 都是b e a n 容器而 且所有的a w t 构件( 如b u t t o n s ,l i s t b o x e s ,等) 都是驻扎在a p p l e t s 中的b e a n 。 j a v a b e a n s 的应用编写工具可以包括w e b 页面编辑器,可视化应用编辑器, g u i 布局编辑器,甚至于服务器应用编辑器。有时一种编辑工具”可以仅仅是文 本编辑器,它包含一些b e a n s 作为一部分复合文档。 j a v a b e a n s 可以是简单的g u i 元素象按钮和滑动条。也可以是复杂的可视化 软件构件如数据库观察器,或者数据流。一些j a v a b e a n s 可以没有自己的g u i 外观,但是可以用应用编辑器组合起来。许多j a v a b e a n s 应用编辑工具提供了一 7 种简单的脚本语言,象j a v a s c r i p t ,为实现一组b e a n s 而要求更高级的脚本。 正如a e t i v e x 构件一样,b e a n 用“事件”作为通信工具与别的j a v a b e a n s 接连。 j a v a b e a n s 有自己的属性,是用来定制化构件的。j a v a b e a n s 同时支持持久性数据, 因此j a v a b e a n s 有专门保持和再装状态的方法。b e a n 不需要从任何其它特殊的基 类或接口继承而来。然而,可视化b e a n 需要从j a v a a w t c o m p o n e n t 中继承而来, 只有这样他们才能被集成到可视化容器中,但是非可视化b e a n 并不需要这么做。 j a v a b e a n s 具有软件构件所有的大部分属性,除了不是语言无关之外。下面 的图展示了j a v a b e a n s 应用是如何与数据库服务器,c o r b a r 服务器以及j a v a 服务器交互的。 = 、# j 溉辫辅巍麓溉蕊赫麓疆蕊赫施蠹癜 l ,a ”b e a n 卜一j d b cl 骜幽跫黪。+ 要d a t a b es e e rl 孙赢藩态j u a m 。晒e3 e 1 a l 。o ”掣? 譬”躜 魏l o p 。、一。纛;矗。女。;熹。 j a v a b e a n1 :,。“”i 嚣。j 。、。习。u d 。口7 计 i 麓一、。9 赣”黟j 警。4 聱” 器r m ” 、 + ,弼霸勰瓣瓣菇蟊。瓤镶鳓未。 j a v a b c a n 蓦一。o 、翻。l 瓤二* 。习“”“”“ l e 、 ,7“ + o 嚣i 鹫黔氅疑鹦麟秽羲璧鬻嚣黪辫妒 黔、。j j j、 j o “。j ” 图2 - 2j a v a b e a n 应用 2 1 4c o r b a o m g 已经开发了种对象通信标准一c o m m o no b j e c tr e q u e s tb r o k e r a r c h i t e c t u r e ( c o r b a ) t 1 6 1 。与c o m 类似的是,c o r b a 为对象间的通信提供了标 准机制。他们同时也说明了如何以一种分布式的方式建立构件和应用。c o r b a 为分布式对象通过网络进行交流提供了标准。c o r b a 和c o m 都可以让包含在 对象模型中的应用逻辑与用户接口相互独立1 1 7 1 。图2 3 显示了c o r b ao r b 架 构的主要构件。 c o r b a 定义了接口描述语言( i d l ) 以及应用编程接口( a p i ) 。c o r b a a p i 允许编程人员开发c s 类型的对象交互,在实现一个特定的o r b 的中。o r b 提供了必要的服务来找到对象的实现,传递参数,方法调用,以及返回结果。 8 c o r b a 还可以使现存组件通过接口包装器实现构件的组装。用这样的方法,编 程人员用i d l 定义相关接口。实现c o r b a 接口( 用i d l ) 和构件接口之间的转 换。然而,i d l 并不能满足构件的组装。i d l 仅仅能用来描述接口。为了把组件 集成到一起,开发人员还要用真正的编程语言或者脚本语言来实现组装。因此, c o r b a 本身并不是一个合成系统或者语言。它只能被看做是中间件,为用 c o r b a 构件开发的人员提供必要的服务f 1 8 1 。 图2 - 3 c o r b a o r b 架构 2 2 构件组装技术 基于构件的软件开发分为构件的制作与构件的组装,而其中构件的组装又是 其最为核心的部分。构件只有经过组装后才能成为软件系统。如何将构件组装成 为合适的应用系统,这将受到诸多因素的制约,其中包括需求定义,软件体系结 构,构件模型,系统运行环境和平台以及组装粒度等要素。 构件组装研究的就是在构件模型基础上研究构件的组装机制,包括源代码级 的组装和基于构件对象的组装。静态组装主要使用组装工具,但是普通用户还不 能很好地掌握和使用,主要通过专门的开发人员,与有一定知识的人才能熟练地 操作。动态组装主要特征是以构件模型、构件体系结构的建立和标准化以及系统 开放技术的运用。静态组装强调了构件组装时的准确性,而动态组装则着重于运 9 行时构件的自动适应性和变化性,虽然效率上不如静态,但是在适应性和变化性 方面是有静态所没有的优点。而这正是当今网络时代分布式应用所要有的特点。 2 2 1 组装技术的分类 目前根据组装构件时对构件内部了解的情况,可以分为三种组装方法:黑盒、 白盒以及灰盒组装方法 1 9 1 ,而其中又以灰盒组装方法研究得最广泛。下面就分别 对这三种方法做个简单介绍,同时着重介绍一些经典的灰盒组装方法。 黑盒组装方法实际上是一种抽象的理想化的组装方法,因为它只要求我们直 接拿来用,并不要求开发人员或者用户对其内部细节做任何了解,以及其配置做 任何修改,很显然这样使得我们使用起来很方便,同时安全可靠。然而这就要求 我们使用的在装配构件时一切都要规范化,标准化。但是这在我们实际运用中是 很困难的。只能作为我们的一个参照目标来看,可以用来指导我们的研究。 白盒组装方法却正好与黑盒方法相反,它要求我们对构件的每个细节都了如 指掌,即要求所有的细节都暴露在外面,展示给我们看。在组装的时候我们要做 适当的修改。很明显这与构件的设计宗旨是相违背的。因为我们的一个修改只能 是在某个特定环境中的,是暂时的,这样就体现不出构件的可重用性。 因此,鉴于上述两种方法所走的极端,另外一种折中的方法被提出来了,这 就是灰盒组装方法。其思想是这样的:我们并不要修改构件本身,而是通过调整 构件的组装机制来满足系统组装的要求,对构件的外部环境做修改来满足构件的 组装,这样保证了构件的重用性,又免去了构件组装的复杂性。 2 2 2 实现方法 实现方法的多样性使得我们不能一一去列举,其中主要部是灰盒组装方法。 灰盒组装方法可以分为四种:基于框架的、基于体系结构的、基于连接器的和基 于胶合代码的组装方法。下面就简单介绍几种灰盒组装方法: 1 基于框架的组装方法 ( 1 ) 基于p o r t 和l i n k 的组装 针对在分布式系统中使用构件所要面临的一些问题,g u i j i nw a n g 等f 2 0 】提出 了一种框架,从三个不同的角度去看待问题一架构,构件,以及分布式对象结构 1 0 并解决它们之间存在的矛盾。在这里他们用了端n ( p o r t s ) 和连接( 1 i n k s ) 将构件的 核心功能和构件问交互机制以及策略分离出来。在这里p o r t s 主要是代表构件的功 能以及处理需求和提供请求或者事件。而l i n k s 是处理构件之间的交互机制,主要 涉及到分布式通信协议或者中问件。 架构视角定义了系统中使用的构件,它们的功能以及如何交互主要是建立 构件边界。设计者可以用功能性的概念例如服务和事件来建构组件的模型和构件 的交互。他们可以重用一个架构设计模式来定义构件和它们之间的交互。 构件视角是考虑构件的合成和实现。一些构件可以有更小的构件组成。构件 可以来自于构件库或者由构件开发者从头开始实现例如j a v a b c a n s 。 最后分布式对象结构关心的是如何实现构件与具体q o s 参数的通信参数包 括性能,可靠性以及安全性。不同中间件的网络协议和类型可以用来作为分布式 通信,每个都有不同接口,不同的操作,步骤,约束,q o s 特点等等。 在文章中对于构件之间的交互,作者定义了构件的边界并提出了三种不同的 交互方式分别是: 服务服务,构件用别的构件提供的服务, 事件事件,构件监听别的构件产生的事件,以及 事件服务,构件产生的事件触发了别的构件提供的服务。 文章中作者还提出了端口和连接各自的层次结构。 一 每个端口都有两种基本类型服务和事件,同时它们有各自有两个子端口。 因此对于每个构件边界元素它们都有四中端口类型。其中服务端口是用来描述它 们提供或需求的服务的。事件端口是用来描述产生或者监听的事件的类型。 图2 4 构作边界示意图 对于连接而言如图所表示的那样,三种连接的类型的基本功能是发送服务或 者事件给目标端口。其中服务连接是连接服务需求和供给端口。事件连接是连接 事件发生端口和事件监听端口。事件服务连接是连接事件产生端口与服务提供 端口。因此可以看出三种不用类型的连接分别对应三种交互形式即服务服务, 事件事件,以及事件服务。在这里连接有两个属性分别是源端口和目的端口, 连接将服务由源端口发送给目的端口。 ( 2 ) 基于r e b o u n d 框架的组装 j o h np e n i x l 2 1 】在文中描述了一种用于合成基于事件的软件架构r e b o u n d f r a m e w o r k 。这种框架可以自动化地组装和调整组件。在这个框架中,使用规约 技术来选择构件并包装构件用来组装。整个框架指导包装器的选择根据问题说明 和可重用的构件。包装器说明用来生成匹配条件。 在r e b o u n df r a m e w o r k 中,作者提出了有三种不同的调整:类型,接口和行 为。同时结合调整策略采用参数化来创建更加复杂的架构。 类型调整发生在当一个通用的类型被特例化的时候,并且通过提供一个类型 参数来做具体说明:l i s t f i n t 用来表示一列整数。这种类型调整在很多编程语言 中也用到。 接口调整涉及的范围从简单类型包装器到封状复杂控制结构的包装器。任何 架构说明,仅有一个构件实例化,可以被用做为一个包装器说明。 行为的调整策略以渐进地方式被应用,使用架构制约作为选择插入构件的规 则。行为调整的目的是改变一个构件的行为以便构建能够在一定条件下匹配,而 且尽可能足够的健壮。可以通过关联合成架构来实现。 基于框架的组装方法只适合同构的构件组装,对于不同模型的构件没有提出 如何处理构件交互。因此基于框架的组装通常与其它的方法结合起来使用。 2 基于连接器的组装方法 ( 1 ) 基于多代理适配器( m a c ) 的构件重用的架构 q z h o n gw a n 9 1 2 2 1 等人提出的m a c ,是一种用多代理适配器来实现构件组装 的架构。文章中作者首先提出了一种构件适配的方法集成( a s s e m b l e ) ,用来 解决接口匹配,消息处理,状态管理,环境模拟等问题同时提出用多代理适配器 来构建一个灵活的机制。 1 2 为了解决构件适配中不足,作者采用了s u p e a h n p o s i t i o n 这种适配器,用来解 决象接口不匹配以及环境不支持等问题,这种方法能更好地解决构件透明地重 用。因此构件之间通过一系列的适配器来通信。 每个适配器都是一个代理对象,构件与适配器组装在一起从而形成新的构 件。在构件被用来组装前,必须要和适配器集成在一起,这个过程通过a s s e m b l e 适配技术来实现。整个过程如下:首先要选择合适的构件,然后将其实例化,接 着将构件与适配器集成到一起形成新的构件从而新的构件就可以执行了。 通过这种方法可以解决如下一些问题: 在不同构件方法中,方法或者参数的不匹配可以在重用构件之间得以处理。 可以通过将函数调用转换成为用户定义的消息,由状态管理器来实现将调用 转换成消息,由消息发送器将消息发送给目的地。由构件处理消息并返回结 果。 消息处理 一方面可以将方法调用转换成消息来处理,另外一方面就可以将消息映射 成为内部函数或者方法,可以用来实现适配器的独立性。 状态管理器 是用来管理构件实例的状态空问,控制构件状态的跳转,对于不同时期做不 同的处理。加入前件和后件在每个事件发生之前,判断事件发生的条件是否满足。 使用m a c 设计构件软件可以分为如下四个过程: 通过需求和实际构件以及适配器库,我们可以设计构件重用的整个蓝 图。如果适配器有问题,那么就可以设计新的适配器。 定义构件和动态组装过程。 收集从用户那里得到的反馈并且再编译如此反复。 开发结束后将新的构件和适配器放入到构件库和适配器库中。 3 基于消息连接件的构件组装 c 2 架构是f l = l r i e h a r dn t a y l o r 等人【2 3 1 提出的,主要是关心高级系统合成问题, 在c 2 架构中核心的问题上是通过传递消息实现交互并且遵循有限的“可见性”或 者底层独立性”:在c 2 架构中构件以一种分层的形式排列,同时构见是完全不知 道那些位于其下面的那些构件。独立性明显地有利于构件的代替和重用性。下面 图显示了一个c 2 的架构以及其基本元素。 呈 幽2 - 5c 2 架构和消息流 在上图中,c 2 架构的构建块是构件和连接器。它们各自都有一个顶端口和 底端口。一个构件的顶端口可能与一个构件的底端口相连f 2 5 】。 构件的底端口可能与一个构件的顶端口连接。一个连接器上的构建或者连接 器的数量是没有限制的。构件之间仅仅通过连接器交换消息来通信。这将大大地 简化了控制交互问题的复杂性:这种特性使得构件相互交换的成本降低,在构造 不同数量的相同的系统家族时。构建和连接器有着一个顶接口和底接口。顶接口 说明构件响应的消息集,以及构件向上发出去的请求集合。底接口则说明构件向 下发出的消息集以及它响应的请求集。也就是说每个构件都通过顶接口与上面的 构件通信而通过底接口与下面的构件通信。 基于连接器的构件组装将构件的功能实现与构件的交互分开,增加了构件组 装可配置思想,这样比较适合于构件的动态组装,适合系统进行扩充和进化。但 是连接件的弱点在于对系统执行缺乏控制。因而可以考虑结合其他组装机制一起 使用。 ,4 第3 章x m l 消息与w e bs e r v ic e s 3 1 x m l 消息技术 紧耦合的系统依赖于自己各自的对象,但是每个接口是脆弱的,如果应用程 序和服务对象之间的任何通信被阻断,或者这个调用并不是十分正确,那么就有 不可预知的错误发生。 紧耦合的另外一个问题就是跨平台( 包括操作系统,开发语言等) 的通信问 题。一个c o m 对象在w i n d o w s 上运行自然可以很好地与另外一个运行在 w i n d o w s 的c o m 对象通信,没有问题只要遵守相同的协议约定。但是如果想 与u n i x 或者j a v a b e a n s 对象通信,那么这是很难实现的。因而我们需要一种 方法来解决这种跨平台兼容性问题。 t c p i p 协议只是一个简单的协议通过公共网络发送包,同时一开始语音通 信的文件传输协议( f r p ) 以及邮件协议都是基于这个协议的。虽然它们有很多 优点但是它们不能提供一种用于表示信息的一致的方式和接口。h t m l 提供一种 简单的标记结构在w e b 浏览器中可以更好地查看信息。h t m l 是一种信息传递 的完整技术,但是想要使我们的计算机更加直接地进行会话,这种技术就有明显 的不足。h t m l 被设计成为工人类识别的二维信息而计算机不具备人的思维。因 而对计算机并不理想。 我们要找到一种对付这种二维页面信息的方法使计算机之间能进行交谈。 通过这种方法,计算机可以解释发送的信息。x m l 的出现,为解决上述的问题 提供了一种方案,将消息用作x m l 的形式表示出来,同时兼具了x m l 语言的 特点,也充分展示了消息的优势。 3 1 1x m l 概述 x m l = e x t e n s i b l em a r k u pl a n g u a g e 可扩展标记语言,由万维网协会 w 3 c 1 2 6 l ( w o r l dw i d ew e bc o n s o r t i u m ,1 9 9 4 1 0 成立,由w 曲的发明者t i m b e r n e r s - l e e 领导1 于1 9 9 8 年制定的一种基于文本的数据描述语言的语法通用标 准,可用来制定定义数据的结构、种类、属性和内容的具体规范。x m l 被誉为 因特网上的世界语,其主要应用领域有:数据交换、w e b 发布和分布式计算等, 是新万维网w e b 的基础。 有以下几个重要组成部分【2 6 1 : d t d ( d o c u m e n t t y p e d e f i n i t i o n 文档类型定义) 定义文档结构、元 素和属性等,提供文档类的语法( 在x m l 标准中定义) s c h e m a ( 模式大纲) - x m l 的应用、可定义文档结构与数据类型, 有替代d t d 的趋势 n a m e s p a c e ( 名字空间) 由上下文确定名字的意义 x s l ( e x t e n s i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论