Spring自建事务管理模块。而且这个事务管理是一个抽象设计,可以应用到很多场合,包括普通的DataSource,jta,jms和hibernate上。
要正确使用spring的事务,首先需要了解spring在事务设计上的一些概念
统观spring事务,围绕着两个核心PlatformTransactionManager和TransactionStatus
PlatformTransactionManager直译过来就是平台相关事务,这里的平台指的是“事务源”,包括刚才我说的DataSource,jta等等。这些无一不是一个事务源。广义的说,凡是可以完成事务性操作的对象,都可以设计出相对应的PlatformTransactionManager,只要这个事务源支持commit,rollback和getTransaction语意。
查看spring代码,可以发现这些manager实现事务,就是调用事务源的事务操作方法
比如
HibernateTransactionManager
代码
protected void doCommit(DefaultTransactionStatus status) ...{
HibernateTransactionObject txObject = (HibernateTransactionObject)
status.getTransaction();
if (status.isDebug()) ...{
logger.debug("Committing Hibernate transaction on session [" +
txObject.getSessionHolder().getSession() + "]");
}
try ...{
txObject.getSessionHolder().getTransaction().commit();
}
...
}
jdbc 的DataSourceTransactionManager
代码
protected void doCommit(DefaultTransactionStatus status) ...{
DataSourceTransactionObject txObject = (DataSourceTransactionObject)
status.getTransaction();
Connection con = txObject.getConnectionHolder().getConnection();
if (status.isDebug()) ...{
logger.debug("Committing JDBC transaction on connection [" + con
+ "]");
}
try ...{
con.commit();
}
...
}