文档详情

共享信息机制及应用方法

ji****72
实名认证
店铺
PPTX
104.52KB
约47页
文档ID:50411129
共享信息机制及应用方法_第1页
1/47

MTS中共享属性管理器(SPM)在分布式计算环境中解决 并发问题时所起的作用,并以一个实例详细说明了SPM的 使用方法1概述在分布式应用中,编写能在并发环境中正确工作的应用程序是一项 件较困难的工作微软的事务服务器(MTS, MicrosoftTransactionServer)在这方面给用户提供了一个很好的解决方案,使 开发人员能将精力集中在编写自定义的商业逻辑上,将 其它问题交给系统解决在并发环境下,用户不能简单地使用全局变量来保存共享信息 这是因为并发以及命名冲突等潜在的问题会造成所需的 数据和实际获得的数据不一致SPM通过提供共享属性组(Shared PropertyGroups)为组中的所 有共享属性建立独一无二的名称空间来消除名称的冲突 ;同时,SPM应用锁和信号量机制保证共享数据在并发情况下提供 用户正确的结果,大大减轻了用户开发并发应用程序的 复杂度客户机上的应用程序,该程序调用MTS对象提供的服务;客户端(Client)“则指任何调 用其它MTS对象的MTS对象说明了基础客户端和客户端 的概念基础客户端和客户端当基础客户端调用对象1时,对象1再调用对象2.此 时,对象1调用了其它MTS对象提供的服务,因此对象1就 是一个客户端。

存储在SPM中的共享属性只能被那些在同一进程中运行的对象所 访问因此,应从客户端(即MTS组件)来使用SPM,而 不要从基础客户端去使用它如果共享属性是由一个基础客户端创建的,那么它们将被安 置在基础客户机的进程中,这可能不是我们所期望的2 应用方法SPM的对象模型如所示为了防止在不同组件创建的属性之间发生命名冲突,SPM定 义了“共享属性组”的概念一个“共享属性组”为一 组共享的属性建立一个名称空间每个属性在该组内有一个名称、值和位置名称或位置可 以用来检索属性的值可以通过“共享属性组管理器” 来访问和创建共享属性组SPM的对象模型在创建一个组时,可以指定SPM怎样管理对组内属性 进行并发访问如果isolation mode(隔离模式)被设置 成LockSetGet,那么当一个属性值被读或写时,SPM就对该属性加 锁这种设置,可保证两个客户不能同时读或写相同的 属性,但武汉科技大学学报(自然科学版)它并不阻止客户并发地访问同一组里的不同属 (隔离模式)被设置成LockMethod,那么在当前的方法 调用期间,一个组中的所有属性将被加锁,以保证该客户可以排他地使用这些属性 当组内属性之间有相互依赖关系时,或者当一个客户需 要保证一个读/写操作不被中断时,这种加锁功能就很有用处。

在创建组时,也可以指定组内的 属性何时被销毁如果release mode(释放模式)被设置 成Standard,那么当所有客户刚一释放它们对该属性的引用,该属性就 被销毁如果release mode(释放模式)被设置成Process ,那么直到进程终止时,这些属性才被销毁在默认情况下,经过三分 钟没有活动,MTS将会关闭一个进程如果正在使用SPM ,可能想为服务器程序包增加超时时限,以减少必须重新对SPM进行初始化的次数为了使 用SPM,必须先创建“共享属性组管理器”的一个实例 在VisualBasic中,可以通过设置一个对Shared PropertyManagerTypeLibrary (共享属性管理器类型库),即MTXSPM.DLL的引甩并且创建一个新的SharedPiopei-tyGroupManager对 象来完成这项工作如下面的程序代码所示:一旦创建 了组管理器的实例,就可以调用它的CreatePropertyGroup方法, 以便用一个给定的名称创建一个新的共享属性组创建 组后,使用CreateProperty方法来创建共享属性;或通过在该组中的位 置,利用CreatePropertyByPosition方法来创建共享属性。

如果这一共享属性已存在,那么这两种方法都将 返回一个对已存在的共享属性的引用,然后可以利用其 Value属性来获取或设置数据的值Value是一个VARIANT属性,可以把任何标准的Automation 类型存储到共享属性中3应用实例下面用一个实例来说 明SPM的使用方法实例代码是用Visual Basic编写的,后台数据库 采笔者为本单位开发“合同管理”项目时,曾编写过一 个组件bus- TakeANumber,用来管理厂家编号和分类编号示出与该 组件相关的三个r糸产,笑名称van.lvu(仙分类知号i|U与 例子有关的三个数据库表由于要求厂家编号与分类编号按部门进行维护 ,即当每个部门添加厂家信息或产品类别信息时,该组 件将产生一个长整形数字作为厂家编号或分类编号(该编号是在原表中的最大编号上加一形成的 )又因为各部门可能同时有几个人在输入数据,为了避 免并发问题形成重复的编号,故考虑使用SPM对编号进行维护TakeANumber表主要是用来将共享 信息暂存到数据库中,以便系统突然崩溃时或在服务器 进程被MTS关闭前能将共享信息保存下来,从而在SPM再次启动时能获得最近使 用过的信息。

程序的设计思想为:为每个部门建立一个 ‘共享属性组“,以部门编码作为名称空间;每个属性组中设两个属性,即厂家编号和分类 编号当需要某个编号时,便从共享属性值中读取该值 ,并将原属性值加一后存入该共享属性中,同时将该属性值存入数据库作为备份,以备不时之 需个组件请求获取的厂家编号或分类编号程序代码 如下:Manager‘创建共享属性组管理器的一’定王晓亮,等:共享信息机制及应用方法一 个实例‘创建共享属性的一个实例 =NewADODB.Connectionconn.Open“FILEDSN=”fileDSN’通过DSN文件建立数据库连接‘如果 bResult为true说明该共享属性组已存在;否则为一个新建的属性组,这时从数’据库中读取备份的数据作为 共享属性If回该属性值‘将原属性值加一作为下一个返回 值’备份该属性值(存储到数据库中)作为不时之需‘错误处理在上面的方法中,属性组的 隔离模式使用了LockMethod,释放模式米用Process(进 程级)GetANumber来获取产品分类编号(这里以获取分类编号为例, 厂家编号的获取方法与之相似)其中,变量U-nitCode 为部门编码,ProdSort为产品类别编号,SortName为产品类别名称。

Add方 法完成的任务是将新的产品类别名称及分类编号存入表 “产品类别”中程序代码如下:ProdSort=EmptyThen‘将UnitCode强制转换为字 符串,并建立一个以该字符串为名称空间的属性组;Into产品类别武汉科技大学学报(自然科学版)在这个组件 中,创建了bus―TakeANumber的一个实例,用来产生一 个与部门相关的独一无二的产品分类编号现在,可以在客户端应用程序中调用 上面两个组件来完成所需的功能以下为一个客户端应 用程序片断,它调用了组件bus-PiodSortWrite中的方法Add将部门编码为104、产品类别为 “起重机”这一类别信息写入数据库:4结束语本文主要 讨论了MTS的共享信息机制SPM在处理并发问题上的应用实际上,MTS 的SPM的作用不只局限在解决分布式应用中的并发问题, 只要是不同组件之间需要共享信息,都可以采用SPM方法,至于具体功能的实现,可参 阅有关资料转载请注明出处,谢谢升降机 ty70htvv。

下载提示
相似文档
正为您匹配相似的精品文档