Merge branch '5.3.x' into main
This commit is contained in:
commit
c1856d24e2
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -68,8 +68,8 @@ public abstract class TransactionContextManager {
|
|||
* Create a {@link TransactionContext} and register it in the subscriber {@link Context}.
|
||||
* @return functional context registration.
|
||||
* @throws IllegalStateException if a transaction context is already associated.
|
||||
* @see Mono#subscriberContext(Function)
|
||||
* @see Flux#subscriberContext(Function)
|
||||
* @see Mono#contextWrite(Function)
|
||||
* @see Flux#contextWrite(Function)
|
||||
*/
|
||||
public static Function<Context, Context> createTransactionContext() {
|
||||
return context -> context.put(TransactionContext.class, new TransactionContext());
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -350,12 +350,14 @@ public abstract class AbstractReactiveTransactionAspectTests {
|
|||
}
|
||||
|
||||
private void checkReactiveTransaction(boolean expected) {
|
||||
Mono.subscriberContext().handle((context, sink) -> {
|
||||
if (context.hasKey(TransactionContext.class) != expected) {
|
||||
fail("Should have thrown NoTransactionException");
|
||||
}
|
||||
sink.complete();
|
||||
}).block();
|
||||
Mono.deferContextual(Mono::just)
|
||||
.handle((context, sink) -> {
|
||||
if (context.hasKey(TransactionContext.class) != expected) {
|
||||
fail("Should have thrown NoTransactionException");
|
||||
}
|
||||
sink.complete();
|
||||
})
|
||||
.block();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2019 the original author or authors.
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -41,19 +41,19 @@ public class ReactiveTransactionSupportTests {
|
|||
ReactiveTransactionManager tm = new ReactiveTestTransactionManager(false, true);
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_SUPPORTS))
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.as(StepVerifier::create).consumeNextWith(actual -> assertThat(actual.hasTransaction()).isFalse()
|
||||
).verifyComplete();
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED))
|
||||
.cast(GenericReactiveTransaction.class).subscriberContext(TransactionContextManager.createTransactionContext())
|
||||
.cast(GenericReactiveTransaction.class).contextWrite(TransactionContextManager.createTransactionContext())
|
||||
.as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
assertThat(actual.hasTransaction()).isTrue();
|
||||
assertThat(actual.isNewTransaction()).isTrue();
|
||||
}).verifyComplete();
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY))
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.as(StepVerifier::create).expectError(IllegalTransactionStateException.class).verify();
|
||||
}
|
||||
|
||||
|
@ -62,21 +62,21 @@ public class ReactiveTransactionSupportTests {
|
|||
ReactiveTransactionManager tm = new ReactiveTestTransactionManager(true, true);
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_SUPPORTS))
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
assertThat(actual.getTransaction()).isNotNull();
|
||||
assertThat(actual.isNewTransaction()).isFalse();
|
||||
}).verifyComplete();
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRED))
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
assertThat(actual.getTransaction()).isNotNull();
|
||||
assertThat(actual.isNewTransaction()).isFalse();
|
||||
}).verifyComplete();
|
||||
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_MANDATORY))
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).cast(GenericReactiveTransaction.class)
|
||||
.as(StepVerifier::create).consumeNextWith(actual -> {
|
||||
assertThat(actual.getTransaction()).isNotNull();
|
||||
assertThat(actual.isNewTransaction()).isFalse();
|
||||
|
@ -87,7 +87,7 @@ public class ReactiveTransactionSupportTests {
|
|||
public void commitWithoutExistingTransaction() {
|
||||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(false, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).flatMap(tm::commit)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext())
|
||||
.contextWrite(TransactionContextManager.createTransactionContext())
|
||||
.as(StepVerifier::create).verifyComplete();
|
||||
|
||||
assertHasBegan(tm);
|
||||
|
@ -101,7 +101,7 @@ public class ReactiveTransactionSupportTests {
|
|||
public void rollbackWithoutExistingTransaction() {
|
||||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(false, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).flatMap(tm::rollback)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
|
||||
assertHasBegan(tm);
|
||||
|
@ -116,7 +116,7 @@ public class ReactiveTransactionSupportTests {
|
|||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(false, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).doOnNext(ReactiveTransaction::setRollbackOnly)
|
||||
.flatMap(tm::commit)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
|
||||
assertHasBegan(tm);
|
||||
|
@ -130,7 +130,7 @@ public class ReactiveTransactionSupportTests {
|
|||
public void commitWithExistingTransaction() {
|
||||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(true, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).flatMap(tm::commit)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext())
|
||||
.contextWrite(TransactionContextManager.createTransactionContext())
|
||||
.as(StepVerifier::create).verifyComplete();
|
||||
|
||||
assertHasNotBegan(tm);
|
||||
|
@ -144,7 +144,7 @@ public class ReactiveTransactionSupportTests {
|
|||
public void rollbackWithExistingTransaction() {
|
||||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(true, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).flatMap(tm::rollback)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
|
||||
assertHasNotBegan(tm);
|
||||
|
@ -158,7 +158,7 @@ public class ReactiveTransactionSupportTests {
|
|||
public void rollbackOnlyWithExistingTransaction() {
|
||||
ReactiveTestTransactionManager tm = new ReactiveTestTransactionManager(true, true);
|
||||
tm.getReactiveTransaction(new DefaultTransactionDefinition()).doOnNext(ReactiveTransaction::setRollbackOnly).flatMap(tm::commit)
|
||||
.subscriberContext(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.contextWrite(TransactionContextManager.createTransactionContext()).as(StepVerifier::create)
|
||||
.verifyComplete();
|
||||
|
||||
assertHasNotBegan(tm);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2020 the original author or authors.
|
||||
* Copyright 2002-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -28,7 +28,7 @@ import org.springframework.transaction.*
|
|||
import org.springframework.transaction.reactive.TransactionContext
|
||||
import reactor.core.publisher.Mono
|
||||
import reactor.core.publisher.SynchronousSink
|
||||
import reactor.util.context.Context
|
||||
import reactor.util.context.ContextView
|
||||
import java.lang.reflect.Method
|
||||
import kotlin.coroutines.Continuation
|
||||
|
||||
|
@ -299,14 +299,15 @@ abstract class AbstractCoroutinesTransactionAspectTests {
|
|||
}
|
||||
}
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
private fun checkReactiveTransaction(expected: Boolean) {
|
||||
Mono.subscriberContext().handle { context: Context, sink: SynchronousSink<Any?> ->
|
||||
if (context.hasKey(TransactionContext::class.java) != expected) {
|
||||
Fail.fail<Any>("Should have thrown NoTransactionException")
|
||||
}
|
||||
sink.complete()
|
||||
}.block()
|
||||
Mono.deferContextual{context -> Mono.just(context)}
|
||||
.handle { context: ContextView, sink: SynchronousSink<Any?> ->
|
||||
if (context.hasKey(TransactionContext::class.java) != expected) {
|
||||
Fail.fail<Any>("Should have thrown NoTransactionException")
|
||||
}
|
||||
sink.complete()
|
||||
}
|
||||
.block()
|
||||
}
|
||||
|
||||
protected open fun advised(target: Any, rtm: ReactiveTransactionManager, tas: Array<TransactionAttributeSource>): Any {
|
||||
|
|
Loading…
Reference in New Issue