Download presentation
Presentation is loading. Please wait.
1
十八 COM+
2
COM 桌面应用 DCOM C/S应用 COM+ Services 分布式应用/企业应用
3
企业应用与COM+ 从桌面应用发展到企业应用、Web应用 企业应用特点: 大型、分布式、实现企业的关键业务 企业应用的挑战
关键业务:业务逻辑 基础设施:涉及到系统方方面面 开发、调试、测试、配置、维护 如transaction、security、event等 COM+对COM的增强和改进 增强了COM runtime library 增强了MTS(Microsoft Transaction Server) 事务服务、安全服务 提供了新的runtime服务 队列服务、事件服务、负载平衡、(内存数据库) COM+兼容COM,只是提供了更多的功能
4
管理控制 目录,配置 事务处理 MTS, DTC, RM, CRM 安全性服务 同步服务 控制并发访问,不需要转换线程或者使用消息队列排队(因为性能) 队列组件 异步的通讯,利用MSMQ作为通讯通道 事件服务 松耦合的事件机制 对象池 性能,高负载 即时(JIT)激活 可伸缩性
5
COM+的设计思想、目标 使程序员和用户把注意力和精力集中在业务逻辑上,而不是基础设施上 使组件尽可能地通用 编译时刻特性与运行时刻特性分离
客户和组件的透明性
6
COM+管理工具 Component Services snap-in 可以从 应用(Application) 即COM组件载体,DLL
组件(Component)即COM对象 接口 方法 等4个层次进行属性配置.
7
COM+ Catalog(COM+目录) COM+管理信息、系统数据库 COM+ Registration Database
COM+ Administration Library,支持脚本 组件服务snap-in管理工具就是该对象模型的一个功能缩影 用户可以通过COMAdminCatalog组件进入到对象模型中 ProgID:COMAdmin.COMAdminCatalog 所有的操作都可以使用代码来进行.包括安装卸载程序,配置各种属性等等.
8
COMAdminCatalog组件使用举例
Dim Catalog As new COMAdminCatalog Dim Applications As COMAdminCatalogCollection Dim Components As COMAdminCatalogCollection Dim AppObject As COMAdminCatalogObject ' get the Applications collection and populate it Set Applications = Catalog.GetCollection("Applications") Applications.Populate ' get the correct application, My Application For Each AppObject in Applicationss If AppObject.Name = "My Application" Then Exit For Next ' get the Components collection for My Application Set Components = Applications.GetCollection( "Components" , AppObject.Key )
9
COM+对于组件的要求 要求DLL形式的组件 要求自注册 DllRegisterServer、DllUnregisterServer
要求有typelib typelib既可以绑在dll上,也可以单独的文件 组件可以单独存在,不进行配置,即作为单纯的COM,不使用COM+所提供的各种服务. 以EXE方式存在的组件只能单独存在
10
COM+ Context(COM+环境) 对象所生存的COM+状态, 包括程序,组件,接口,方法的各种属性配置,比如事务性要求,安全性,并发性等等统称为对象的环境(Context) COM激活对象时,创建context 对象的环境与对象紧紧绑在一起 根据组件的属性(attribute)决定环境的状态 环境属性也是对象与客户之间的约定
11
环境由一个环境对象来表示,环境对象是一个COM对象,它支持如下接口
IObjectContext(老的接口,与MTS兼容) IGetContextProperties IObjectContextInfo IObjectContextState ISecurityCallContext 如何访问“环境对象” CoGetObjectContext COM对象在环境对象中生存,环境对象在套间中生存:
12
每一个对象属于一个环境, 不同的环境表征不同的属性. 每一个环境属于一个套间
COM对象,环境,套间,进程,线程的关系 每一个对象属于一个环境, 不同的环境表征不同的属性. 每一个环境属于一个套间 不兼容的环境之间的调用,将引发跨环境调用.截取(interception).列集,散集. 一个独立的客户程序使用“默认的环境”,即不包含任何事务,同步等属性. 环境C 套间Y 环境A 环境B 套间X 进程P 进程Q
13
同步(synchronization) 或者serialization STA对象不需要同步, MTA、TNA对象需要同步
COM+提供了“activity -based synchronization” activity:代表单个客户 执行任务的一组对象 相当于一个逻辑线程 每个activity都包含一 个进程范围内的锁 可以处理跨越机器 边界的嵌套调用
14
事务 事务的特性(ACID) Atomicity 要么所有的变化都有效,要么都无效 Consistency 状态一致性 Isolation
事务外部看不到事务的中间结果 Durability 缓存的中间结果要能“持久” DTC(Distributed Transaction Coordinator) 每个组件对DTC负责,DTC知道所有的组件 两阶段提交 准备和提交 对象表态:committing、aborting COM+ runtime提供了免费的DTC 组件与DTC的通讯 IObjectContext::SetComplete IObjectContext::SetAbortComplete 组件的属性设置
15
COM+ RM COM+ RM(Resource Manager) 知道当参与事务的对象改变它的状态时,该如何把资源的变化缓存起来
例如:各种数据库系统、MSMQ DTC两阶段提交过程 对象不参与提交过程,只是表态 准备阶段:RM把状态信息保存起来,保证不会失败 提交阶段:DTC通过RM提交事务 CRM. (Compensating Resource Manager)
16
COM+事务的用法(一)
17
COM+事务的用法(二)
18
COM+事务的用法(三) [ uuid(04CF0B76-1989-11D0-B917-0080C7394688),
helpstring("Account Class"), TRANSACTION_REQUIRED ] coclass CAccount { [default] interface IAccount; }; [ uuid(04CF0B7B D0-B C ), helpstring("MoveMoney Class"), coclass CMoveMoney { [default] interface IMoveMoney;
19
对象池与JIT activation 池组件 对象必须实现 IObjectControl接口 Activate Deactivate
CanBePooled 池组件满足以下条件: 线程模型不能为STA 可被聚合 不能聚合其他的池组件 资源利用 —— 可伸缩性 系统帮助回收资源 回收的价值:部分回收所占整体的比例,以及资源本身的重要性(比如数据库连接)
20
队列组件(Queued Components)
在分布式系统中, 同步、异步并存 企业活动中,电话、电子邮件、电话留言 通讯双方在时间点上的分离 例如:在off-line下写 ,然后放到outbox中,一旦on-line,邮件就被发送出去 资源分配更为合理(通过设置优先级别),从而提高资源利用率和可伸缩能力 不必要求所有的应用系统都在同一个时刻运行,从而简化分布式应用的开发 队列组件 COM+为这种通讯方式提供了一套基础设施
21
MSMQ基础
22
QC模型 基客户 QC.Recorder 异步 MSMQ QC.Player 对象 代替了RPC通道
23
QC的意义 对于组件透明 同样的组件既可以与Queue结合,也可以不结合 对于客户不完全透明 避免了MSMQ编程的复杂性
编写QC无需任何编写MQ的经验 缺点:缺少控制能力
24
QC的配置
25
QC的消息队列
26
QC的设计 QC与事务的结合 MSMQ本身就是一个RM 在客户端QC与事务的结合 在服务器端QC与事务的结合 QC的安全性
接口设计 禁止使用[out]、[in,out]、[retval] 必须使用按值传递参数方式 客户对一系列组件方法的调用必须能够满足自己功能的需要,例如,不能使用枚举器对象 不能返回与应用相关的错误码,返回值只表示QC.Recorder是否记录成功。 QC与事务的结合 MSMQ本身就是一个RM 在客户端QC与事务的结合 在服务器端QC与事务的结合 QC的安全性 与同步方式的认证过程不同 每个消息包含数字签名 使用Moniker创建QC对象,例如 GetObject(“queue:/new:VBShipProj.VBShip“) 封装了组件的创建过程,使组件对于两种方式透明
27
COM+事件模型 事件模型中用到的两个概念 publisher:发布者 subscriber:订阅者 变化通知 轮循法
可连接对象 —— tightly coupled event COM+的方案:loosely coupled event model Client Source Connection point Sink object Publisher Event object Subscriber
28
COM+事件模型结构 COM+目录 事件类 订阅信息表 Publisher 1 注册 Subscriber 2 注册 事件对象 IFoo
... 3 创建 4 激发 5 读入subscriber 列表 6 把事件递 交到每个 subscriber 7 接收事件
29
安装新的事件类
30
Subscriber创建一个subscription
31
COM+的其他服务 IMDB(In-Memory Database) 内存缓冲,以空间换时间策略
CLB(Component Load Balancing) 已移到“Application Center Server”中 Windows 2000 Advanced Server中保留 与clustering service一起提供high-availability and scalability
32
COM+开发 在现有工具下,基本没有变化 新的工具会有新的支持 底层原理不变,但是包装会做得更好——比如ATL
Attributed Programming 分两个方面 COM+组件的开发,针对每一种服务有一些新的要求,大多数保持与原来开发模式的兼容性,新的特性多数可以通过配置获得 与COM+系统提供的各种服务和管理工具打交道
Similar presentations