第3章软件构件与中间件尽管当前社会的信息化过程对软件需求的增长非常迅速,但目前软件的开发与生产能力却相对不足,这不仅造成许多急需的软件迟迟不能被开发出来,而且形成了软件脱节现象。
自20世纪60年代人们认识到软件危机,并提出软件工程以来,己经对软件开发问题进行了不懈的研究。
近年来人们认识到,要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与工业化的生产技术。
这包括技术与管理两方面的问题:在技术上,应该采用基于重用(英文单词为“reuse”,有些文献翻译为“复用”)的软件生产技术;在管理上,应该采用多维的工程管理模式。
要真正解决软件危机,实现软件的工业化生产是唯一可行的途径。
分析传统工业及计算机硬件产业成功的模式可以发现,这些工业的发展模式均是符合标准的零部件/构件(英文单词为“component”,有些文献翻译为“组件”或“部件”)生产,以及基于标准构件的产品生产,其中,构件是核心和基础,重用是必需的手段。
实践表明,这种模式是产业工程化、工业化的成功之路,也将是软件产业发展的必经之路。
软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。
软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域(domain)知识。
通常,把这种可重用的元素称为软构件(software component,通常简称为构件),可重用的软件元素越大,我们就说重用的粒度(granularity)越大。
使用软件重用技术可以减少软件开发活动中大量的重复性工作,这样就能提高软件生产率,降低开发成本,缩短开发周期。
同时,由于软构件大都经过严格的质量认证,并在实际运行环境中得到检验,因此,重用软构件有助于改善软件质量。
此外,大量使用软构件,软件的灵活性和标准化程度也能得到提高。
根据考试大纲,本章要求考生掌握以下知识点:(1)构件及其在信息系统项目中的重要性;(2)常用构件标准(COM/DCOM/COM+、CORBA和EJB);(3)软件中间件。
3.1构件模型及实现一般认为,构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统。
结构上,它是语义描述、通讯接口和实现代码的复合体。
简单地说,构件是具有一定的功能,能够独立工作或能同其他构件装配起来协调工作的程序体,构件的使用同它的开发、生产无关。
从抽象程度来看,面向对象(ObjectOrientation)技术已达到了类级重用(代码重用),它以类为封装的单位。
这样的重用粒度还太小,不足以解决异构互操作和效率更高的重用。
构件将抽象的程度提到一个更高的层次,它是对一组类的组合进行封装,并代表完成一个或多个功能的特定服务,也为用户提供了多个接口。
整个构件隐藏了具体的实现,只用接口对外提供服务。
构件模型(Model)是对构件本质特征的抽象描述。
目前,国际上已经形成了许多构件模型,这些模型的目标和作用各不相同,其中部分模型属于参考模型(例如,3c模型),部分模型属于描述模型(例如,RESOLVE模型和REBOOT模型)。
还有一部分模型属于实现模型。
近年来,己形成三个主要流派,分别是OMG(Object ManagementGroup,对象管理集团)的CORBA(Common Object Request Broker Architecture,通用对象请求代理结构)、Sun的EJB(Enterprise Java Bean)和Microsoft的DCOM(DistributedComponent Object Model,分布式构件对象模型)。
这些实现模型将构件的接口与实现进行了有效的分离,提供了构件交互(Interaction)的能力,从而增加了重用的机会,并适应了目前网络环境下大型软件系统的需要。
国内许多学者在构件模型的研究方面做了不少的工作,取得了一定的成绩,其中较为突出的是北京大学杨芙清院士等人提出的“青鸟构件模型”,下面,我们就以这个模型为例。
青鸟构件模型充分吸收了上述模型的优点,并与它们相容。
青鸟构件模型由外部接口与内部结构两部分组成,如图3-1所示。
1.外部接口构件的外部接口是指构件向其重用者提供的基本信息,包括:构件名称、功能描述、对外功能接口、所需的构件、参数化属性等。
外部接口是构件与外部世界的一组交互点,说明了构件所提供的那些服务(消息、操作、变量)。
2.内部结构构件的内部结构包括两方面内容:内部成员,以及内部成员之间的关系。
其中内部成员包括具体成员与虚拟成员,而成员关系包括内部成员之间的互联,以及内部成员与外部接口之间的互联。
构件实现是指具体实现构件功能的逻辑系统,通常也称为代码构件。
构件实现由构件生产者完成,构件重用者则不必关心构件的实现细节。
重用者在重用构件时,可以对其定制,也可以对其特例化。
3.2常用构件标准目前,国际上常用的构件标准主要有三大流派,分别是COM/DCOM/COM+、CORBA和EJB。
3.2.1 EJB基础知识EJB(Enterprise Java Bean)规范由Sun公司制订,在EJB2.0规范中对EJB定义如下:EJB是用于开发和部署多层结构的、分布式的、面向对象的Java应用系统的跨平台的构建体系结构。
使用EJB编写的应用程序具有可扩展性、交互性,以及多用户安全的特性。
这些应用只需要写一次,就可以发布到任何支持EJB规范的服务器平台上。
虽然EJB似乎仅仅是Java Bean的企业,但EJB绝对不是Java Bean的简单升级。
Java Bean 是Java语言中的一种构件模型,其重点是允许开发人员在开发工具中可视化的操作构件,Java Bean可以被集成到任何Java程序中,尤其是在Java Applet和Application中得到了大量的应用。
而EJB是一种非可视化构件,EJB完全运行于服务器端。
EJB可以和远程的客户端程序通讯,并提供一定的功能。
如果EJB不和客户端程序交互,则不执行具体的功能。
同Java Bean 不一样的是,EJB仅仅在网络计算的环境下才有意义。
有三种类型的E JB,分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message-driven Bean)。
一个Session Bean描述了与客户端的一个短暂的会话。
当客户端的执行完成后,Session Bean 和它的数据都将消失。
Entity Bean对应数据实体,它描述了存储在数据库的表中的持久数据。
如果客户端终止或者服务结束,底层的服务会负责Entity Bean数据的持久性(也就是将其存储到某个地方,如数据库);Message-driven Bean是EJB2.0新增的类型,它结合了一个Session Bean和一个Java信息服务JMS()信息监听者的功能。
客户把消息发给JM S目的地,然后JM S 提供者和EJB容器协作,把消息发送给Message-driven Bean。
3.2.2 COM/DCOM/COM+基础知识c o m是微软公司为了计算机工业的软件生产更加符合人类的行为方式开发的一种新的软件开发技术。
在COM构架下,人们可以开发出各种各样的功能专一的组件,然后将它们按照需要组合起来,构成复杂的应用系统。
由此带来的好处是多方面的:可以将系统中的组件用新的替换掉,以便随时进行系统的升级和定制;可以在多个应用系统中重复利用同一个组件;可以方便地将应用系统扩展到网络环境下;COM与语言,平台无关的特性使所有的程序员均可充分发挥自己的才智与专长编写组件模块。
在此之后微软公司对COM进行了扩展,使其具备分布式的特性,即DCOMnDCOM使其能够支持在局域网、广域网甚至Internet上不同计算机的对象之间的通信。
使用D CO M,应用程序就可以在位置上达到分布性,从而满足客户和应用的需求。
因为DCOM是COM的无缝扩展,所以可以将对基于COM的应用、构件、工具,以及知识转移到标准化的分布式计算领域中来。
在做分布式计算时,DCOM处理网络协议的低层次的细节问题,从而使我们能够集中精力解决用户所要求的问题。
DCOM是COM的进一步扩展,COM定义了构件和它们的客户之间互相作用的方式。
它使得构件和客户端无需任何中介构件就能相互联系。
客户进程直接调用构件中的方法。
图3-8显示了DCOM的整体结构:COM运行库向客户和构件提供了面向对象的服务,并且使用RP和安全机制产生符合DCOM线路协议标准的标准网络包。
DCOM具有位置独立性。
DCOM使得构件的位置对你来说完全透明,无论它是位于客户的同一进程中或是在地球的另一端。
在任何情况下,客户连接构件和调用构件的方法的方式都是一样的。
DCOM不仅无须改变源码,而且无须重新编译程序。
一个简单的再配置动作就改变了构件之间相互连接的方式。
DCOM具有语言无关性。
任何语言都可以用来创建COM构件,并且这些构件可以使用更多的语言和工具。
Java,Microsoft Visual C++,Microsoft Visual Basic,Delphi,PowerBuilder和Micro Focus COBOL都能够和DCOM很好地相互作用。
COM+并不是COM的新本,我们可以把它理解为COM的新发展,或者为COM更高层次上的应用。
COM+的底层结构仍然以COM为基础,它几乎包容了COM的所有内容。
有一种说法这样认为,COM+是COM、DCOM和MTS(Microsoft TransactionServer)的集成,这种说法有一定的道理,因为COM+确实综合了这些技术要素。
但更重要的一点是,COM+倡导了一种新的概念,它把COM组件软件提升到应用层而不再是底层的软件结构,它通过操作系统的各种支持,使组件对象模型建立在应用层上,把所有组件的底层细节留给操作系统。
.3.2.3 CORB基础知识公共对象请求代理(Common Object Request Broker Architecture,CORBA)是由对象管理组织OMG制订的一个工业标准,其主要目标是提供一种机制,使得对象可以透明地发出请求和获得应答,从而建立起一个异质的分布式应用环境。
由于分布式对象计算技术具有明显优势,OMG提出了CORBA规范来适应该技术的进一步发展。
1991年,O M G基于面向对象技术,给出了以对象请求代理(ObjectRequest Broker,O R B)为中心的对象管理结构。
在O M G的对象管理结构中,ORB是一个关键的通信机制,它以实现互操作性为主要目标,处理对象之间的消息分布。
对象服务实现基本的对象创建和管理功能,通用服务则使用对象管理结构所规定的类接口实现一些通用功能。