三层结构使用多个远程数据模块,如何进行事务处理?(100分)

  • 主题发起人 主题发起人 lixiufu
  • 开始时间 开始时间
L

lixiufu

Unregistered / Unconfirmed
GUEST, unregistred user!
在三层结构中应该可能用多个远程数据模块吧?但问题是:如果一个模块要协调多个远程数据模块完成一个功能,那么如何对这几个远程数据模块进行事务控制?用的是MIDAS而不是用的MTS.
 
我已经找到了答案,可能是正确的。可以看看delphi的demo/midas/shareconn,其中就有答案。
 
最清晰的做法:
首先,在服务器端接口上定义三个方法(不需要参数):
begin
Trans
CommitTrans
RollBackTrans
三个方法的实现内容为:
begin
Trans:
Adoconnection1.begin
Trans;
CommitTrans:
AdoConnection1.CommitTrans;
RollBackTrans:
AdoConnection1.RollBackTrans;
客户端可以这样调用:
SocketConnection1.AppServer.begin
Trans;
try
if (ClientDataset1.ApplyUpdates(0)=0) and (ClientDataset2.ApplyUpdates(0)=0) then
SocketConnection1.AppServer.CommitTrans
else
SocketConnection1.AppServer.RollBackTrans;
Except
On E:Exceptiondo
begin
showmessage('更新时发生如下错误:'+e.message);
SocketConnection1.AppServer.RollBackTrans;
end;
end;
 
用数据库组件控制事务的前提是不同的数据模块共用一个连接。
如果server是多实例(每个实例一个数据库连接)的话还要保证客户端调用的是同一个实例,也就是从开始事务到事务结束都是由同一个实例处理。
 
谢谢大家的回答,十分感谢!!
 
后退
顶部