Document target method expectations for ReactiveTransactionManager
Closes gh-23277
This commit is contained in:
parent
a338a16b29
commit
a155a6b3e2
|
|
@ -38,6 +38,11 @@ within the method.
|
||||||
A reactive transaction managed by `ReactiveTransactionManager` uses the Reactor context
|
A reactive transaction managed by `ReactiveTransactionManager` uses the Reactor context
|
||||||
instead of thread-local attributes. As a consequence, all participating data access
|
instead of thread-local attributes. As a consequence, all participating data access
|
||||||
operations need to execute within the same Reactor context in the same reactive pipeline.
|
operations need to execute within the same Reactor context in the same reactive pipeline.
|
||||||
|
|
||||||
|
When configured with a `ReactiveTransactionManager`, all transaction-demarcated methods
|
||||||
|
are expected to return a reactive pipeline. Void methods or regular return types need
|
||||||
|
to be associated with a regular `PlatformTransactionManager`, e.g. through the
|
||||||
|
`transactionManager` attribute of the corresponding `@Transactional` declarations.
|
||||||
====
|
====
|
||||||
|
|
||||||
The following image shows a conceptual view of calling a method on a transactional proxy:
|
The following image shows a conceptual view of calling a method on a transactional proxy:
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,11 @@ import org.springframework.transaction.TransactionDefinition;
|
||||||
* all participating data access operations need to execute within the same
|
* all participating data access operations need to execute within the same
|
||||||
* Reactor context in the same reactive pipeline.
|
* Reactor context in the same reactive pipeline.
|
||||||
*
|
*
|
||||||
|
* <p><b>Note: When configured with a {@code ReactiveTransactionManager}, all
|
||||||
|
* transaction-demarcated methods are expected to return a reactive pipeline.</b>
|
||||||
|
* Void methods or regular return types need to be associated with a regular
|
||||||
|
* {@code PlatformTransactionManager}, e.g. through {@link #transactionManager()}.
|
||||||
|
*
|
||||||
* @author Colin Sampaleanu
|
* @author Colin Sampaleanu
|
||||||
* @author Juergen Hoeller
|
* @author Juergen Hoeller
|
||||||
* @author Sam Brannen
|
* @author Sam Brannen
|
||||||
|
|
|
||||||
|
|
@ -358,8 +358,8 @@ public abstract class TransactionAspectSupport implements BeanFactoryAware, Init
|
||||||
(isSuspendingFunction ? (hasSuspendingFlowReturnType ? Flux.class : Mono.class) : method.getReturnType());
|
(isSuspendingFunction ? (hasSuspendingFlowReturnType ? Flux.class : Mono.class) : method.getReturnType());
|
||||||
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(reactiveType);
|
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(reactiveType);
|
||||||
if (adapter == null) {
|
if (adapter == null) {
|
||||||
throw new IllegalStateException("Cannot apply reactive transaction to non-reactive return type: " +
|
throw new IllegalStateException("Cannot apply reactive transaction to non-reactive return type [" +
|
||||||
method.getReturnType());
|
method.getReturnType() + "] with specified transaction manager: " + tm);
|
||||||
}
|
}
|
||||||
return new ReactiveTransactionSupport(adapter);
|
return new ReactiveTransactionSupport(adapter);
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue