分享
 
 
 

新事务之一: dotNET和COM+中的事务(2)

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

新事务之一: dotNET和COM+中的事务

小气的神

2002-4-16

Article Type: In-Depth

难度等级:6/9

版本:2.32

CLR中和事务相关的属性类

属性类

作用

AutoCompleteAttribute

函数内自动完成声明的事务

ConstructionEnabledAttribute

添加construct 字符串

JustInTimeActivationAttribute

即时激活

ObjectPoolingAttribute

对象池

TransactionAttribute

声明事务

CLR中和事务有关的方法和属性

属性和方法

接口和方法

DisableCommit

IObjectControl::DisableCommit

EnableCommit

IObjectControl::EnableCommit

SetAbort

IObjectControl::SetAbort

SetComplete

IObjectControl::SetComplete

IsInTransaction

IObjectContextInfo::IsInTransaction

MyTransactionVote

IContextState::Get/SetMyTransactionVote

DeactivateOnReturn

IContextState::Get/StateDeactivateOnReturn

Transaction

IObjectContextInfo::GetTransaction

TransactionId

IObjectContextInfo::GetTransactionId

ContextId

IObjectContextInfo::GetContextId

当然在上面的类中我们也可以不加任何的属性控制,只是简单从ServicedComponent继承一个类,那么当我们用Regsvcs向COM+注册我们的组件成功后,COM+设置中依然有一些默认的值,或是我们使用了属性但没有明确的指明属性的值。这些是由System.EnterpriseServices.RegistrationHelper来完成的,事实上Regsvcs在调用完Regasm和Tlbexp之后就调用了它完成在COM+ Catalogs的注册。

下表是CLR中类编译之后的属性(配置和没有配置)

属性

适用范围

没有配置属性时在COM+中的值

使用属性配置但没有显示指明属性在COM+中的值

ApplicationActivation

Assembly

Library

No default

ApplicationID

Assembly

Generated GUID

No default

ApplicationName

Assembly

Assembly name

No default

AutoComplete

Method

False

True

ConstructionEnabled

Class

False

True

JustInTimeActivation

Class

False

True

MustRunInClientContext

Class

False

True

ObjectPooling

Class

False

True

Synchronization

Class

False

SynchronizationOption.Required

Transaction

Class

False

TransactionOption.Required

TransactionIsolationLevel.Serializable

Timeout = infinite

从上面看得出属性编程给我们带来的方便和简捷的感觉,比起以前COM方式下的COM+编程方便了许多,不用太多的引用、不用考虑线程的同步、甚至登记到COM+环境中也相当容易。但只能说,如果以前你在COM下工作得不错,现在你这CLR下也可以工作的很好或更好,COM+以及事务编程模型仍然没有改变,从实际需要和应用中分析和构造出事务模型依然还是每个开发人员主要的任务,不过现在你可以有更多的时间和精力来应对这个问题了。

Windows XP和Windows.NET中的可配置事务隔离层(Configurable Transaction Isolation Level)

Windows XP 和Widnows.NET的COM+环境下允许我们指定事务隔离等级.

这的确是一个盼望已久的新特性,COM+ 1.0中我们只能使用默认的也是最严格的事务隔离等级:Serializable。在Windows XP和Windows.NET中的COM+允许我们指定组件的事务隔离等级,可以由开发人员和实际应用决定使用何种隔离等级。不是所有的RM(resource managers)都支持目前的定义的四个隔离等级,可能的一个策略是当RM不支持当前的隔离设置那么使用一个更高的隔离等级,Serializable是最严格的隔离等级,同时也是最普通的一个隔离等级,那么也就是说几乎所有的RM都支持这个隔离等级设置(目前COM+支持的四个隔离等级也是MS SQL Server都支持和实现的也是SQL-92定义的四个)。同样也不是所有的开发人员都明白这些选项的作用和含义。下面会给出一些通常的解释和信息以便在未来的开发过程中作出选择。

多个用户对数据库操作就可能产生数据不一致的情况了,隔离等级就是说事务可以接受不一致数据的程度,是一个事务与其他事务隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。我们在COM+中要求的隔离级别确定了RM使用锁的行为。不同的隔离等级可能会带来不同的问题,比如:

问题

描述

实例

脏读

Dirty read

也叫未提交读或未确认读。一个事务修改了数据库但未提交或确认,此时另一个事务读取这个值,并且拿去操作。

原来小明的帐户有1元,A负责存入,B负责划帐,那么A先存入20元但未提交,此时B读取这20元,然后划去5元,A失败回滚事务,B则将15元存入数据库,完成事务。而小明就开心坏了。

不可重读

Nonrepeatable read

也叫不一致读或不可再读。一个事务读取了某个值,当它下次再读时这个值变化了,而修改不是它主导的,显然是其他事务操作了

这次B学聪明了,在第一次获得20元的信息之后先减去自己的5元,然后没有立即更新数据库,又去查了一次数据库,而原先的20现在变成了50,三秒之后B发现已经是10了,所以B很纳闷:不是我负责划帐的吗?

幻影

Phantom

是指对同一数据库的两次读操作中发现出现一组新的数据。与不可重读的区别是,不可重读是对现有数据的修改或覆盖,没有增加或减少数据,幻影则是插入了先前没有的数据或删除了原先已有的数据。

B有时也负责向小明报告他最新的存款情况,虽然昨天没睡好,但是B仍然进行了统计,他发现第一次统计时A有5笔记录自己有10笔,第二次查询确认时发现A增加了3笔共有8笔自己少了月初的一笔成了9笔,B想自己应该休息一会再统计一次,尽管少了月初的一笔有些奇怪,但如果结果是A的总数大于自己的,那小明对他的存款还是会有信心的

下面的表是设置不同的隔离选项对并发发生的问题接受程度,看得出Serializable 最严格,三种可能的错误都不会发生。COM+按其顺序依次认为它们从低到高隔离值从小到大,Read uncommitted最小,Serializable最大。

Isolation level

发生脏读

发生不可重读

发生幻影

Read uncommitted

Yes

Yes

Yes

Read committed

No

Yes

Yes

Repeatable read

No

No

Yes

Serializable

No

No

No

(未完)

特别:

本文CSDN署名首发,转载或改编请注明作者和出处。如果有问题,请发电子邮件给new2001@msn.com

以上文字和图片涉及其他人的隐私和个人权利,所有文字和图片只用于内部交流,不作任何新闻发表和商业用途。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有