EAServer 区分数据库事务和组件事务
EAServer 区分数据库事务和组件事务
会哭的鳄鱼 发表于4个月前
EAServer 区分数据库事务和组件事务
  • 发表于 4个月前
  • 阅读 8
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

我们在做PB的两层开发时候,总是自己控制数据库事务的提交和会滚。没有办法,我们只能这样操作。

默认情况下,在pb中,数据库事务是从第一句SQL语句开始的,直到显示执行commit或则rollback,另外,我们可能除了使用sqlca这一系统自动定义的数据库事务对象以外,可能会自己再创建一个或则几个数据库事务对象以操作不同的数据库。

到了EAS下,我们不能再用这样的思路考虑问题了。

很多人总是试图在组件中使用commit或则rollback来控制数据库的提交和会滚,其实,在EAS下,组件中执行commit和rollback根本不会起到任何作用,EAS下,会自动将这两句放弃而不真正执行,之所以还可以在组件中写这两句,主要是为了让早期的两层的系统能顺利地移植到三层上来。另外,在组件中写commit和rollback,为非是为了给自己的代码增加一些信心罢了。

在组件中,数据库事务已经被组件事务接管,对于客户端来说,如果使用有状态组件,则客户端或组件中可以控制组件事务的提交和会滚,而不能控制数据库事务的提交和会滚。

如果是无状态组件,则当客户端调用完一个函数后,EAS将自动根据该组件的完成情况,决定是提交组件事务还是会滚组件事务。也就是说,无状态组件不用显式调用setcomplete()或则setabort(),但然,你也可以显示调用。

如果涉及到数据库的操作,不管是有状态组件还是无状态组件,你都要在发布组件的时候,选择组件事务为“需要事务”,否则,一旦EAS操作数据库失败,会滚组件事务的时候,客户端将会接受到一个TRANSACTION_ROLLACK的异常。很多人都以为是EAS的BUG,其实是对组件事务和组件的生命周期不理解造成的。

标签: EAServer 事务
共有 人打赏支持
粉丝 2
博文 35
码字总数 37778
×
会哭的鳄鱼
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: