COM+_潘爱民

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

COM+潘爱民内容•COM复习•COM+介绍•COM+结构•COM+服务•COM+开发复习:COM基础ApartmentCOM组件COM客户{IXxx*p;p-…}ApartmentproxyCOM库(SCM,RPCSS.EXE)COM库(OLE32.DLL)COM库(OLE32.DLL)Registry进程A进程B机器A机器B安全通道ORPC双接口VB客户复习:COM技术总体结构COM基础Typelib结构化存储可连接对象Automation永久对象UDTmoniker属性页事件属性变化通知ActiveXControlOLE嵌入对象In-placeactivateCOM和COM+COM桌面应用DCOMC/S应用COM+Services分布式应用/企业应用COM+:企业应用•从桌面应用发展到企业应用、Web应用–企业应用特点:•大型、分布式、实现企业的关键业务•企业应用的挑战–关键业务:业务逻辑–基础设施:涉及到系统方方面面•开发、调试、测试、配置、维护•如transaction、security、event等COM+是什么?•面向企业应用–提供了企业应用所需要的通用基础设施–设计企业应用要求有思想上的根本变化•COM+对COM的增强和改进–增强了COMruntimelibrary–增强了MTS(MicrosoftTransactionServer)•事务服务、安全服务–提供了新的runtime服务•队列服务、事件服务、负载平衡、(内存数据库)•COM+兼容COM,只是提供了更多的功能COM+的设计思想、目标•使程序员和用户把注意力和精力集中在业务逻辑上,而不是基础设施上•使组件尽可能地通用–编译时刻特性与运行时刻特性分离•与以前的COM组件兼容•客户和组件的透明性COM+:interception技术COM对象机器、进程或者套间边界ProxyRPC通道StubClientPolicy1ClientPolicy2ServerPolicy2ServerPolicy1COM+组件结构•COM+组件结构COM+Application——管理基本单元COM+Components——功能基本单元COM+Objects•COM+Application–分为两类:•ServerApplication,DllHost.exe•LibraryApplication,与客户共享进程,仍然截取–共享同一个进程,同一组属性设置•COM+Components为COM进程内组件•COM+Objects为COM进程内对象COM+管理工具•ComponentServicessnap-in客户创建COM+对象•对客户透明,使用增强了的COM库•客户创建COM对象–COM+runtimeservices会检查COM+的配置信息–启动指定的服务进程–安装interceptor,截取器–在客户方创建代理对象,并返回给客户•COM+根据指定的应用属性管理服务进程的生命周期COM+对于组件的要求•要求DLL形式的组件•要求自注册–DllRegisterServer、DllUnregisterServer•要求有typelib–typelib既可以绑在dll上,也可以单独的文件COM+Catalog(COM+目录)•COM+管理信息、系统数据库–COM+RegistrationDatabase•通过一个对象层次结构管理COM+Catalog–COM+AdministrationLibrary,支持脚本•组件服务snap-in管理工具就是该对象模型的一个功能缩影•用户可以通过COMAdminCatalog组件进入到对象模型中–ProgID:COMAdmin.COMAdminCatalogCOMAdminCatalog管理功能COMAdminCatalog组件使用举例DimCatalogAsnewCOMAdminCatalogDimApplicationsAsCOMAdminCatalogCollectionDimComponentsAsCOMAdminCatalogCollectionDimAppObjectAsCOMAdminCatalogObject'gettheApplicationscollectionandpopulateitSetApplications=Catalog.GetCollection(Applications)Applications.Populate'getthecorrectapplication,MyApplicationForEachAppObjectinApplicationssIfAppObject.Name=MyApplicationThenExitForNext'gettheComponentscollectionforMyApplicationSetComponents=Applications.GetCollection(Components,AppObject.Key)COM+Context(COM+环境)•对象所生存的COM+状态–COM激活对象时,创建context–对象的环境与对象紧紧绑在一起–根据组件的属性决定环境的状态–环境属性也是对象与客户之间的约定•如何访问“环境对象”–CoGetObjectContext–GetObjectContextCOM+环境(续)•环境对象支持接口–IObjectContext–IGetContextProperties–IObjectContextInfo–IContextState–ISecurityCallContext•环境可以扩充–比如ASP对象COM+安全性•安全性基础设施对于分布式应用至关重要•Authentication——认证(鉴定)–AuthenticationLevel–SSP/SSPI——允许扩展–NTLM/Kerberos–CoInitializeSecurity–安全与性能的平衡COM+安全性(续一)•授权(Authorization)•Role-based–仅限于通过截取器的调用•通过程序来控制ISecurityCallContext和IObjectControl提供了–IsSecurityEnabled–IsCallerInRole•进一步有ISecurityPropertyCOM+安全性(续二)•服务进程的身份(identity)–DCOM方案:登录到客户机上的用户——不再有效–当前交互用户或者每个指定的用户•三层结构的两种安全模型–trustedservermodel–impersonation/dele-gationmodelCOM+线程模型:STA和MTASTASTAMTA进程COM+线程模型:TNA•TNA(Threadneutralapartment)–不包含线程,只有对象,所有的对象与线程无关•TNA中的对象–ThreadingModel=Neutral–创建线程总是接收到一个轻量级的代理–调用时,直接在调用线程中执行•TNA有希望替代“Free”和“Both”类型•STA继续生存,特别是包含UI的对象同步(synchronization)•或者serialization–STA对象不需要同步,MTA、TNA对象需要同步•COM+提供了“activity-basedsynchronization”–activity:代表单个客户执行任务的一组对象–相当于一个逻辑线程–每个activity都包含一个进程范围内的锁–可以处理跨越机器边界的嵌套调用Transaction(事务)•分布式应用最困难的一个基础设施•定义:由一组相互关联的操作构成的整体行为•难点所在:保持系统状态一致性–在操作过程中,发生意外或者失败–操作的中间状态要被隔离开–组件设计思想:把大的操作分解开,并可能包装到小的组件中。这加剧了事务的困难,因为:在编写组件时需要处理由其他组件引起的所有问题事务的技术要点•DTC(DistributedTransactionCoordinator)–每个组件对DTC负责,DTC知道所有的组件•两阶段提交–准备和提交–对象表态:committing、abortingCOM+中的事务•COM+runtime提供了免费的DTC•组件与DTC的通讯–IObjectContext::SetComplete–IObjectContext::SetAbortComplete–组件的属性设置Bank例子事务与对象环境MoveMoney对象T1(事务根对象)(1)基客户调用MoveMoney对象的Perform方法环境AccountA对象T1(用户账户)(2)MoveMoney创建AccountA对象环境AccountB对象T1(电话公司账户)(3)MoveMoney创建AccountB对象事务过程环境MoveMoney对象T1(事务根对象)(1)调用Post环境AccountA对象T1(用户账户)环境AccountB对象T1(电话公司账户)SQLServerCOM+RMDTC服务(2)Account对象通过ADO连接到SQLServer(3)SQLServer加入到事务到T1中(4)Account对象执行SQLServer调用SQLServer缓冲区账户数目事务ID用户账户¥-100T1电话公司账户¥+100T1(5)SQLServer把变化缓存起来COM+RM•COM+RM(ResourceManager)–知道当参与事务的对象改变它的状态时,该如何把资源的变化缓存起来–如果事务被提交,RM知道如何改变资源状态–如果事务被放弃了,RM知道如何把变化丢掉–例如:各种数据库系统、MSMQ•DTC两阶段提交过程–对象不参与提交过程,只是表态–准备阶段:RM把状态信息保存起来,保证不会失败–提交阶段:DTC通过RM提交事务事务的特性(ACID)•Atomicity–要么所有的变化都有效,要么都无效•Consistency–状态一致性•Isolation–事务外部看不到事务的中间结果•Durability–缓存的中间结果要能“持久”COM+事务的用法(一)COM+事务的用法(二)COM+事务的用法(三)[uuid(04CF0B76-1989-11D0-B917-0080C7394688),helpstring(AccountClass),TRANSACTION_REQUIRED]coclassCAccount{[default]interfaceIAccount;};[uuid(04CF0B7B-1989-11D0-B917-0080C7394688),helpstring(MoveMoneyClass),TRANSACTION_REQUIRED]coclassCMoveMoney{[default]interfaceIMoveMoney;};事务属性•不支持•支持•需要•需要新建•禁用对象如何控制事务•两个控制位–transaction-votebit:表态位–deactivate-on-returnbit:返回之后,对象即无效•通过环境对象控制这两位–IObjectContext–IContextStateTransactionandJust-In-Timeactivation•事务组件必须使用JITactivation特性基客户代理RPC通道存根T1对象基客户代理RPC通道存根(无事务)基客户代理RPC通道存根T2新的对象JITactivation的意义•资源利用——可伸缩性–系统帮助回收资源–回收的价值:部分回收所占整体的比例,以及资源本身的重要性(比如数据库连接)•保证事务的正确性–一致性和隔离性•与对象池的结合•状态管理新概念事务与对象池•池组件•对象必须实现IObjectControl接口–Activate–Deactivate–CanBePooled•池组件满足以下条件:–线程模型不能为STA–可被聚合–不能聚合其他的池组件补偿资源管理器(compensat

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功