EAServer 区分数据库事务和组件事务

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

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

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

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

在组件中,数据库事务已经被组件事务接管,对于客户端来讲,若是使用有状态组件,则客户端或组件中能够控制组件事务的提交和会滚,而不能控制数据库事务的提交和会滚。生命周期

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

若是涉及到数据库的操做,无论是有状态组件仍是无状态组件,你都要在发布组件的时候,选择组件事务为“须要事务”,不然,一旦EAS操做数据库失败,会滚组件事务的时候,客户端将会接受到一个TRANSACTION_ROLLACK的异常。不少人都觉得是EAS的BUG,实际上是对组件事务和组件的生命周期不理解形成的。开发

相关文章
相关标签/搜索