Spring框架学习[Spring事务处理的实现](四)
/如果不允许使用savepoint保存点保存嵌套事务 else { //使用JTA的嵌套commit/rollback调用 boolean newSynchronization = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER); DefaultTransactionStatus status = newTransactionStatus( definition, transaction, true, newSynchronization, debugEnabled, null); doBegin(transaction, definition); prepareSynchronization(status, definition); return status; } } //对于事务传播特性为supported和required的处理 if (debugEnabled) { logger.debug("Participating in existing transaction"); } //校验已存在的事务,如果已有事务与事务属性配置不一致,则抛出异常 if (isValidateExistingTransaction()) { //如果事务隔离级别不是默认隔离级别 if (definition.getIsolationLevel() != TransactionDefinition.ISOLATION_DEFAULT) { //获取当前事务的隔离级别 Integer currentIsolationLevel = TransactionSynchronizationManager.getCurrentTransactionIsolationLevel(); //如果获取到的当前事务隔离级别为null获取不等于事务属性配置的隔离级别 if (currentIsolationLevel == null || currentIsolationLevel != definition.getIsolationLevel()) { Constants isoConstants = DefaultTransactionDefinition.constants; throw new IllegalTransactionStateException("Participating transaction with definition [" + definition + "] specifies isolation level which is incompatible with existing transaction: " + (currentIsolationLevel != null isoConstants.toCode(currentIsolationLevel, DefaultTransactionDefinition.PREFIX_ISOLATION) : "(unknown)")); } } //如果事务不是只读 if (!definition.isReadOnly()) { //如果当前已有事务是只读 if (TransactionSynchronizationManager.isCurrentTransactionReadOnly()) { throw new IllegalTransactionStateException("Participating transaction with definition [" + definition + "] is not marked as read-only but existing transaction is"); } } } boolean newSynchronization = (getTransactionSynchronization() != SYNCHRONIZATION_NEVER); //返回当前事务的执行状态 return prepareTransactionStatus(definition, transaction, false, newSynchronization, debugEnabled, null); }