Programming 版 (精华区)

发信人: lofe ()感激生活(), 信区: Programming
标  题: 全面理解COM+ 3
发信站: 哈工大紫丁香 (Sun Sep  3 08:13:27 2000), 转信

欢迎加入5ADs.com, 0.60元/点击!
 CSDN主页
    Visual C++   Visual Basic   Delphi   文件格式   网友文集   软件发布   专
家门诊   精品图书   人才市场
COM+一方面提供了许多新的服务和一个一致的管理环境,另一方面它支持说明性编程模
型(declarative programming model),也就是说,开发人员可以按尽可能通用的方式开
发组件程序,把一些细节留到配置时刻再确定。举例来说,我们开发一个COM+组件,它
支持负载平衡特性,但是我们在开发组件的时候,并不确定它是否使用负载平衡特性,
而把是否支持负载平衡特性留待配置时刻再作决定。有的应用可能会需要负载平衡特性
,而有的应用可能并不需要,我们可以通过COM+管理程序配置组件的属性来决定组件是
否支持负载平衡特性。MTS安全模型实际上是一个典型的说明性编程技术,它把组件的安
全角色信息留到配置时刻再给出确切的定义,而非编程时刻。COM+继承了MTS的安全模型

利用COM+的服务和管理工具,以及随后发布的一些开发工具,开发一个COM+组件要比开
发一个COM组件容易得多,因为COM+组件实际上是建立在COM+系统服务基础上的应用程序
,我们可以避免底层繁琐的细节处理。通过COM+系统服务,我们在获得可靠性的同时,
也使我们的组件或者应用程序更趋于标准化,在更广泛的范围内体现组件或者应用的多
态性。
3.对象环境
COM+组件的可管理性和可配置性是如何获得的呢?如同MTS组件一样,COM+为每一个对象
提供了一个对象环境(Object Context),COM+系统可以在创建COM+对象的时候为其分配
一个环境对象,这种技术也被称为截取(intercept),下面的步骤可以进一步说明截取的
概念:
(1)    组件对象通过说明性属性(declarative attributes)指定它的一些基本要求;
(2)    当客户程序调用CoCreateInstance函数时,COM+系统检查客户代码是否运行在与
对象类兼容的对象环境中;
(3)如果客户代码的运行环境与对象类所要求的兼容,那么不必使用截取技术,直接创建
对象并返回对象的接口引用;
(4)    如果不兼容,那么CoCreateInstance函数切换到一个与对象类兼容的环境中,然
后创建对象并返回一个代理对象;
(5)在以后的接口方法调用过程中,代理对象在调用前和调用后都要做一些处理以便方法
的运行环境能够满足对象的要求。
COM+引入了环境(context)的概念,它是指共享同一套运行要求的对象集合。由于不同的
对象类可能使用了不同的配置信息,所以一个进程通常包含一个或多个环境,这些环境
的配置互不兼容。所有无配置信息的对象都驻留在调用方的环境中。每一个环境都有一
个对象,即对象环境,运行在此环境中的对象可通过CoGetObjectContext API函数得到
此对象环境,利用对象环境的IObjectContextInfo接口可以访问到环境的属性信息。
COM+的对象引用即客户拥有的对象接口指针与环境相关,所以我们不能简单地把对象引
用从一个环境传递到另一个环境。当客户从一个环境调用到另一个环境中的对象时,中
间必须经过代理对象和存根代码,由代理对象截取调用,负责进行环境切换,这个过程
类似于COM的跨进程列集(marshaling)处理。如图5所示。
图5 跨环境调用示意图
从图5我们可以看出,环境与COM线程模型中的套间(apartment)非常类似,当对象引用(
即对象接口指针)从一个环境传递到另一个环境时,它也要经过列集(marshaling)处理,
即调用CoMarshalInterface和CoUnmarshalInterface函数。这样才能保证客户代码和对
象分别在自己的环境中执行,对于支持事务特性、安全特性或其他特殊要求的应用,这
是很重要的。
虽然跨环境的调用必须经过代理和存根代码,但是这并不意味着需要经过线程切换,这
是环境与套间的重要区别。在跨套间调用过程中,影响性能的主要因素在于线程切换,
而不是参数列集(marshaling)和散集(unmarshaling)处理,因此跨环境调用比跨套间调
用的效率可能要高得多。COM+引入了环境概念,但套间的概念仍然存在,两者的区别在
于,套间是线程模型的基本单元,而环境则是列集机制的基本边界。环境和套间没有包
含关系,一个环境中的对象可以运行在不同的套间,此时跨套间调用也必须经过代理对
象;一个套间中的对象也可以包含多个环境对象,此时跨环境调用也必须经过代理对象

从以上对COM+的介绍我们可以看出,COM+的底层结构仍然以COM为基础,但在应用方式上
则更多地继承了MTS的处理机制,包括MTS的对象环境、安全模型、配置管理等。但COM+
并不是对COM和MTS进行简单的封装,它也引入了许多新的内容,正是这些新特征使得CO
M+更加适合于企业应用的组件对象模型,这些新特征通过一组系统服务来体现,下一部
分介绍这些系统服务。
二.COM+系统服务介绍
COM+的系统服务充分体现了COM+的特征,通过这些系统服务,我们可以很容易地开发出
多层结构的应用系统,因为这些系统服务本身已经满足了多层应用的一些基本要求。CO
M+以系统服务的形式为应用提供了许多新特性,这有多方面的好处,首先,客户或者组
件程序可以直接利用这些系统服务,避免了底层的细节处理,减少开发成本,降低代码
量,同时也减小了犯错误的可能性;其次,有一些系统服务涉及到较复杂的逻辑,可能
要访问底层的系统资源,应用层很难实现这些系统服务;另外,使用系统服务可增强可
靠性,因为这些系统服务已经经过严格的测试,应用系统要获得同样的可靠性需要很昂
贵的代价。
COM+的系统服务有的从MTS继承过来,有的是新增加的。这一部分重点对新增的一些系统
服务作初步的介绍,包括队列组件、负载平衡、内存数据库和事件服务,最后介绍其他
一些在MTS中已经引入的、但COM+又增强了的系统服务,包括事务、对象池、安全模型以
及管理特性。
1.COM+队列组件
我们知道,COM客户与远程组件之间的交互是基于RPC连接的,客户连接到一个组件对象
,请求指定的接口,然后通过接口指针执行同步调用。虽然COM也允许异步调用,但客户
与组件的生存期必须保持一致,调用必须在连接有效期范围内进行。
COM+除了支持这种基于RPC连接的运行方式,它还支持另一种运行模式,我们称为基于消
息的通讯过程,它可以有效地把客户与组件的生存期分离开。这种模式通过COM+的队列
组件服务实现,图6是队列组件的基本模型结构。
图6 队列组件模型结构图
<<<上一页  返回  下一页>>>
----------------------------------------------------------------------------
----
美达美简介 | 邮购专栏 | 给我们写信 | 程序员大本营 | 英语步步高
美达美科技有限公司 版权所有 ?1998-1999

--
※ 修改:.haojs 于 Sep  3 08:11:01 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: bbs.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: haojs.bbs@bbs.whnet.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.765毫秒