高级软件工程 (11).ppt_第1页
高级软件工程 (11).ppt_第2页
高级软件工程 (11).ppt_第3页
高级软件工程 (11).ppt_第4页
高级软件工程 (11).ppt_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、第 十 一 讲 软 件 公 共 服 务,一、动因 二、概念 三、OMA中的公共服务 四、J2EE中的公共服务 五、应用系统组装,内 容,一、动因,我们已经对 抽象原则 分治原则 在网络软件中的运用有了直接的认识 软件公共服务则可以看作主要是对 分层原则 的一种运用,1、软件复用技术的推动,共性程度高的成分一般是复用程度较高的部分 应当对它们加以特别的处理 复用程度较高的部分将逐步从应用系统中剥离出来 成为独立的一个层次 对于网络软件 通信机制很明显是它们最重要的共性部分 其它与具体技术领域、应用领域都比较独立的成分 即是各类网络软件共性较强的成分 它们构成了不同的公共服务,2、软件实现技术的发

2、展,构件是承担应用系统功能的主体 构成了应用系统的主要内容 但一个系统中仅仅有构件通常是不够的 还必须考虑一些次要内容(功能的约束) 例如:构件之间的关联关系(调用关系) 相互之间的交互方式(交互协议) 以及系统的分布性、可靠性、安全性等等 如何实现功能的约束? 不同领域功能性需求的描述方式差别较大 而对其中的约束性需求的描述则存在很大的的相似之处 这个特点在实现层也存在 需求表述与实现上的这个特点导致了人们 将约束及其实现视为复用的主要对象 公共服务是实现约束的重要途径,3、应用服务器的层次结构,分层(layered)风格的结构是系统软件的重要特点 分层协议 数据库系统 操作系统等 是采用分

3、层结构的典型系统,严格层次结构,非严格层次结构,另一种形式的OMA,二、概念,1、定义 2、公共服务与构件 3、公共服务与容器 4、公共服务的接口 5、公共服务的实现 6、共服务的使用方式,OMG有时也将公共服务称为对象服务 主要从应用对象的角度来看待公共服务 OMG 1997的定义是: 一组支持基本功能的服务(包括接口与对象) 用于使用与实现对象 我们的定义: 公共服务是应用服务器的组成部分 用于对应用的约束性需求进行支持,1、定义,什么是公共服务?,2、公共服务与构件,不同于单机环境下应用程序与程序库之间的关系: 公共服务基本上不实现应用系统的功能 也不会被链接到具体的应用系统中 程序库可

4、以用于实现应用系统的功能 且往往被链接到应用系统中 类似于单机环境下程序模块与操作系统中系统调用之间的关系: 公共服务是网络环境中系统软件的一部分 系统调用是单机环境中系统软件的一部分 它们都可以独立运行,不依赖于具体的应用系统,公共服务与构件类似的地方在于: 构件是应用软件的组成部分 由构件规约与构件实现组成 公共服务是系统软件的组成部分 也由规约部分与实现部分组成 而且还有多种实现方式,公共服务与构件是什么关系 ?,3、公共服务与构件容器,公共服务与构件容器都为软件构件提供必要的支持 但二者的支持方式与内容都有所不同 从支持方式看 构件所需要的服务是由构件容器直接支持的 公共服务的支持通常

5、是通过构件容器进行的 从支持内容看 容器主要支持那些不需要额外资源的约束 例如:并发性、生命周期、持久性 公共服务主要支持那些需要额外资源的约束 例如:需要文件资源的事务服务、 安全服务、日志服务、事件服务 需要网络资源的通信服务 需要处理机资源的负载共享服务等等,公共服务的接口定义了公共服务的调用格式 公共服务接口的定义方法与构件的定义方法基本相同 例如:OMG不仅用IDL定义应用对象 还用IDL定义公共服务 SUN采用Java语言的interface声明构件的接口 也用它来声明底层服务的接口,4、公共服务的接口,由于实现功能的复杂性 一个公共服务往往包含多个接口 分别用于代表公共服务内的一

6、组有意义的操作 例如:OMG的命名服务包含两个接口: NamingContext BindingIterator SUN的JTA包含5个接口: UserTransaction TransactionManager Transaction Synchronization XAResource,公共服务的具体实现方式是十分丰富的: (1)公共服务可以在应用服务器内实现 (2)公共服务可以由另外一个单独的中间件产品实现 (3)公共服务可以在局域网内的另一个应用服务器实现 这主要是因为在局域网内的许多资源需要统一管理 例如负载共享服务、命名服务、安全服务等等 (4)公共服务可以作为一种网络基础设施 在

7、因特网范围内对各种应用服务器进行支持 在下一代因特网中这种趋势十分突出 许多公共服务被实现为网络的基础设施 例如:身份认证、主体标识等等,5、公共服务的实现,公共服务有哪些实现方式?,a,c,d,构件,容器,应用服务器,网络基础设施,b,公共服务的实现,如何向公共服务发出一条符合公共服务接口的消息 以最终实现功能约束 1) 代码直接调用式的使用方式 在应用程序代码中直接调用服务接口 存在使用直接、效率较高等优点 也存在一些不足 例如:不利于程序代码的复用 不利于在运行过程中根据约束性需求的变化 调整具体的实现策略 这些不足可以通过声明式的使用方式克服!,6、 公共服务的使用方式,公共服务有哪些

8、调用方式?,2) 后期声明式的使用方式 应用程序代码不直接调用公共服务 而是由容器(截取器)进行调用 容器调用的依据是应用系统开发人员 在系统组装或者部署阶段对应用程序的声明 这种声明可以是针对一个类进行的 也可以是针对一个具体的方法进行的 声明式的使用方式也存在一些不足 例如:效率有所损失,使用点受到限制等 实际过程中可以结合使用两种使用方式 以取得最满意的效果,二、OMA中的公共服务 1、COS设计原则 2、COS发布过程 3、COS体系结构 4、COS的调用式使用方式,建立在CORBA 概念之上 接口与实现分离 对象引用的类型由接口指定 客户依赖于接口而不是实现 使用多继承接口 服务是基

9、本的、灵活的(简单、专注) 每个服务专门 用于解决一个问题 复杂性控制在解决该问题的范围之内 多个服务可以结合 以提供更强的功能,1、 COS设计原则,服务具有一般性 服务不依赖于客户对象的类型 也不依赖于请求中传送的数据类型 服务实现可以是本地的或远地的 COS也是一种CORBA对象 具有IDL接口 具有位置灵活性 服务质量是实现特征 所设计的服务接口允许不同的服务实现 依赖于特定环境中对服务质量的需求,一个服务通常包含多个对象 服务通常被分解为多个不同的接口 它们为不同的客户提供不同的视图 使用回调接口 服务经常使用回调接口 回调接口: 客户提供的、供服务器调用的接口,服务器,invoke

10、,invoke,callback,不存在全局标识符空间 部分服务需要标识符来标记并区分各种元素 但不依赖于全局标识符,服务,标识符,2、COS发布过程,1993: COSS 1(4个) 命名 (Naming) 为运行于ORB上的对象提供查找其它对象的机制 生命周期 (Lifecycle) 提供对象的创建、复制、传送、删除等机制 事件 (Event) 为对象提供动态地注册或注销特定事件的机制 持久 (Persistent) 为对象提供超过其创建者(客户)生命期的机制,1994: COSS2(4) 关系 (Relationships) 提供显式表达实体与关系的机制 事务 (Transactions

11、) 提供支持事务处理的机制 并发 (Concurrency Control) 提供支持多个对象共享资源的机制 外部化 (Externalization) 提供将对象进行外部化与内部化的机制,1995:COSS3(2) 安全 (Security) 为系统提供在分布式环境下的安全机制 时间 (Time) 为系统提供维持单一时间的机制,1995:COSS4(3) 许可 (Licensing) 为服务器 (Producer) 提供控制使用内部属性的机制 属性 (Properties) 提供动态地将有名属性与一个系统外对象关联起来的机制 查询 (Query) 允许用户与对象调用其它对象集合上的查询,19

12、96:COSS5(3) 交易 (Trading) 提供匹配对象功能的机制 集合 (Collections) 提供操作一个对象组中对象的机制,3、COS体系结构:COSA COS之间的依赖关系,命名,生命周期,外部化,持久,并发,事务,安全,事件,许可,关系,查询,集合,交易,时间,属性,对象中直接包含调用公共服务接口的代码 使用起来比较直接、灵活 但存在明显的不足之处: (1)系统业务逻辑代码与公共服务调用代码混杂在一起 结构不清晰 (2)调用者需要学习大量的公共服务接口 开发起来比较复杂 (3)当调整系统的约束时需要修改系统的源代码 难度较大,4、COS的调用式使用方式,J2EE没有十分明显

13、地提出公共服务的概念 但J2EE涉及的底层接口显然是针对公共服务提出的 而且这些接口基本上是对OMA中公共服务接口的精简 因此J2EE中是有公共服务的 OMA中的公共服务主要支持对象 而J2EE中的公共服务主要支持EJB构件,四、J2EE中的公共服务,构件容器解决了下列问题: 如何管理构件生命周期 如何支持构件的持久性 如何保持构件之间的关系等 因此不需要为构件定义专门的生命周期服务 持久性服务 关系服务等 但需要通过公共服务支持: 如何查找构件 如何保证系统的可靠性 如何保证系统的安全性 如何访问数据库等系统资源 如何与显示系统连接等等,1、J2EE中的公共服务接口 l 查找服务接口(JND

14、I:Java Naming& Directory Inteface) 查找服务接口是命名与目录访问的标准接口 用于定位构件 包括API与SPI两部分 l事务服务接口(JTA:Java Transaction API) 事务服务接口也包括两部分: 构件容器和构件用来声明事务边界(API) 事务管理器和资源管理器之间的接口(SPI) l安全服务接口 安全服务接口主要是指 Java 认证与授权服务(JAAS)提供的接口,l消息服务接口( JMS:Java Messaging Service) 提供可靠的 点到点(point-to-point) 以及发布订阅(publishsubscribe)消息模型

15、 l邮件服务接口(Java Mail 1.1和JAF 1.0) 用于从Web构件和EJB构件发送脚本的Internet邮件消息 J2EE平台包括JavaMail API和JavaMail SPI JAF是指Java Activation Framework,即Java活动框架 支持不同的MIME类型以支持JavaMail的功能 l资源访问服务接口 向Connector Architecture请求的接口 是将访问EIS的资源适配器插装到任何J2EE产品的 SPI Connector architecture定义了 J2EE服务器与资源适配器之间的系统级合约,OMA仅提供调用式的公共服务使用机制

16、 J2EE不仅提供调用式的公共服务使用机制 还支持声明式的公共服务使用机制 在J2EE中 系统中的构件由容器进行严格的封装 构件代码一般不直接包含调用公共服务接口的代码 系统组装、部署者负责对所需公共服务的方法进行声明 构件容器在运行过程中负责对公共服务接口的调用 构件开发人员不仅不必关心公共服务的实现 甚至可以不必关心公共服务的存在,2、J2EE的声明式使用方式,构件与公共服务的关联是由系统组装、部署者完成的 由于应用系统的约束往往特定于具体的应用环境 因此由对应用环境熟悉的组装、部署者 完成系统约束的实现更为合理 基于J2EE的应用系统组装 是一种 以基于存储态目标码形态构件为组装对象的组

17、装技术 是一种基于声明的组装技术 不仅考虑构件之间的不同关联方式 还考虑构件与公共服务之间的关联方式,五、应用系统组装,1、什么是组装,组装具有如下的特征: 1)依赖于构件模型 构件的开发者与组装者必须对什么是构件有一致的约定 否则组装人员必然无法进行组装过程 2)组装者仅需要了解构件的规约(不必掌握构件的实现) 如果为实现组装必须分析构件实现 将无法构造大型的系统 3)需要考虑公共服务 这也是大型软件系统的特点所决定的 在这方面,声明式的公共服务支持机制显然更有利 因为基于这种机制 可以在不修改构件代码的前提下关联构件与公共服务,如何组装应用系统?,应用系统组装是 在构件与构件之间 以及构件

18、与公共服务之间建立起有效的关联 从而构成满足用户需求的应用系统的过程 组装形式多种多样 可以对各种组装从 技术领域 应用领域 两个维度进行分类,2、特定于技术领域的组装,应用系统组装定义中的3个方面 都可以作为进一步划分特定于技术领域组装方法的标准 构件的形态划分 基于源代码形态构件的组装 基于存储态目标码形态构件的组装 基于运行态目标码形态构件的组装 构件之间的关联方式划分 构件与公共服务之间的关联方式划分,1)根据构件的形态划分,l 基于源代码形态构件的组装 该类组装在源代码编写阶段或者源代码编译阶段完成 允许在组装过程中改动构件的实现 例如:面向对象程序中的继承技术 组合技术 Mixin

19、技术 等都在代码编写阶段完成 而面向侧面的编程(Aspect Oriented Programming:AOP) 则在代码编译阶段完成 这种组装方式灵活性强 是早期使用较多的组装技术 但修改一个构件需要了解的细节很多 而且容易出错,l基于存储态目标码形态构件的组装 该类组装在系统链接等阶段完成 不允许在组装过程中改动构件的实现 但可以对构件进行定制 以适应应用环境的需要 例如:基于脚本的组装技术 基于声明的应用系统组装 等 这种组装方式的构件开发者可以不必关心系统的约束 而组装与部署者则不必关心构件的实现 仅根据构件的描述进行组装,l基于运行态目标码形态构件的组装 该类组装意味着在构造一个新系

20、统时 所需要的构件已经处于运行状态 Web Service需要这样的组装技术 网络服务流程语言(Web Services Flow Language:WSFL) 是朝这个方向努力的重要结果。 这将是向最终用户编程(End-user Programming) 迈出的重要一步,2)根据构件之间的关联方式划分 单机环境下的应用程序中 构件都分布在相同的结点上 构件之间的关联最终实现为基于指针进行的调用语句 传统组装技术基本上解决了这种方式的关联 网络环境下的应用程序中 不同的构件可能分布在相同的结点上 也可能分布在不同的结点上 因此必须考虑不同结点上构件之间的互操作问题 这是当前组装技术需要面临的问

21、题,3)根据构件与公共服务之间的关联方式划分 在组装技术研究的前期 人们主要关注于构件与构件之间的关联 较少考虑公共服务问题 近年来的组装技术逐步认识到公共服务的重要性 大多数开始考虑构件与公共服务之间的关联问题 例如:面向侧面的编程 基于应用服务器的组装技术 等等,当在一个具体的应用领域内开发多个系统时 往往可以从中提炼出领域的共性与变化性 并将其实现为一个面向领域的框架系统 在组装一个具体系统时可以充分利用这个框架系统 框架是某个应用领域中对各个应用系统的再次抽象 公共服务一般与需求中的功能不存在直接关系 而与需求中的约束有关 框架一般实现领域需求中的公共功能 还可能包含对需求中的约束的实

22、现,3、特定于应用领域的组装,4、基于EJB构件的组装,组装特点 基于EJB构件的组装是一种特定于技术领域的组装技术 它主要考虑的是存储态目标码的构件 可以分布在网络环境下 并且考虑构件与公共服务之间的关联关系 声明是一种逻辑上的组装 描述了被组装体之间 以及被组装体与目标运行环境之间 在运行时刻将建立的关系 当应用系统被加载并转化为运行态时 需要利用声明进行组装的物理实现 即在内存中将这些关系进行实现,组装结果结构:, TheOrder com.sun.j2ee.blueprints.customer.order.ejb.OrderHome com.sun.j2ee.blueprints.c

23、ustomer.order.ejb.Order com.sun.j2ee.blueprints.customer.order.ejb.OrderEJB Bean java.lang.Integer False ejb/account/Account Entity com.sun.j2ee.blueprints.customer.account.ejb.AccountHome com.sun.j2ee.blueprints.customer.account.ejb.Account TheAccount jdbc/EstoreDataSource javax.sql.DataSource Container , TheOrder Remote getDetails Required TheOrder Remote getAccount Required ,其中,各个元素的含义分别为: l ejb-name 构件的名字 l home

温馨提示

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

最新文档

评论

0/150

提交评论