parent
9d3de4ff68
commit
84a4b44cf0
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2002-2024 the original author or authors.
|
||||
* Copyright 2002-2025 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.
|
||||
|
|
@ -16,7 +16,6 @@
|
|||
|
||||
package org.springframework.orm.jpa;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import jakarta.persistence.EntityManager;
|
||||
|
|
@ -46,21 +45,25 @@ import static org.mockito.Mockito.times;
|
|||
import static org.mockito.Mockito.verify;
|
||||
|
||||
/**
|
||||
* Unit tests for {@link JpaTransactionManager}.
|
||||
* @author Costin Leau
|
||||
* @author Juergen Hoeller
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
class JpaTransactionManagerTests {
|
||||
|
||||
private EntityManagerFactory factory = mock();
|
||||
private static final List<String> testList = List.of("test");
|
||||
|
||||
private EntityManager manager = mock();
|
||||
|
||||
private EntityTransaction tx = mock();
|
||||
private final EntityManagerFactory factory = mock();
|
||||
|
||||
private JpaTransactionManager tm = new JpaTransactionManager(factory);
|
||||
private final EntityManager manager = mock();
|
||||
|
||||
private TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
private final EntityTransaction tx = mock();
|
||||
|
||||
private final JpaTransactionManager tm = new JpaTransactionManager(factory);
|
||||
|
||||
private final TransactionTemplate tt = new TransactionTemplate(tm);
|
||||
|
||||
|
||||
@BeforeEach
|
||||
|
|
@ -81,18 +84,15 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testTransactionCommit() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
Object result = tt.execute(status -> {
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -107,9 +107,6 @@ class JpaTransactionManagerTests {
|
|||
given(tx.getRollbackOnly()).willReturn(true);
|
||||
willThrow(new RollbackException()).given(tx).commit();
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -117,9 +114,9 @@ class JpaTransactionManagerTests {
|
|||
Object result = tt.execute(status -> {
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
}
|
||||
catch (TransactionSystemException tse) {
|
||||
// expected
|
||||
|
|
@ -137,9 +134,6 @@ class JpaTransactionManagerTests {
|
|||
void testTransactionRollback() {
|
||||
given(tx.isActive()).willReturn(true);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -159,9 +153,6 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testTransactionRollbackWithAlreadyRolledBack() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -182,9 +173,6 @@ class JpaTransactionManagerTests {
|
|||
void testTransactionRollbackOnly() {
|
||||
given(tx.isActive()).willReturn(true);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -194,7 +182,7 @@ class JpaTransactionManagerTests {
|
|||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
status.setRollbackOnly();
|
||||
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
|
|
@ -207,9 +195,6 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testParticipatingTransactionWithCommit() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -218,7 +203,7 @@ class JpaTransactionManagerTests {
|
|||
|
||||
return tt.execute(status1 -> {
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -234,9 +219,6 @@ class JpaTransactionManagerTests {
|
|||
void testParticipatingTransactionWithRollback() {
|
||||
given(tx.isActive()).willReturn(true);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -263,9 +245,6 @@ class JpaTransactionManagerTests {
|
|||
given(tx.getRollbackOnly()).willReturn(true);
|
||||
willThrow(new RollbackException()).given(tx).commit();
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -293,9 +272,6 @@ class JpaTransactionManagerTests {
|
|||
void testParticipatingTransactionWithRequiresNew() {
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -303,10 +279,10 @@ class JpaTransactionManagerTests {
|
|||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
return tt.execute(status1 -> {
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -320,10 +296,6 @@ class JpaTransactionManagerTests {
|
|||
void testParticipatingTransactionWithRequiresNewAndPrebound() {
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -336,10 +308,10 @@ class JpaTransactionManagerTests {
|
|||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
return tt.execute(status1 -> {
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
}
|
||||
finally {
|
||||
TransactionSynchronizationManager.unbindResource(factory);
|
||||
|
|
@ -358,9 +330,6 @@ class JpaTransactionManagerTests {
|
|||
void testPropagationSupportsAndRequiresNew() {
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -370,10 +339,10 @@ class JpaTransactionManagerTests {
|
|||
tt2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
return tt2.execute(status1 -> {
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -387,9 +356,6 @@ class JpaTransactionManagerTests {
|
|||
void testPropagationSupportsAndRequiresNewAndEarlyAccess() {
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
|
||||
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
||||
|
|
@ -401,10 +367,10 @@ class JpaTransactionManagerTests {
|
|||
tt2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
|
||||
return tt2.execute(status1 -> {
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -456,9 +422,6 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testTransactionCommitWithPropagationSupports() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
|
|
@ -469,9 +432,9 @@ class JpaTransactionManagerTests {
|
|||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
|
||||
assertThat(status.isNewTransaction()).isFalse();
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -505,9 +468,6 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testTransactionCommitWithPrebound() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
TransactionSynchronizationManager.bindResource(factory, new EntityManagerHolder(manager));
|
||||
|
|
@ -517,9 +477,9 @@ class JpaTransactionManagerTests {
|
|||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory);
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
@ -563,9 +523,6 @@ class JpaTransactionManagerTests {
|
|||
|
||||
@Test
|
||||
void testTransactionCommitWithPreboundAndPropagationSupports() {
|
||||
final List<String> l = new ArrayList<>();
|
||||
l.add("test");
|
||||
|
||||
tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isFalse();
|
||||
|
|
@ -578,9 +535,9 @@ class JpaTransactionManagerTests {
|
|||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isTrue();
|
||||
assertThat(status.isNewTransaction()).isFalse();
|
||||
EntityManagerFactoryUtils.getTransactionalEntityManager(factory).flush();
|
||||
return l;
|
||||
return testList;
|
||||
});
|
||||
assertThat(result).isSameAs(l);
|
||||
assertThat(result).isSameAs(testList);
|
||||
|
||||
assertThat(TransactionSynchronizationManager.hasResource(factory)).isTrue();
|
||||
assertThat(TransactionSynchronizationManager.isSynchronizationActive()).isFalse();
|
||||
|
|
|
|||
Loading…
Reference in New Issue