资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
Part1.组件技术组件技术 组件技术产生的原因组件技术产生的原因 1)体现为独立的整体系统,同一团队,同一语言,同一机器,开发过程分析、 设计、 实现发布前集成了广泛的应用特性, 特性不能独立的被删除、 升级和替换。 难以被复用,版本升级繁琐,必须整体升级 2)新技术的冲击 3)面向对象范型不足 使用和实现进一步分离 组件技术的优点组件技术的优点 提高开发速度 降低开发成本 提高软件质量 增加软件的灵活性 降低软件的维护费用 接口的定义及作用接口的定义及作用 接口是有序排列的一组函数指针,可以简单理解为一组函数,每一个接口相 当于该组件对外的一个窗口 对中间件的理解(结合对中间件的理解(结合 EJB) 中间件是处于应用程序及其所在系统的内部工作方式之间的软件。它提供了 与具体业务无关的功能,如 EJB 容器提供了远程访问、事务处理,与数据库中 的数据同步等功能。所以中间件是用统一的形式实现与业务无关的功能,从而简 化了编程。 中间件独立于操作系统和软硬件平台及软件, 与具体的编程语言无关。 Part2.COM 组件组件 COM 组件的目标组件的目标 易于动态组装 组件实现与语言无关 可以以二进制发布 支持向前兼容 DCOM 支持分布式计算 COM 接口有哪些规定(规范)接口有哪些规定(规范) 1)IUknown:所有组件都有一个称为 IUknown 的接口,该接口中依次给出 的三个函数是:QueryInterface(对组件的接口进行查询,若存在某个接口,客户 可以获得该接口中的服务) , QueryInterface(int interfaceID, void*pValue)第一个参数为接口 ID,第二 个存放返回值(支持接口约定的实体) AddRef,Release 通过计数器共同完成引用计数功能(为何用计数器?组件 使用时需载入内存,又可以被多个客户使用,无论哪个用户把它载入内存,为了 知道何时可以从内存中卸载,需要一个计数器来记录组件的使用情况,实际可以 为每个接口安排一个计数器,当一个组件所有接口计数器都为 0,就可以卸载 了) 。一个组件可以同时被多个客户所使用,卸载时需要确定没有人使用,即计 数器为 0 时 2)其他接口:一个组件的其他接口可以看作 IUknown 接口的子接口,即其 它任何一个接口的前三个函数与 IUknown 接口中的三个函数相同。客户获得一 个接口后,可以查询其它接口是否存在。每个接口能够进行引用计数。 3)不变性:一旦公开了某一个接口,该接口将永远不能发生改变。包括函 数在接口中的顺序。改变接口部分的唯一方式是:为组件增加新的接口。目的是 兼容。版本升级不影响老客户。每一个接口有唯一的接口标识(ID) 。 编写编写 COM 组件的步骤组件的步骤 1)定义接口,在接口中声明组件中需要使用的方法和变量,声明方法使用虚函 数声明,定义的接口都要继承 IUknown。 2)定义实现接口方法的抽象类。实例化类之后,才会对已经实例化的类对象分 配内存空间。对类中接口的引用,可以通过对象指向接口的指针来调用。 3)以动态链接库 DLL 的形式,定义指向是实例化类对象的指针,并可以向调用 它的接口返回标识, 生成模块, 定义文件, 并在客户可以获取某个组件接口之前, 将 DLL 装载到过程空间中并创建此组件。 4)创建类厂。在类厂中使用 CreateInstance 方法连接到动态链接库接口,并用指 针指向这个接口。用 DLLGetClassObject 函数创建类厂,并根据类厂的接口标识 返回类厂指针。 5)实例化类厂。 使用 CoCreateInstance 实例化类厂, 即生成一个实例类厂的对象, 这个对象是可以被用户调用的。 简述利用动态链接库实现简述利用动态链接库实现 COM 组件的一般过程:组件的一般过程: 1)定义各业务接口,各接口都能继承 IUnknown 接口 2)为每个组件和接口分配一个唯一的标识符 3)实现各业务接口的功能 4)定义类厂接口并分配唯一标识符(此接口继承自 IClassFactory 接口) 5)实现类厂接口以实现动态生成组件 6)编写 DLL,在 DLL 函数中有注册组件到注册表的函数,取消注册的函数, 与类厂相连的函数。 使用动态链接库做组件的一般过程(拔高题)使用动态链接库做组件的一般过程(拔高题) 1)编写头文件,定义各种业务接口以及接口标识符,其他的接口需要继承 IUnknown 接口,包括类厂接口及 ID。这个文件需要客户知道(客户知道组件的 接口) 2)实现定义好的业务接口,可以用一个类来实现所有接口,也可以每个类实现 一个接口,后者使用一个类聚合了每个接口的实现类,考虑到组件的自身复用问 题,可以预留一个 IUnknown 组件类型指针,指针是 0 时代表一般客户程序, 非 0 代表另一个复用自己的组件。也可以用已有组件代码直接拿过来实现复用。 3)实现类厂接口,实现 CreateInstance 方法,这个方法用来产生组件实例 4)编写 DLL,导出函数 GetClassObject 用来返回工厂实例(指针)DllMain 可以 显示如组件名称等信息。可能会用到注册表函数来注册组件等。 5)导出函数的设计 导出函数的设计(不准)导出函数的设计(不准) 导出函数就是已编写好的 COM 组件供客户程序使用的函数,定义导出函数 时需要在前面加上如 extern”C”_decispec(dllexport)声明,客户程序再通过导出函 数名获取此 dll 中的导出函数地址,赋予相同参数和返回值的方法指针。 类厂(类厂(IClassFactory)接口的作用)接口的作用 笔记版:提供了一种灵活的控制组件创建的方法,这种方法中组件由特定的 类厂创建:通过 CreateInstance(int interfaceID, void* pValue),而特定的类厂实 现了类厂接口,给出了 CreateInstance 的具体实现,客户使用接口指针,可决定 用特定的工厂来产生特定的组件,将不同组件的实例化延迟。 资料版: CoCreateInstance 函数是创建组件的时候使用最多的一种方法, 但是它的灵活 性不能够满足所有组件的需求, 它没有给客户提供一种能够控制组件创建过程的 方法,在建立好一个组件之后,无法控制将组件装载或检查客户是否具有权限。 因此需要引入类工厂以获得更高的灵活性。 CoCreatInstance 实际上并没有直接创建组件,用 CoCreateInstance 创建的组 件实际上是通过 IClassFactory 创建的, 类厂唯一的功能就是创建其他组件。 客户 可以通过类厂所支持的接口来对类厂创建组件的过程加以控制。 创建组件的标准 接口就是 IClassFactory。 客户可以通过类厂组件创建其他组件,类厂组件的唯一功能就是创建其它的 组件。 COM 组件如何区分不同组件实例组件如何区分不同组件实例 用户与组件交流是通过接口完成的,如果能确定两个接口是不是属于同一个 组件就能确定两个接口是不是同一个组件,而每个组件都有唯一的 IUnknown 接 口,利用 IUnknown 接口的值,用 QueryInterface 查询 IUnknown 接口,然后比较 pIUnk(pIUnk 分别为指向不同组件 IUnknown 接口指针)若相同则是同一组件, 若不同则是不同组件 COM 组件与模块的区别组件与模块的区别 模块:设计时的结构化分 组件:运行时的二进制代码 COM 组件是运行时的二进制代码,其一旦公布,其中已定义和实现的接口就不 能修改,模块可随时改动 Part3.CORBA 组件组件 IDL 编译器作用编译器作用 1)生成与编程语言相关的文件(IDL 文件,接口仓库) 2)生成客户桩文件 stub:把某个对象类型的 IDL 操作定义映射到例程 3)生成头文件 head:桩文件和框架文件都用头文件来定义结构和常量 4)生成服务器框架文件 skeleton: 服务器应用程序用 skeleton 把客户机操作映射 到服务器实现的方法上。通常是源代码形式 定义了某类对象的特征和行为,包括服务器能在这类对象上施加的操作 如何在如何在 IDL 工作基础上实现一个工作基础上实现一个 CORBA 组件(来自历年试题)组件(来自历年试题) Stub 和和 skeleton 生成原理,作用,理解生成原理,作用,理解 对客户桩的理解 客户 stub 是 IDL 接口的假实现,只是单纯的使用这种假实现,IDL 接口的完整 实现是由 CORBA 服务器实现的。 Stub 提供了在客户机应用程序中使用桩类型激 发时所需要的定义和其他与 CORBA 供应商有关的信息。 是程序激发请求时使用 的一套例程,它把一个对象类型的 IDL 操作定义映射到激发请求时要用的一套 与编程语言相关的例程 Skeleton: 1)框架包含把对象上的操作映射到合适的实现和方法上的必要信息。 2)框架把 BOA 的调用映射到所请求操作的特定实现的方法 3)提供 BOA 与完成在某个对象上各种操作的方法间的连接 4)通常由 OMG IDL 定义生成 CORBA 的静态激发(桩类型激发)的静态激发(桩类型激发)非重点非重点 (服务器(S) ,客户端(C)的每个交互都是基于 C 发送一个请求或 S 响应一个 请求。发送请求的过程称为“激发” ) 1)用 IDL 定义接口(.idl 文件) 2)将接口定义生成一个或多个客户桩(用 IDL 编译器) 3)把客户桩连接到客户机应用程序 4)得到请求所需对象的引用 5)从客户机程序中调用声明的客户桩 6)如果有结果,处理并使用它们 7)释放不再需要的对象占用的存储区 特征:支持同步和单向通信形式,不支持异步使用例程调用,只能用于客户桩编 译时就已完全可知的接口比动态激发快。 客户如何使用一个客户如何使用一个 COBRA 对象所提供的服务(有答案)对象所提供的服务(有答案) 构造构造 CORBA 客户机的一般过程客户机的一般过程 1)基于功能和界面等来设计和编写代码中的非 CORBA 部分 2)选择通信样式(同步、延迟同步或单向)和激发类型(桩类型、动态或两者 都选) 3)定义 IDL 接口 如果仅支持桩类型激发,生成客户桩并连入客户机 如果仅支持动态激发,将 IDL 代码装入接口仓库 如果两者都支持,做以上两项任务 4)编写激发请求代码并获取激发所需信息,引用,参数 5)编写成功请求的程序代码 6)编写错误处理或异常处理程序 7)如果客户机也是服务器,进行服务器编程处理 构造构造 CORBA 服务器一般过程服务器一般过程 1)决定实现所支持的激活策略 2)生成服务器框架 3)把框架和服务器应用程序及对象适配器连接起来 4)编写服务器初始化代码 5)编写代码通知 BOA 实现已经被激活 6)编写代码创建消息分发循环 7)编写方法支持框架中的实现,上下文,异常 8)编写代码冻结实现 9)编写关闭服务器代码 10)如果同时也是客户机,参照客户机过程 对象请求代理对象请求代理 ORB 连接应用程序、各种对象、CORBA 服务、CORBA 工具集的核心 把各种元素分割开,是 CORBA 实现分布式软件集成、即插即用的核心 ORB 是 CORBA 的 C/S 正式分离的主要机制,C/S 只要支持相同的接口定义 就可以独立开发 角色:作为客户机发送请求给服务器的中间件使 C/S 无须包含对方信息 ORB 负责:发现实现 让实现为接收请求做好准备(通知 BOA 执行操作) 进行数据通信需要带的各种机制 简述实现一个简述实现一个 CORBA 对象的一般步骤(来自历年试题)对象的一般步骤(来自历年试题) Part3.EJB 组件组件 中间件的理解(见中间件的理解(见 Part1) 什么是什么是 EJB 类、类、EJB 对象、对象、Bean 类、消息拦截(有答案)类、消息拦截(有答案) EJB 容器完成的一般性功能(作用)容器完成的一般性功能(作
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号