DCOM与CORBA

    xiaoxiao2025-05-02  15

    1、DCOM: 1992 月,微软发布 Windows 3.1 ,包括一种被称为 OLE ( Object Linking and Embedding )的机制 这允许一个程序动态链接其 库来支持其他功能 ,如将一个电子表格嵌入 Word 文档 OLE演变成了 COM ( Component O均ect Model 一个 COM 对象是一个二进制文件 使用 COM 服务的程序来访问标准化接口的 COM 对象,而不是其内部结构 COM 对象用全局唯一标识符( GUID) 来命名,用类的 来识别对象的类 可以有多种方法来创建 COM 对象,如 CoGetlnstanceFromFile COM 库在系统注册表中查找相应的二进制代码( DLL 或可执行文件)来创建对象,并给调用者返回一个接口指针 COM 的着眼点是在同一台计算机上不同应用程序之间的通信需求DCOM ( Distributed Component Object Model )是 COM 的扩展,它支持不同的两台机器上组件间的通信,而且无论它们是运行在局域网 、广域网,还是 Internet 借助 DCOM 的应用程序将能够进行任意空间分布 DCOM 1996 年在 Windows NT 中引人,后来更名为 COM 由于DCOM 是为了支持访问远程 COM 对象,需要创建一个对象的过程,此时需要提供服务器的网络名及类 ID 微软提供了一些机制来实现这一点 最透明的方式是远程计算机的名称固定在注册表(或DCOM 类存储)里,与特定类 相关联 采用这种方式之后 应用程序便不知道它正在访问一个远程对象,并且可以使用与访问本地 COM 对象相同的接口指针 另外,应用程序也可指定一个机器名作为参数由于 DCOM COM 这个组件技术的无缝升级,所以能够从现有的有关 COM 的知识中获益,以前在 COM 中开发的应用程序、组件、工具都可以移入分布式的环境中 DCOM 将屏蔽底层网络协议的细节,你只需要集中精力于应用DCOM 最大的缺点是,这是微软独家的解决办法,但在跨防火墙方面的工作做得不是很好(大多数 RPC 系统也有类似的 题),因为防火墙必须允许某些端口来让 ORPC DCOM 通过 2、CORBA 传统的远程过程调用的机制存在 些缺陷 例如,如果服务器没有运行,客户端是无法连接到远程过程进行调用的 管理员必须要确保在任何客户端试图连接到服务器之前将服务器启动 如果个新服务或接口添加到了系统,客户端是不能发现的 最后,面向对象语言期望在函数调用中体现多态性,即不同类型数据的函数的行为应该有所不同,而这点恰恰是传统的 RPC 所不支持的 COREA ( Common Object Request Broker Architec )就是为了解决上面提到的各种问题而出现的 CORB 是由 OMG 组织(对象管理组织)制定的一种标准的面向对象应用程序体系规范或者说 CORB 体系结构是 OMG 为解决分布式处理环境( DCE )中,硬件和软件系统的互连而提出的一种解决方案 OMG 成立于 1989 年,作为一个非营利性组织,致力于开发在技术上具有先进在商业上具有可行性并且独立于厂商的软件互联规范,推广面向对象模型技术,增强软件的可移植性( Portability 可重用性( Reusability )和互操作性( Interoperability 该组织成立之初,成员包括 Unisys Sun Cannon Hewlett-Packard Philips 等在业界 有声誉的软硬件厂商,目前该组织拥有 800 多家成员CO RB 体系的主要内容包括以下几部分 对象请求代理( Object Request Broker, ORB ):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础对象服务( Object Services ):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域 主要的 CORB 服务有:名录服务( Naming Service 事件服务( Event Service 生命周期服务( Life Cycle Service )、关系服务( Relationship Service )及事务服务( Transaction Service )等 这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂 公共设施( Common Facilitit ):向终端用户提供一组共享服务接口,如系统管理 组合文档 和电子邮件等 应用接口( Application Interfaces ):由销售商提供的可控制其接口的产品,相应于传统的应用 层表示,处于参考模型的最高层 领域接口( Domain Interfaces ):为应用领域服务而提供的接口,如 OMG 组织为 PDM 系统制 定的规范 当客户端发出请求时·, ORB 做了如下事情 在客户端编组参数 • 定位服务器对象 如果有必要的话,它会在服务器创建 个过程来处理请求 如果服务器是远程的,就使用 RPC socket 来传送请求 • 在服务器上将参数解析成为服务器格式 • 在服务器上组装返回值 如果服务器是远程的,就将返回值传回 • 在客户端对返回结果进行解析 IDL ( Interface Definition Language )用于指定类的名字 性和方法 它不包含对象的实现 IDL 编译器生成代码 处理编组 解封及 ORB 与网络之间的交 它会生成客户机和服务器存根 IDL 是编程语言中立的, 也就是说跟具体的编程语言实现无关,支持包括 ++ Java Perl Python Ada COBOL Smalltalk Objective LISP 等语言。一个示例 IDL 如下所示 Module StudentObject { Struct Studentinfo String name; int id; float gpa ; exception Unknown { } ; interface Student { Studentinfo getinfo(in string name) raises(unknow口); void putinfo (工 Studentinfo data); IDL 数据类型包括以下几种 • 基本类型 long short string float 构造类型: struct union 、枚举 序列 • 对象引用 any 类型: 一个动态类型的值 编程中最常见的实现方式是通过对象引用来实现请求 下面是 个使用 IDL 的例子 Student st= … II 获取对象的引用 try { Studentinfo sinfo = st.getinfo (” Fred Grampp”); catch (Throwable e) { //错误处理 CORB 规范中,没有明确说明不同厂商的中间件产品要实现所有的服务功能,并且允许厂商开发自 己的服务类型 因此,不同厂商的 ORB 产品对 CORB 服务的支持能力不同,使我们在针对待开发系统的功能进行中间件产品选择时,有更多的选择余地当然 CORB 也存在很多不足之处尽管有多家供应商提供 CORB 品,但是仍找不到能够单独为异种网络中的所有环境提供 现的供应商 不同的 CORB 实现之间会出现缺乏互操作性的现象,从而造成 些问题 而且,由于供应商常常会自行定义扩展 co 又缺乏针对多线程环境的规范,对于像 C++这样的语言,源码兼容性并未完全实现CO RB 过于复杂,要熟悉 CORB ,并进行相应的设计和编程, 需要很多个月来掌握,而要达到专家水平,则需要好几年

    最新回复(0)