关于事务( Transation ),大家肯定都不陌生了,因为作为一个 Web 程序开发人员来说,我们一般都会和数据库打交道,然后对数据库中的数据进行一系列的操作,那么为了保证我们对数据操作的合理性我们就不能不用到事务,虽然事务的实现不需要我们去操心,但是我们还是需要对事务进行一些了解,这样我们才能够明白我们日常所使用的东西,比如我们常用的开源框架 Spring Hibernat 等都会涉及到事务的问题,虽然事务有很多不同的实现,如符合 JTA 的事先, JDBC 的实现等等,但是其原理都是差不多的。

 

对于事务的理解,这个我觉得有必要说一下,一般大家看到的理解都是很正式的、书面的,有时候让人觉得有些乱,并且细节的东西太多,在这里我就不说说课贴书了,呵呵,那我就把我自己的一点理解说一下:刚接触到事务的时候,感觉还有些模糊,慢慢的感觉清晰了一些,事务是为了什么而产生的呢?就是为了对付并发而造成的对数据的修改以及读取时的错误(或者说是一些不正常的现象),如果没有并发,没有资源的同时访问,估计也就用不到事务这个玩意了,呵呵,就像我们在单击上使用的单用户的软件一样,应该不会用到事务吧,一般又没有人跟你争,控制个啥子啊!我觉得事务就可以这么理解。

 

而对于事务的分类,一般分为本地事务,即一个数据库的情况;再一个就是全局事务,也就是多个数据库的情况(其数据库事务的控制称为 XA ),具体的情况可以看下面几个链接的介绍:

http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx 关于数据库事务的基本概念

http://www.huihoo.com/middleware/trade_middleware.html 里面有介绍关于 XA 的内容

http://www.javaeye.com/topic/6302 对跨数据库事务的一些讨论(总结一下就是一般采用两阶段提交的方式来解决跨数据库的事务问题)

http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx MS 的关于单阶段和多阶段事务的提交的一些说明文档

 

并且还要支持 XA 的数据库连接池,开源的如 XAPool 等。

 

要说的就是这么多了,估计也基本够在 Web 开发中对其有一个了解 ~ 如果有更加深入的内容再进行讨论和补充。