|
28 | 28 | import org.springframework.transaction.annotation.Propagation;
|
29 | 29 | import org.springframework.transaction.annotation.RestrictedTransactionalEventListenerFactory;
|
30 | 30 | import org.springframework.transaction.annotation.Transactional;
|
| 31 | +import org.springframework.transaction.event.TransactionalApplicationListenerMethodAdapterTests.SampleEvents.SampleEventsWithTransactionalAnnotation; |
31 | 32 | import org.springframework.transaction.support.TransactionSynchronization;
|
32 | 33 | import org.springframework.transaction.support.TransactionSynchronizationManager;
|
33 | 34 | import org.springframework.util.ClassUtils;
|
@@ -157,6 +158,34 @@ void withAsyncTransactionalAnnotation() {
|
157 | 158 | assertThatNoException().isThrownBy(() -> factory.createApplicationListener("test", SampleEvents.class, m));
|
158 | 159 | }
|
159 | 160 |
|
| 161 | + @Test |
| 162 | + void withTransactionalAnnotationOnEnclosingClass() { |
| 163 | + RestrictedTransactionalEventListenerFactory factory = new RestrictedTransactionalEventListenerFactory(); |
| 164 | + Method m = ReflectionUtils.findMethod(SampleEvents.SampleEventsWithTransactionalAnnotation.class, "defaultPhase", String.class); |
| 165 | + assertThatIllegalStateException().isThrownBy(() -> factory.createApplicationListener("test", SampleEvents.SampleEventsWithTransactionalAnnotation.class, m)); |
| 166 | + } |
| 167 | + |
| 168 | + @Test |
| 169 | + void withTransactionalRequiresNewAnnotationAndTransactionalAnnotationOnEnclosingClass() { |
| 170 | + RestrictedTransactionalEventListenerFactory factory = new RestrictedTransactionalEventListenerFactory(); |
| 171 | + Method m = ReflectionUtils.findMethod(SampleEvents.SampleEventsWithTransactionalAnnotation.class, "withTransactionalRequiresNewAnnotation", String.class); |
| 172 | + assertThatNoException().isThrownBy(() -> factory.createApplicationListener("test", SampleEvents.SampleEventsWithTransactionalAnnotation.class, m)); |
| 173 | + } |
| 174 | + |
| 175 | + @Test |
| 176 | + void withTransactionalNotSupportedAnnotationAndTransactionalAnnotationOnEnclosingClass() { |
| 177 | + RestrictedTransactionalEventListenerFactory factory = new RestrictedTransactionalEventListenerFactory(); |
| 178 | + Method m = ReflectionUtils.findMethod(SampleEvents.SampleEventsWithTransactionalAnnotation.class, "withTransactionalNotSupportedAnnotation", String.class); |
| 179 | + assertThatNoException().isThrownBy(() -> factory.createApplicationListener("test", SampleEvents.SampleEventsWithTransactionalAnnotation.class, m)); |
| 180 | + } |
| 181 | + |
| 182 | + @Test |
| 183 | + void withAsyncTransactionalAnnotationAndTransactionalAnnotationOnEnclosingClass() { |
| 184 | + RestrictedTransactionalEventListenerFactory factory = new RestrictedTransactionalEventListenerFactory(); |
| 185 | + Method m = ReflectionUtils.findMethod(SampleEvents.SampleEventsWithTransactionalAnnotation.class, "withAsyncTransactionalAnnotation", String.class); |
| 186 | + assertThatNoException().isThrownBy(() -> factory.createApplicationListener("test", SampleEvents.SampleEventsWithTransactionalAnnotation.class, m)); |
| 187 | + } |
| 188 | + |
160 | 189 |
|
161 | 190 | private static void assertPhase(Method method, TransactionPhase expected) {
|
162 | 191 | assertThat(method).as("Method must not be null").isNotNull();
|
@@ -248,6 +277,29 @@ public void withTransactionalNotSupportedAnnotation(String data) {
|
248 | 277 | @Async @Transactional(propagation = Propagation.REQUIRES_NEW)
|
249 | 278 | public void withAsyncTransactionalAnnotation(String data) {
|
250 | 279 | }
|
| 280 | + |
| 281 | + @Transactional |
| 282 | + static class SampleEventsWithTransactionalAnnotation { |
| 283 | + |
| 284 | + @TransactionalEventListener |
| 285 | + public void defaultPhase(String data) { |
| 286 | + } |
| 287 | + |
| 288 | + @TransactionalEventListener |
| 289 | + @Transactional(propagation = Propagation.REQUIRES_NEW) |
| 290 | + public void withTransactionalRequiresNewAnnotation(String data) { |
| 291 | + } |
| 292 | + |
| 293 | + @TransactionalEventListener |
| 294 | + @Transactional(propagation = Propagation.NOT_SUPPORTED) |
| 295 | + public void withTransactionalNotSupportedAnnotation(String data) { |
| 296 | + } |
| 297 | + |
| 298 | + @TransactionalEventListener |
| 299 | + @Async @Transactional(propagation = Propagation.REQUIRES_NEW) |
| 300 | + public void withAsyncTransactionalAnnotation(String data) { |
| 301 | + } |
| 302 | + } |
251 | 303 | }
|
252 | 304 |
|
253 | 305 | }
|
0 commit comments