Programming 版 (精华区)
发信人: lofe ()感激生活(), 信区: Programming
标 题: 全面理解COM+ 5
发信站: 哈工大紫丁香 (Sun Sep 3 08:13:52 2000), 转信
欢迎加入5ADs.com, 0.60元/点击!
CSDN主页
Visual C++ Visual Basic Delphi 文件格式 网友文集 软件发布 专
家门诊 精品图书 人才市场
客户程序仍然可以按通常的方式创建远程对象,在CoCreateInstanceEx函数中指定路由
器机器名,当创建成功之后,它得到的对象实例运行在当前负载最轻的服务器上。路由
器检查COM+目录,看请求创建的组件对象是否支持负载平衡,如果是,则它根据路由算
法,把创建请求路由到负载最轻的服务器上。然后,应用群集中的服务器接收到创建请
求之后,它就创建对象,并把对象引用直接返回给客户机。因此,一旦对象已经被成功
创建,那么客户与对象之间的连接是直接进行的,而不必再通过路由器。
COM+应用程序的负载平衡特性并不需要编写代码来支持,客户程序和组件程序都可以按
通常的方式实现。因此,获得负载平衡特性不是一种程序设计和开发的行为,而是一种
配置行为,通过配置实现分布式应用程序的负载平衡。当然我们在编写负载平衡组件时
,要避免使用与当前机器环境相关的信息,比如当前机器的名字或者依赖与本地机器上
某个路径下的某个文件,等等。
4.内存数据库(IMDB)
COM+的内存数据库(In Memory Database)服务是一个全新的服务,它用于保存应用的非
永久状态信息。我们知道,对于以数据为中心的应用软件,为了提高系统的运行效率,
它应该尽可能让更多的数据驻留在内存中,尤其是客户程序频繁访问的数据信息。IMDB
是一个驻留在内存中的支持事务特性的数据库系统,它可以为COM+应用程序提供快速的
数据访问。
IMDB的基本功能在于优化数据查询和数据获取,它可以装载后台数据库系统中的数据表
,也可以装载应用程序的非永久数据信息。使用IMDB的最典型的例子是Web应用,它把客
户频繁访问的数据信息放在IMDB中,以便成百上千的客户得到快速的响应。因为物理内
存容量越来越大(在机器上安装2GB物理内存已经成为现实),并且价格越来越便宜,所以
通过IMDB,我们只要增加物理内存就可以提高系统的响应速度,而且把频繁访问的数据
从数据层移到业务层可以有效地减少网络流量。图9给出了基于IMDB的Web应用基本结构
。
图9 基于IMDB的Web应用结构示意图
IMDB的接口为OLE DB和ADO,所以组件对象可以通过这些标准接口访问IMDB。由于IMDB是
内存中的数据库,所以IMDB只对本机器上的COM+组件有效,也就是说,IMDB不支持分布
式概念,并且多个IMDB机器不能装入同一个数据表,如果多个组件要共享IMDB中的信息
,那么这些组件必须运行在同一台机器上。
IMDB以NT系统服务的形式运行在服务器上,在服务启动时,IMDB从后台数据库中把所有
指定的数据表装入到共享内存中。IMDB以整个数据表为单位装载数据,如果内存不够,
装不下整个表,那么IMDB会产生错误。组件对象通过进程内代理对象访问IMDB中的数据
表。因为IMDB为了使数据访问尽可能快速,它并没有实现SQL查询处理器,所以我们不能
使用SQL命令访问IMDB数据,只能通过标准的ISAM技术访问IMDB数据,也就是说我们必须
通过索引访问数据。
IMDB不仅可以把数据表缓冲起来,它也可以管理应用系统的非永久状态信息,如果运行
在同一台机器上的不同组件需要共享大量的信息,那么选择IMDB是一个理想的解决方案
。
5.对其他服务的增强
前面介绍的几个系统服务是COM+针对分布式应用新增加的服务,这些服务以及其他一些
原先在MTS中已经提供的服务合起来构成了COM+的底层服务体系。我们知道,COM已经提
供了组件对象与客户程序之间的基本通讯过程,包括对象创建、跨进程机制、接口管理
等等,而COM+提供的底层服务则着眼于一些高层次的应用需求,特别是构建大型软件系
统或者分布式软件系统需要支持的一些特性。下面对COM+在MTS基础上增强的一些服务作
一简要说明。
(1) 事务特性。
事务允许组件可以把一组独立的操作形成一个整体操作,事务操作要么成功,要么失败
。COM+仍然支持MTS的事务语义,通过SetAbort或SetComplete完成事务操作。COM+还支
持其他的事务操作模式,如果一个对象被标为“AuotAbort”,那么在事务操作过程中,
若发生异常,则系统自动调用SetAbort。同样地,如果一个对象被标为“AutoComplete
”,那么在每一个方法调用之后,除非此方法显式调用了SetAbort,否则系统会自动调
用SetComplete。而且COM+还支持BYOT(Bring Your Own Transaction),即允许COM+组件
参与非MTS事务处理环境管理的事务。
(2) 安全性。
COM+的安全模型仍然沿用了MTS的基于角色的安全模型,根据用户的角色访问应用的有关
功能模块。这种安全模型需要开发人员与管理人员协同完成,在开发阶段,开发人员负
责定义各种角色,并且在实现组件功能时,只允许指定角色的用户才可以执行这些功能
;在配置阶段,管理员负责为所有的角色指定有关的用户帐号。COM+扩充了MTS安全模型
,它允许开发人员和管理员指定到方法一级的安全控制,在MTS安全模型中,我们只能在
MTS包一级指定安全角色。通过COM+对象环境信息,COM+的安全模型更为细致,比如,它
允许开发人员控制每一个接口、或者每一个方法如何扮演客户,等等。
(3) COM+对象池。
对象池是指把对象的实例保留在内存中,以便当客户请求创建对象时可以马上用到这些
对象。对象池如同IMDB一样,完全是出于效率考虑的原因,用来建立大型的应用系统。
对象池的概念在MTS 2.0中已经被引入了,因为MTS组件的IObjectControl接口的三个成
员函数Activate、Deactivate和CanBePooled用于对象池的管理。但是MTS 2.0实际上并
没有支持对象池,也就是说,不管对象是否支持对象池缓存操作,它的IObjectControl
::CanBePooled函数永远不会被调用到。COM+继承了MTS对象池的概念,并且真正实现了
对象池的功能。
(4) 管理服务。
在本文第一部分我们已经看到了COM+管理程序,它代替了MTS管理程序(MTS Explorer)和
DCOM配置程序(DCOMCNFG.EXE)。对于多层结构应用,COM+管理程序是个不可缺少的工具
,应用系统的安全特性以及事务特性等基本配置都需要通过管理程序实现。由于MMC界面
操作简单、直观,所以管理员无须学习其他的管理工具,就可以配置所有的应用系统。
而且COM+管理程序支持脚本语言,因此,开发人员和管理员可以创建一些脚本代码以便
实现管理工作的自动化。COM+还引入了一个新的“ApplID”,它是一个128位GUID,标识
一个与一组属性值相联系的CLSID。通过“ApplID”,管理员可以为应用配置和维护多个
版本。
这一部分重点讨论了COM+的各个系统服务,尤其是COM+新增加的几个系统服务,这些系
统服务使COM+更加适合于分布式应用的开发。有些系统服务并不需要COM+应用通过编程
来获得,比如负载平衡和队列组件服务等;而有的服务则可以简化编程模型,比如事件
服务;其他有一些服务可以用来提高系统的性能,比如内存数据库、对象池等。
三.COM+应用开发
在介绍了COM+的基本概念以及系统服务之后,第三部分我们讨论COM+应用开发的一些问
题。首先我们讨论从COM转向COM+对于应用开发模式带来的变化,然后介绍基于属性的C
++编程语言。
1.应用开发支持
COM规范的一个重要特征是它定义的COM接口与开发语言无关,因此我们可以在各种开发
语言中实现COM对象或者使用COM对象,事实也确实如此。但是,我们可以发现,虽然CO
M与C++的二进制结构最为接近,但我们在C++语言中实现COM对象并不轻松,编写一个C+
+类与实现一个COM对象有很大的差别,即使使用了MFC或者ATL这样的类库或模板库,我
们仍需要学习COM的一些底层知识,否则难以编写出正确无误的组件程序。
<<<上一页 返回 下一页>>>
----------------------------------------------------------------------------
----
美达美简介 | 邮购专栏 | 给我们写信 | 程序员大本营 | 英语步步高
美达美科技有限公司 版权所有 ?1998-1999
--
※ 修改:.haojs 于 Sep 3 08:11:28 修改本文.[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)
页面执行时间:3.678毫秒