连接池中被检查过的连接不能有任何未结束的事务与其相关联。
如果用户把一个连接的autoCommit属性设置成false,并且c3p0不能保证在这个连接上没有后续的事务工作的话,c3p0就会在check-in(当用户调用close()方法)的时候调用rollback()方法或者commit()方法。JDBC在有未结束事务的连接关闭时是应该回滚事务还是应该提交事务这个问题上保持了沉默(这简直不可原谅)。
在默认情况下,c3p0会当用户在有未结束事务的连接上调用close()方法时回滚事务。
你可以通过下面的配置参数更改这些相关行为:
[list]
[]autoCommitOnClose
[]foreIgnoreUnresolvedTransactions
[/list]
如果你想要c3p0在连接返回连接池时(checkin)提交未结束的事务,只需要把autoCommitOnClose设置为true。
如果你希望自己管理这些未结束的事务的话(并且没有设置连接的autoCommit属性),你可以把forceIgnoreUnresolvedTransactions设置为true。
我们强烈地不鼓励设置forceIgnoreUnresolvedTransactions的值,因为如果客户端在连接关闭前即没有回滚也没有提交事务,并且也没有开启自动提交的话,一些奇怪的不可再生的行为(unreproduceable behavior)和数据库被锁住的现象会发生。
REF:
[url]http://cwiki.ossez.com/pages/viewpage.action?pageId=4719833[/url]