各位大侠,我曾看过李维写的一些关于事务支持的文章,但还是不太清楚.在此我举个简单例子,希望高手不惜赐教!非常感谢!
例:
有A,B,C,D四个组件对象,假设每个对象内部都涉及数据库更新操作.
调用关系是这样的:A调用B和C,而B又调用D
A
|\
B C
|
D现在我客户端调用A执行数据更新,所有数据更新需要在一个事务内完成,即任何组件的数据更新出错都应该取消所有数据更新操作.问:如何设置各自的线程模型和事务模型,才能保证正确调用呢?Object Pooling对此有影响吗?各个组件的过程代码是这样写的吗?
procedure A; //其余类似
begin
try
{code}
SetCompleted;
except
SetAbort;
end;
end;
例:
有A,B,C,D四个组件对象,假设每个对象内部都涉及数据库更新操作.
调用关系是这样的:A调用B和C,而B又调用D
A
|\
B C
|
D现在我客户端调用A执行数据更新,所有数据更新需要在一个事务内完成,即任何组件的数据更新出错都应该取消所有数据更新操作.问:如何设置各自的线程模型和事务模型,才能保证正确调用呢?Object Pooling对此有影响吗?各个组件的过程代码是这样写的吗?
procedure A; //其余类似
begin
try
{code}
SetCompleted;
except
SetAbort;
end;
end;
解决方案 »
- TThreadList相关问题,急。。。。在线等
- 请问怎么能用一个数据库的数据修改另一个数据库数据?
- 文件监控,全来帮一下。谢谢。
- 对两个关联的数据表怎么进行操作
- 求教deiphl中插入shocwaveflash之后如何填写一个相对地址
- 对字符串字段时行排序问题,如能解决,另附100分献上。
- ▲▲▲如何让MDI主窗口显示时向下凹陷的窗口变成平的??▲▲▲
- 那有‘未名码头’资料包下载的,我到他的主业怎么没找到
- 一个c/s的mis写完之后,要让用户使用,是不是有这么一个过程:先把数据库导出到源代码文件夹里,然后生成安装文件,用户得到安装文件后,先安装,然后把数据库导入到后台里,这样才能使用??//牛虻
- OUTLOOK?
- TXT、DBF文件怎么连ADO?在线等待,急!!!解决马上给分
- 怎样在cxGrid中实现:满足不同条件的行显示不同的颜色
2、线程模型最好一致,这样执行效率会较高。
3、启动事务的那个组件(A组件)要设置为需要事务或者需要新事务,被其启动的事务被称为根事务
4、被根事务组件创建(一定要用ObjectContext.CreateInstance方法)的对象,如果支持事务,即自动继承该事务,得到一个子事务环境。所以B、C、D至少要支持事务,或者可以设置为需要事务,但不能是需要新事务。
5、在同一个事物上下文中,任何一个环节的子事务或者根事务调用SetAbort都将导致整个事务撤销,而不管其他事务是否投票赞成提交(SetComplete)。你的代码是正确的。但注意一定要在根组件中用ObjectContext.CreateInstance方法创建其他子对象,而不能用CoXXX.Create来创建COM对象。否则事务无法传播,自然也提不上协作。我写一个ezService(http://www.ezService.org),主要就是解决这个问题的,在CSDN已经注册了(http://www.csdn.net/cnshare/soft/18/18634.shtm),你可以看看,对你有帮助。简要介绍:
1. 使用ezService开发分布式数据库应用,可以大幅度简化应用服务器的开发,无须在建立COM+/SOAP Server应用上花费任何时间,也不需要费心管理数据库事务,只要具备熟练运用SQL的能力,理解SQL参数匹配规则即可写出复杂的分布式应用服务,使得入门级程序员也可以轻松负担服务开发任务。
2. ezService高级服务允许按照类pascal语法规则自由书写脚本,实现复杂业务逻辑,新版本可以支持自Borland Delphi 7导出的大量函数和对象。同时提供了对COM的直接支持,可以通过引用COM组件,与外部系统进行复杂的交互操作。
3. ezService内核为COM+,支持连接池(connection pooling)和对象池(object pooling)机制,自动支持分布式事务。
4. ezService使用ADO提供程序连接数据库管理系统,凡是提供良好的OLE-DB驱动的DBMS均可支持(目前已经在SQL Server和Oracle 8/9上通过用户验证)。
5. ezService使用名为ESDL(ezService定义语言)的(类似WSDL)XML发布文档,ESDL可以对外界发布ezService所开发服务的全部功能接口,使得第三方开发者也可以方便的了解服务,快速进行二次开发而无需了解服务细节。
6. 支持SOAP协议,提供一个ISAPI类型的Web Service,一个ASP.NET Web Service,可以直接将服务功能发布到Internet/Intranet,无须额外编程。
7. 未授权的ezService服务具备与授权版本完全相同的功能,仅会在执行时随机锁定3个用户身份验证帐号,其他功能不受影响。
8. 由于使用了COM+/SOAP技术,ezService可以被主流开发工具轻松调用,发行版本附带了可应用于Borland Delphi 7的一组VCL,使开发员可以迅速访问ezService服务。在Visual Studio .NET开发环境中也可以轻松使用类似技术。
再请教大侠一个问题:
http://expert.csdn.net/Expert/topic/2227/2227764.xml?temp=.4643518