Spring框架学习[Spring具体事务处理器的实现](六)
的ConnectionHolders设置为null txObject.setConnectionHolder(null); ConnectionHolder conHolder = (ConnectionHolder) //解除事务对象和当前线程的绑定 TransactionSynchronizationManager.unbindResource(this.dataSource); return conHolder; } //事务恢复 protected void doResume(Object transaction, Object suspendedResources) { //获取已暂停事务的ConnectionHolder ConnectionHolder conHolder = (ConnectionHolder) suspendedResources; //重新将事务对象和当前线程绑定 TransactionSynchronizationManager.bindResource(this.dataSource, conHolder); } //事务提交 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(); } catch (SQLException ex) { throw new TransactionSystemException("Could not commit JDBC transaction", ex); } } //事务回滚 protected void doRollback(DefaultTransactionStatus status) { //获取事务对象 DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction(); //通过事务对象获取数据库连接 Connection con = txObject.getConnectionHolder().getConnection(); if (status.isDebug()) { logger.debug("Rolling back JDBC transaction on Connection [" + con + "]"); } try { //通过调用数据库连接的回滚方法完成事务回滚操作 con.rollback(); } catch (S
QLException ex) { throw new TransactionSystemException("Could not roll back JDBC transaction", ex); } } //设置回滚 protected void doSetRollbackOnly(DefaultTransactionStatus status) { DataSourceTransactionObject txObject = (DataSourceTransactionObject) status.getTransaction(); if (status.isDebug()) { logger.debug("Setting JDBC transaction [" + txObject.getConnectionHolder().getConnection() + "] rollback-only"); } txObject.setRollbackOnly(); } //操作完成之后清除操作 protected void doCleanupAfterCompletion(Object transaction) { DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction; //移除当前线程绑定的ConnectionHolder if (txObject.isNewConnectionHolder()) { TransactionSynchronizationManager.unbindResource(this.dataSource); } Connection con = txObject.getConnectionHolder().getConnection(); try { //如果事务对象保存了自动事务提交属性,则设置数据库连接的自动事务提交属性 if (txObject.isMustRestoreAutoCommit()) { con.setAutoCommit(true); } //事务结束后重置数据库连接 DataSourceUtils.resetConnectionAfterTransaction(con, txObject.getPreviousIsolationLevel()); } catch (Throwable ex) { logger.debug("Could not reset JDBC Connection after transaction", ex); } //如果事务对象中有新的ConnectionHolder if (txObject.isNewConnectionHolder()) { if (logger.isDebugEnabled()) { logger.debug("Releasing JDBC Connection [" + con + "] after transaction"); } //释放数据库连接 DataSourceUtils.releaseConnection(con, this.dataSource); } //清除事务对象的ConnectionHolder txObject.getConnectionHolder().clear(); }//数据源事务对象,内部类 private static class DataSourceTransactionObject extends JdbcTransactionObjectSupport { //是否有新的ConnectionHolder private boolean newConnectionHolder; //是否保存自动提交 private boolean mustRestoreAutoCommit; //设置ConnectionHo