长事务J2EE Activity Service

我们知道:事务必须服从ISO/IEC所制定的ACID原则,ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。


但是,如果你的应用事务超过几秒,那么ACID就帮不了你,更不用说持续几个小时、月和年的事务了,这是典型的long transaction problem,在过去几年中,没有人发现它的解决方案。

关键问题是如何实现ACID中的I(隔离性),并发控制算法中并没有超过一段时间操作的。目前有两种流派:悲观并发控制算法(Pessimistic concurrency control );乐观并发控制算法Optimistic concurrency control algorithms 。

Saga诞生了,Saga需要你定义compensating transactions,目前Web服务采取了compensating transactions. CORBA 已经定义了Activity Servic在Java世界有JSR 95: J2EETM Activity Service [JSR95] 用于扩展的事务。

对长时间操作事务感兴趣,继续参考原文:
http://www.theserverside.com/articles/article.tss?l=AcidShortDoses
[该贴被admin于2008-09-24 17:41修改过]

非常好的一篇事务讲解文章。
事务的伸缩性也是非常重要考量,我们平常都是短时间事务,而对于长事务,无论数据库的悲观锁还是乐观锁策略,都没有作用了。这时就要依赖JavaEE的HLS高级服务架构了。



[该贴被admin于2008-09-25 11:13修改过]