电脑维修第一互动门户_www.PC106.com 为了方便您再次访问电脑维修站,请点击收藏本站!设为首页
操作系统 · 硬件学院 · 软件学院 · 网络学院 · DIY 经验 · 数据恢复 · 网站技术 · 维修网点 · IT 黄 页 · 大师答疑
故障症状 · 电脑优化 · 病毒快报 · 黑客安全 · 维修宝典 · 电脑保养 · 服 务 器 · 在线杀毒 · 在线电视 · 网址服务
维修 CPU·主板·硬盘·内存·显卡·显示器·键盘鼠标·声卡音箱·软驱光驱·打印机·机箱电源·BIOS·网卡·局域网·浏览器
您现在的位置: 电脑维修 >> 网站技术 >> ASP技术 >> ASP基础 >> 网站技术正文
事务性COM+应用程序
作者:佚名 文章来源:不详 点击数: 更新时间:2007-2-3 12:51:38


     在前几章我们已经看到COM+提供的几种运行期特性,它们使得分布式组件的开发简单化,这些组件可用于创建可扩展、可维护的ASP应用程序。MTS最先引进了事务模型,它的设计简化了基于组件的分布式事务处理系统的开发。作为MTS的继承者, COM+增强并扩充了MTS的强大的事务模型,给系统提供更多灵活性和简单化。
    COM+事务模型去掉了复杂的事务处理代码,这些代码是通过MS DTC协调分布式事务所必需的。但是更重要的是, COM+事务模型透明地融合了分布式事务与COM+组件。
    通过使用声明( declarative )属性实现的COM+事务,有时也称为声明事务或自动事务。声明属性能从外部指定到组件的实现。为此,必须:
    ? 配置组件的Transaction Support属性,使用Component Services Explorer或者在组件类型库中使用一个常数值。
    ? 可选修改组件来表决事务的结果。
    通过代表组件与MS DTC交互,COM+自动地处理其余的复杂且冗长的事务细节。
    因为COM+依赖于MS DTC协调事务,单个组件能够在单个COM+事务中对不同类型的数据源执行操作。当与组件一起使用COM+声明事务时,能影响ADO或OLE DB数据访问。在单个事务中能够操作的数据源的可能组合是无止境的。例如, COM+对象能够在SQL Server数据库中修改数据、发送MSMQ消息,以及操作来自大型机系统的数据,所有这一切都在相同的COM+事务中。
    现在我们明白了COM+事务的益处,下面继续学习如何有效地使用声明事务模型并了解COM+在“幕后”所做的事。
19.3.1 Transaction Support属性
    正如上面提到的,每个COM+组件的Transaction Support 属性决定了组件将如何参与COM+事务。激活COM+对象时,COM+决定了对象的事务支持以及创造者是否已经提供了一个存在的事务。基于这两方面的信息, COM+运行期将在一个存在的事务或一个新的事务中提供对象,或者根本不存在事务。不管有没有事务,都能激活每一个COM+对象。由于这个原因,利用事务的组件常常被称为事务性组件,没有利用事务的组件则称为非事务性组件。
    使用COM+时有五种可能的Transaction Support属性选项:
    ? 禁止( Disabled )当组件的Transaction Support属性设置为Disabled时,COM+将完全地忽略组件的事务要求。COM+首先试图在创建者的环境内激活对象。如果创建者的环境是无效的或不兼容的, COM+在一个新的环境中激活对象。由于对象可能继承或不继承创建者的环境,则对象也就可能共享或不共享创建者的事务。
    ? 不支持(Not Supported)当组件的Transaction Support属性设置为Not Supported时,组件的实例决不参与事务。这种设置是为不访问数据源的COM+组件设计的,其结果是组件没有事务开销。然而, Transaction Support属性为Not Supported的对象总是在一个新的环境中被激活。这与Disabled相矛盾, Disabled的对象可以共享创建者的环境。NotSupported是缺省的Transaction Support属性值。
    ? 支持(Supported)当组件的Transaction Support属性设置为Supported时,组件的实例参与存在的事务。但是组件对事务并没有要求,组件在事务不存在的情况下仍能很好地执行。Supported属性只是表示支持事务,而不是必须要求事务存在。
    ? 需要( Required )当组件的Transaction Support属性设置为Required时,组件的实例总是在事务内执行。在激活COM+对象前, COM+将使用创建者的事务(如果存在),或者新的事务提供对象。不管哪种情况,组件实例总是在事务内执行。
    ? 需要新建(Requires New)当组件的Transaction Support属性设置为Requires New时,总是在一个新的事务中激活组件的实例,即专为这个对象创建一个事务,而不管是否存在可用的事务。这个设置为必须在事务中完成工作,但又必须把它的工作与所有其他的事务分开的组件而设计的。使用这个设置时, COM+对象永远不会运行在创建者的事务中。新的事务完全独立于创建者的事务。
    1. 设置Transaction Support
    组件的Transaction Support属性可以使用组件服务浏览器(Component Services Explorer,CSE)配置,或者在组件的类型库中指定一个缺省的Transaction Support设置。在组件的类型库中指定一个组件的Transaction Support属性是有益的,因为当使用CSE从执行这项任务中解除一个管理者时,可以减少不正确地配置组件的危险。然而,记住在组件的类型库中指定的TransactionSupport属性是一个缺省值,可以使用组件服务浏览器覆盖该值,这一点是很重要的。
    在使用组件服务浏览器对一个组件的Transaction Support属性进行配置时,简单地打开一个COM+应用程序的Component Properties对话框,从Transactions选项卡中选择五种可能的Transaction Support属性设置中的一个,如图1 9 - 5所示。

    如果使用的是V C++,可以在组件类型库中为一个组件的Transaction Support属性设置一个缺省值,可简单地通过在组件的接口定义语言( I D L )的定义中增加相应的一行来实现。当该组件被加到一个COM+的应用程序时,COM+读取类型库并且自动地使用存储于该类型库中的Transaction Support属性设置作为缺省值。
    Visual Basic 6.0也允许开发者通过改变类模块的MTS Transaction Mode属性,为组件的TransactionSupport属性设置指定一个缺省值。不要让这个属性的名称欺骗了你,MTST ransactionMode属性不但与MTS一起工作,也和COM+一起工作。当编译一个项目时,Visual Basic将在组件的类型库中为Transaction Support属性的设置放置一个等价的常量值,如图1 9 - 6所示。

    注意在Visual Basic中MTS Transaction Mode值的技术术语和组件服务浏览器中的术语是不完全相同的。然而,不必担心,除了Disabled (对COM+是新的)外,每一个Transaction Support属性级别都有一个对应的MTS Transaction Mode设置。表19 - 1中列了所有可能的MTS Transaction Mode属性和他们的等价的COM+ Transaction Support属性。

    当组件从Registered Components列表中加入时,因为组件服务浏览器不读取类型库,因此只要组件用Add File对话框加到COM+应用程序中,就应用储存在组件的类型库中的Transaction Support属性设置。相反地,从Registered Components加入的COM+组件,如果不用组件服务浏览器修改它们的配置,则组件使用缺省的Transaction Support属性配置,即Not Supported。
19.3.2 活动与同步
    当事务处理系统为许多用户提供服务时,能从客户中接收同时发生的调用。因此,事务处理系统必须考虑像多用户并发、同步和线程管理等问题。COM+能够处理这些问题,而且允许创建在多用户分布式环境中执行的组件,其创建过程同创建为单个用户服务的组件一样。
    COM+通过使用活动(activity )来完成这个惊人的任务。在MTS中,活动是一个对象组,这些对象都在代表单个客户运行。在COM+中,活动是一个环境组,这些环境在代表单个客户运行,环境可能含有一个或多个对象。然而,这仅是一个微小的差别,并且可以认为环境是最内部的对象容器。
    活动确保服务于同一用户的两个对象不会同时执行。在一个活动中的对象被同步以阻止在这个活动中并行地执行。活动可以由几个环境(包含着对象)组成,可以运行在分离的进程中,或者运行在分离的机器上(稍微有一点限制)。由于这些原因,活动有时指的是运行的单个逻辑线程。
    为什么对象的同步如此重要?考虑一个最糟糕的情况,在完全相同的时刻,代表同一用户服务的两个对象试图访问相同资源。每一个对象要完成自己的操作,就要阻塞其他对象的运行。这种情况称为死锁。活动能防止发生死锁,这是通过每次只允许一个对象代表一个用
户运行来实现的。另外,活动在帮助COM+管理线程缓冲方面起着重要作用。
    在MTS中,活动内对象的同步是通过将活动连接到单个物理线程,或是一个STA实施的。在一个活动中的对象不能并发执行,因为每个活动仅有一个物理线程。另外, COM+使用复杂的锁定机制来确保活动中的同步。
    每个活动保持着单一的独占锁。当在对象中调用一个方法并且对象的环境存在于一个活动中时,在允许处理方法调用前, COM+首先要试图获得活动锁。如果获得锁,就由对象处理调用,直到方法调用完成,才解除锁。如果不能获得锁,就阻塞方法调用,直到获得锁才调用方法。虽然锁定过程更加复杂,但从高层次观点看, COM+使用逻辑的活动使得多个环境和多个对象同步,基本上就是每一活动用一个单独的锁。使用锁的过程如图1 9 - 7所示。

    环境能存在于创建者的活动或一个新的活动中或者根本没有活动。然而,单个环境不能跨越多个活动。为了建立和保持这些关系, COM+为每个活动创建独特的用户标识符,称为Activity ID,存储于每个环境中。
    1. 创建活动和Synchronization属性
    随着COM和MTS编程模型的集成,创建活动的方法也发生了改变。使用MTS,每个对象属于一个活动。当VB客户使用CreateObject函数或New关键字(及某些表达式),或者VisualC++客户使用C o CreateInstance E X函数创建MTS对象时,自动地创建了活动。为了在已存在的活动中创建对象,创建者必须调用ObjectContext对象中的CreateInstance函数。
    正如所想像的,这会导致大量的混乱, MTS的开发者必须意识到逻辑活动的边界,并且恰当地使用标准的对象创建技术(CreateObject or CoCreateInstanceEX)或者ObjectContext对象的CreateInstance函数。
    使用COM+,仍然能自动地创建活动,但是活动的创建是通过使用组件的Synchronization属性来控制的,而不是基于如何实例化一个组件。实际上, ObjectContext对象的CreateInstance函数现在的功能与标准的对象创建技术相同,并且它仅支持MTS的向后兼容性。另外,COM+提供激活活动外部的对象的能力。这样可避免创建活动的额外开销和可能的调用阻塞,为频繁使用的非事务性“工具”类型的组件提升性能。如果需要,可以实现它们自己的锁定技术。
    同Transaction Support 属性一样Synchronization属性在组件服务浏览器中的组件Properties对话框配置,如图1 9 - 8所示。

    对Synchronization属性有五种可能的值:
    ? 禁止(Disabled) 当组件的Synchronization属性设置为Disabled时,COM+将完全地忽略组件的同步要求。正如当Transaction Support属性设置为Disabled时, COM+将首先试图在创建者的环境中激活对象。如果创建者的环境无效或不相容, COM+将在一个新的环境中激活对象。如果对象继承创建者的环境,则对象可以分享创建者的活动,反之不能。应该在非事务性组件中使用这种设置,无论何时,应尽量避免创建环境和活动的额外开销。
    ? 不支持(Not Supported) 当组件的Synchronization属性设置为Not Supported时,对象的环境将不存在于活动中。然而,Synchronization属性为Not Supported的对象总是在一个新的环境中被激活。
    ? 支持(Supported) 当组件的Synchronization属性设置为Supported时,对象的环境是否存在于活动中依赖于创建者的环境是否存在于活动中。然而,具有这种设置的组件不需要活动,而且在没有活动的情况也能很好地执行。
    ? 需要(Required) 当组件的Synchronization属性设置为Required时,对象的环境将总是存在于活动中。如果创建者环境存在于活动中,则新的对象将在创建者的活动中激活。否则,COM+将在位于新活动中的新环境里激活对象。
    ? 需要新建(Requires New) 当组件的Synchronization属性设置为Requires New时,对象的环境将总是在新的活动中创建,不管创建者的环境的同步状态如何。
    正如你所看到的,Synchronization属性的选项和Transaction Support属性的选项非常相似。然而,某些Synchronization选项依赖于其他组件属性的某些值。特别是,支持JIT激活的组件或Transaction Support属性为Supported、Required和Requires New的组件必须在活动中被激活,而且需要Synchronization属性为Required或Requires New 。只有当JIT激活被关闭并且Transaction Support属性设置为Disabled或Not Supported时,Synchronization属性才能设置为Disabled或Not Supported。我们将在下一节更多地讨论事务与活动的关系。
    如果认为所有这些配置选项听起来有些令人困惑,不必担心。Microsoft预料到这些互相依赖的配置选项会使开发者记忆混乱,他们在组件服务浏览器中建立验证功能。如果改变JIT激活支持或者改变对Synchronization属性不相容的某些Transaction Support属性,组件服务浏览器器将用警告消息提示并自动地调整Synchronization属性来反映任何变化。警告消息如图1 9 - 9所示。

    关于活动,最好的优点是它们全部通过COM+在幕后执行,组件不需要做任何附加工作,COM+提供了自动的并行和同步服务。另外,对非事务性组件提供了禁止创建活动的功能。尽管如此,理解Synchronization属性变化的作用和活动与环境在幕后如何运行是很重要的,这样才能设计出高效和可扩展的组件。现在我们对事务性COM+组件的可配置属性有了一定的了解,下面讨论事务的生存期的每一阶段。
19.3.3 事务的生存期
    COM+事务生存期可分为四个阶段,分别是:
    ? 事务开始。
    ? 建立并征募与Resource Manager的连接。
    ? 在事务中执行操作。
    ? 输

[1] [2] [3] 下一页

上网速度更快更爽、更安全下载使用Firefox火狐浏览器

网站技术录入:admin    责任编辑:admin 
  • 上一篇网站技术:

  • 下一篇网站技术:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

     IT图片报道

    14万元天价!640GB闪存硬盘美国问

    双核独显19寸液晶惠普PC机只卖49

    佳能MP160售价仅580元

    神舟双核液晶电脑3999起
     IT热点报道

    普通IT报道 中国电信称三年内实现光纤到户
    普通IT报道 广达个人电脑宣布已开始在江苏投入量产
    普通IT报道 14万元天价!640GB闪存硬盘美国问世
    普通IT报道 节后病毒猖獗系统瘫痪
    普通IT报道 AMD推出6款节能处理器
    推荐IT报道 双核独显19寸液晶惠普PC机只卖4999元
    普通IT报道 微软无奈下调Vista销售预期 XP仍是主角
    普通IT报道 佳能MP160售价仅580元
    推荐IT报道 神舟双核液晶电脑3999起
    推荐IT报道 4999元玩Vista 七喜12寸轻薄本升级
    关于公司 | 免责声明 | 广告服务 | 招贤纳士 | 联系我们 | 友情链接 1 2 3
    Copyright©2005 - 2007  http://www.PC106.com  All Right Reserved   
    桂ICP备06015569号