随着信息技术的发展,广泛的数据交流、共享与协作在现代商业信息化实际应用中变得尤为突出,处理的数据量不断增大增加了这种关系的复杂性。因此,保证数据的完整性与一致性显得十分重要。
一、事务处理概述
1.什么是事务处理
事务处理就是绑定在一起的一组处理过程的集合,如果在处理中,这个集合中的任何过程出现了问题,这个事务就会失败,集合中的所有过程都要恢复到初始状态。
2.事务处理的特性
所有的事务处理必须满足acid特性。
原子性(a):是指事务处理是有或无的命题,一旦启动,整个事务或者提交,或者放弃;一致性(c):是指事务处理的所有进程都不能违背的商务规则。这些规则规定了数据的一致性;隔离性(i):是指多个事务处理之间的并发控制,即保证各个事务之间不互相影响;持久性(d):是指一旦完成了事务处理,事务处理的结果就应该得到维持。
二、分布式事务处理
1.net framework与com+
分布式事务处理是指地于分布于相同或不同计算机上的多个不同类型数据数据源进行的事务处理。
在分布式事务处理中常会用到已经集成到了操作系统中com+技术,它是com和mts的替代技术。.net framework是microsoft的新一代开发平台,它不仅支持com+,还依赖com+完成复杂的分布式两阶段提交事务处理,使得使用com+更加容易。com+提供了基于ms dtc的强大事务处理模型,使开发者专注于系统的商务和应用逻辑,不必关心中间的具体细节。它融合了分布式事务处理和基于组件编程的优势,通过声明组件属性来实现自动事务处理。用户只需在类定义时声明事务处理支持属性(tsa),com+可以根据tsa决定组件的事务处理行为,基于组件配置tsa,代表组件自动与ms dtc进行交互,自动处理启动、提交或终止事务的复杂细节。
在.net framework中提供的用来在com+中执行的.net类称为服务部件(servicedcomponent)。这些类都直接或间接从定义在system.enterpriseservice命名空间的servicedcomponet基类继承而来。而且在此命名空间中定义的一些属性指出了怎样在com+中配置组件,以及使用哪些服务。
2.在.net中如何建立com+分布事务处理
com+事务处理支持属性有下而5种可能的属性值:
disabled、not supported、supported、requied、requied new
前两种属性不支持事务处理。第三种属性一般用于组件不需要进行事务处理,但运行结果影响到其他需要事务处理组件。requied属性需要事务处理,若它的创建者已经在进行事务处理,com+就会将此组件加入到创建者的事务处理中。若调用者不存在事务处理,则com+为此组件新建一个事务处理。requied new属性表明组件需要进行事务处理,但是不管它的创建者是否存在事务处理,需要新建一个事务处理,并在这个新事务处理中运行。
为此.net servicedcomponent必须完成的任务:
从servicedcomponent基类继承而来的.net类;将.net事务处理支持属性transactionattribute应用于类声明中(即上面提到的5个属性值之一);应用程序集级的.net属性规定com+的应用配置;
包括applicationnameattribute(规定应用程序建立的名称);applicationactivatonattribute(规定组件在进程内创建还是在进程外创建);applicationaccesscontrolattribute(规定了com+应用的安全层次)
(1)建立强命名
(2)注册组件
(3)com+事务处理的生命周期
com+事务处理的4个阶段的生命周期中前三个阶段比较简单,完成事务处理后,有几种方式可以决定是否提交事务。可以通过使用3种技术显式控制事务处理的结果。
(4)调用contextutil方法:
方法是:setcomplete()、setabort()、enablecommit()、disablecommit()
设置contextutil属性:属性是:deactiveonreturn、mytransactionvote。
在类定义中应用autocomplete属性
下面用一个简单的例子给出这一种技术的应用(语言为c#,很容易转为别的语言):
调用contextutil方法
using system.enterpriceservices;
[transactionattribute(transactionoption.required)]
public class account : servicedcomponent
//从system.enterpriceservices.servicedcomponent类继承
//允许组件使用com+服务
public void updateaccount()
try
contextutil.setcomplete();
catch(exception e)
contextutil.setabort();
throw(e);
设置contextutil属性和在类定义中应用autocomplete属性与此类似。
三、结束语
随着整个社会信息化进程的加快,需要处理的数据量越来越大,数据处理一致性、完整性、准确性对整个处理系统的性能具有决定性的影响。随着新一代开发平台.net framework的逐渐推广,.net结合com+的分布式事务应用必将得到很大发展。