池化com+组件在异常抛出后不能rollback数据库操作的问题?我和ytwxw (wxw) 讨论未果,再次发贴

TOMWLD 2002-12-29 05:56:47
Translation DataModule接口中提供这样一个方法供客户端调用:
procedure Tmtsdm1.InsertTest;
var
SqlStr: string;
begin
SqlStr := 'INSERT INTO Unit(Unit) VALUES (' + #39 + '个' + #39 + ')';
try
acPHYMIS.Execute(SqlStr);
raise Exception.Create('Error occured');
SetComplete;
except
SetAbort;
raise;
end;
end;
意在测试com+的事务处理能否正确执行。
将组件安装后,在组件服务中该com+组件的属性设置中将“激活”页的“启用对象池”选项选中,执行客户端程序调用上面这个方法,发现com+的事务机制不能正确执行,数据会写入数据库中。如果不选中“启用对象池”,则一切正常,数据并不会写到数据库中。
说明:Translation DataModule的设置,事务属性:requires a transaction,允许object pooling,pooled设为true,无论将AutoComplete设为True或False都会出现上述情况。
该问题最先由ytwxw (wxw) 提出,至今尚未有结论,我也发现类似问题。我俩探讨后无法解决,特在此再开一贴。请各路com+高手帮忙解答!
...全文
42 54 打赏 收藏 转发到动态 举报
写回复
用AI写文章
54 条回复
切换为时间正序
请发表友善的回复…
发表回复
TOMWLD 2003-01-02
  • 打赏
  • 举报
回复
呵呵,结贴了
del_c_sharp 2003-01-01
  • 打赏
  • 举报
回复
看看源码~~~~~
TOMWLD 2003-01-01
  • 打赏
  • 举报
回复
go on
ytwxw 2003-01-01
  • 打赏
  • 举报
回复
继续关注
eastliangliang 2002-12-31
  • 打赏
  • 举报
回复
我今天发现用ADO做事务有不方便的地方,COM+的事务处理确实有它独到的地方,比如是用投票制,只有根函数才真正结束事务。
今天想了想,如果要用ADO事务,需要多加一个层来模拟客户端,根据各个函数的返回值来决定是否提交事务,好像有些不方便。不知我说的是否太模糊。
能用COM+的事务还是用的好。
下午公司开联欢会,得走了,大家元旦快乐。
ytwxw 2002-12-31
  • 打赏
  • 举报
回复
苹果
我试了你的方案

如果能控制好ado的事务,也可以。

这样的话,所有数据连接都只能内建在一个rdm中,对这个rdm实现object pooling 对不对?
ytwxw 2002-12-31
  • 打赏
  • 举报
回复
我的意思是如果我的一个事务是由多个组件的方法共同完成的话

用ado做事务处理 能够保证全部都rollback吗?
TOMWLD 2002-12-31
  • 打赏
  • 举报
回复
我在《com+技术大全》这本书看到这样的话:“MTS表面上有一组文档中给出的方法来支持对象池,然而,这些方法在MTS的运行环境中是不能实现的。你的确可以在MTS中实现对象池,但这需要编写一个资源分配器,而在大多数情况下,这在com+却是不需要的。”
如果是这样子的话,那么是否Translation Datamodule是基于mts的,因而并不能真正支持对象池的功能?
哪位方家验证过这个问题?
ytwxw 2002-12-31
  • 打赏
  • 举报
回复
5->事务处理
ytwxw 2002-12-31
  • 打赏
  • 举报
回复
TOMWLD(笑天)
有同感

我在试着将所有的5全都封装到一个rdm中呢,可是如果这样的话,com+的延展性又从喝7谈起呢?

急啊

高手们有没有解决办法啊 ?




TOMWLD 2002-12-31
  • 打赏
  • 举报
回复
在com+环境下开发,不用com+的事务处理,真是有些举步难艰呀
ytwxw 2002-12-31
  • 打赏
  • 举报
回复
我也发现了这个问题
如果要用面向足见的开发方式,用ado的事务控制根本就是不切实际的
我们不可能把所有的逻辑都封装到一个rdm中
del_c_sharp 2002-12-31
  • 打赏
  • 举报
回复
小小的bbs:
http://www.nxit.net/bbs
del_c_sharp 2002-12-31
  • 打赏
  • 举报
回复
今天才发现苹果是河北的,呵呵~~老乡中。。。。。。
TOMWLD 2002-12-31
  • 打赏
  • 举报
回复
顺便问一下,小小的个人主页谁知道?
TOMWLD 2002-12-30
  • 打赏
  • 举报
回复
苹果的问题我也遇到过,看来com+和midas结合的问题不少
eastliangliang 2002-12-30
  • 打赏
  • 举报
回复
苹果今天试了试,没发现不回滚啊,倒是第二次执行时说:

错误:分布式事务已完成,请将此会话等记到新事务或NULL事务中。

debug时发现没有执行setcomplete,可是李维分明说缺省是enablecommit啊。
不明白。
ytwxw 2002-12-30
  • 打赏
  • 举报
回复
好文章啊 一起研究吧
ytwxw 2002-12-30
  • 打赏
  • 举报
回复
我的mdac 是2.7啊 是delphi7 带的.
你要是搞定了 记的告诉我一声啊


ytwxw 2002-12-30
  • 打赏
  • 举报
回复
是的 我也见过要改注册表

你这骗文章的地址是多少?
加载更多回复(34)

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧