/** * Resume the given transaction. Delegates to the <code>doResume</code> * template method first, then resuming transaction synchronization. * @param transaction the current transaction object * @param resourcesHolder the object that holds suspended resources, * as returned by suspend * @see #doResume * @see #suspend */ private void resume(Object transaction, SuspendedResourcesHolder resourcesHolder) throws TransactionException { if (resourcesHolder.getSuspendedSynchronizations() != null) { TransactionSynchronizationManager.setActualTransactionActive(true); TransactionSynchronizationManager.setCurrentTransactionReadOnly(resourcesHolder.isReadOnly()); TransactionSynchronizationManager.setCurrentTransactionName(resourcesHolder.getName()); TransactionSynchronizationManager.initSynchronization(); for (Iterator it = resourcesHolder.getSuspendedSynchronizations().iterator(); it.hasNext();) { TransactionSynchronization synchronization = (TransactionSynchronization) it.next(); synchronization.resume(); TransactionSynchronizationManager.registerSynchronization(synchronization); } } doResume(transaction, resourcesHolder.getSuspendedResources()); }