Example usage for org.springframework.transaction.reactive TransactionSynchronizationManager clearSynchronization

List of usage examples for org.springframework.transaction.reactive TransactionSynchronizationManager clearSynchronization

Introduction

In this page you can find the example usage for org.springframework.transaction.reactive TransactionSynchronizationManager clearSynchronization.

Prototype

public void clearSynchronization() throws IllegalStateException 

Source Link

Document

Deactivate transaction synchronization for the current context.

Usage

From source file:org.springframework.transaction.reactive.AbstractReactiveTransactionManager.java

/**
 * Suspend all current synchronizations and deactivate transaction
 * synchronization for the current transaction context.
 * @param synchronizationManager the synchronization manager bound to the current transaction
 * @return the List of suspended TransactionSynchronization objects
 *///from www  . ja va  2 s .  co m
private Mono<List<TransactionSynchronization>> doSuspendSynchronization(
        TransactionSynchronizationManager synchronizationManager) {

    List<TransactionSynchronization> suspendedSynchronizations = synchronizationManager.getSynchronizations();
    return Flux.fromIterable(suspendedSynchronizations).concatMap(TransactionSynchronization::suspend)
            .then(Mono.defer(() -> {
                synchronizationManager.clearSynchronization();
                return Mono.just(suspendedSynchronizations);
            }));
}

From source file:org.springframework.transaction.reactive.AbstractReactiveTransactionManager.java

/**
 * Trigger {@code afterCompletion} callbacks.
 * @param synchronizationManager the synchronization manager bound to the current transaction
 * @param status object representing the transaction
 * @param completionStatus completion status according to TransactionSynchronization constants
 *//*  w w w .  j  a va2s .  co  m*/
private Mono<Void> triggerAfterCompletion(TransactionSynchronizationManager synchronizationManager,
        GenericReactiveTransaction status, int completionStatus) {

    if (status.isNewSynchronization()) {
        List<TransactionSynchronization> synchronizations = synchronizationManager.getSynchronizations();
        synchronizationManager.clearSynchronization();
        if (!status.hasTransaction() || status.isNewTransaction()) {
            if (status.isDebug()) {
                logger.trace("Triggering afterCompletion synchronization");
            }
            // No transaction or new transaction for the current scope ->
            // invoke the afterCompletion callbacks immediately
            return invokeAfterCompletion(synchronizationManager, synchronizations, completionStatus);
        } else if (!synchronizations.isEmpty()) {
            // Existing transaction that we participate in, controlled outside
            // of the scope of this Spring transaction manager -> try to register
            // an afterCompletion callback with the existing (JTA) transaction.
            return registerAfterCompletionWithExistingTransaction(synchronizationManager,
                    status.getTransaction(), synchronizations);
        }
    }

    return Mono.empty();
}