diff --git a/base-build/pom.xml b/base-build/pom.xml
index eb0abad..5ddda00 100644
--- a/base-build/pom.xml
+++ b/base-build/pom.xml
@@ -47,6 +47,7 @@
../base-hierarchical-datastore
../base-jdbc
../base-jdbc-tests
+ ../base-tx-tests
../base-cassandra
../base-cassandra-tests
../base-job
diff --git a/base-remote-tests/pom.xml b/base-remote-tests/pom.xml
index 285ea0c..57e0cda 100644
--- a/base-remote-tests/pom.xml
+++ b/base-remote-tests/pom.xml
@@ -13,9 +13,11 @@
- org.springframework
- spring-tx
+ com.telecominfraproject.wlan
+ base-tx-tests
+ ${tip-wlan-cloud.release.version}
+
org.springframework.boot
spring-boot-starter-test
diff --git a/base-remote-tests/src/main/java/com/telecominfraproject/wlan/remote/tests/BaseRemoteTest.java b/base-remote-tests/src/main/java/com/telecominfraproject/wlan/remote/tests/BaseRemoteTest.java
index f684988..6a38302 100644
--- a/base-remote-tests/src/main/java/com/telecominfraproject/wlan/remote/tests/BaseRemoteTest.java
+++ b/base-remote-tests/src/main/java/com/telecominfraproject/wlan/remote/tests/BaseRemoteTest.java
@@ -32,6 +32,7 @@ import org.springframework.transaction.support.SimpleTransactionStatus;
import org.springframework.transaction.support.TransactionSynchronization;
import org.springframework.transaction.support.TransactionSynchronizationManager;
+import com.telecominfraproject.wlan.core.server.tx.test.TxTestConfig;
import com.telecominfraproject.wlan.server.RemoteTestServer;
/**
@@ -75,6 +76,7 @@ import com.telecominfraproject.wlan.server.RemoteTestServer;
"tip.wlan.csrf-enabled=false" })
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
@Import(value = {
+ TxTestConfig.class
})
public abstract class BaseRemoteTest {
@@ -130,53 +132,6 @@ public abstract class BaseRemoteTest {
// @PropertySource({ "classpath:persistence-${envTarget:dev}.properties" })
public static class Config {
- @Bean
- @Primary
- public PlatformTransactionManager transactionManager() {
- PlatformTransactionManager ptm = new PlatformTransactionManager() {
-
- {
- LOG.info("*** Using simulated PlatformTransactionManager");
- }
-
- @Override
- public void rollback(TransactionStatus status) throws TransactionException {
- LOG.info("Simulating Rollback for {}", status);
- if (TransactionSynchronizationManager.isSynchronizationActive()) {
- TransactionSynchronizationManager.clearSynchronization();
- }
- }
-
- @Override
- public void commit(TransactionStatus status) throws TransactionException {
- LOG.info("Simulating Commit for {}", status);
- if (TransactionSynchronizationManager.isSynchronizationActive()) {
- List synchronizations = TransactionSynchronizationManager
- .getSynchronizations();
- if (synchronizations != null) {
- for (TransactionSynchronization synchronization : synchronizations) {
- synchronization.afterCommit();
- }
- }
-
- TransactionSynchronizationManager.clearSynchronization();
- }
- }
-
- @Override
- public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
- LOG.info("Simulating getTransaction for {}", definition);
- if (!TransactionSynchronizationManager.isSynchronizationActive()) {
- TransactionSynchronizationManager.initSynchronization();
- }
- TransactionStatus ts = new SimpleTransactionStatus();
- return ts;
- }
- };
-
- return ptm;
- }
-
}
protected int getNextCustomerId() {
diff --git a/base-tx-tests/pom.xml b/base-tx-tests/pom.xml
new file mode 100644
index 0000000..7c3dec4
--- /dev/null
+++ b/base-tx-tests/pom.xml
@@ -0,0 +1,21 @@
+
+ 4.0.0
+
+ com.telecominfraproject.wlan
+ tip-wlan-cloud-root-pom
+ 0.0.1-SNAPSHOT
+ ../../wlan-cloud-root
+
+ base-tx-tests
+ base-tx-tests
+ Common classes used by the unit tests that require transaction support.
+
+
+
+ org.springframework
+ spring-tx
+
+
+
+
diff --git a/base-tx-tests/src/main/java/com/telecominfraproject/wlan/core/server/tx/test/TxTestConfig.java b/base-tx-tests/src/main/java/com/telecominfraproject/wlan/core/server/tx/test/TxTestConfig.java
new file mode 100644
index 0000000..ffd11bd
--- /dev/null
+++ b/base-tx-tests/src/main/java/com/telecominfraproject/wlan/core/server/tx/test/TxTestConfig.java
@@ -0,0 +1,98 @@
+package com.telecominfraproject.wlan.core.server.tx.test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.TransactionDefinition;
+import org.springframework.transaction.TransactionException;
+import org.springframework.transaction.TransactionStatus;
+import org.springframework.transaction.support.SimpleTransactionStatus;
+import org.springframework.transaction.support.TransactionSynchronization;
+import org.springframework.transaction.support.TransactionSynchronizationManager;
+
+/**
+ * @author dtop
+ *
+ */
+@Configuration
+public class TxTestConfig {
+
+ private static final Logger LOG = LoggerFactory.getLogger(TxTestConfig.class);
+
+ @Bean
+ @Primary
+ public PlatformTransactionManager transactionManager() {
+ PlatformTransactionManager ptm = new PlatformTransactionManager() {
+ private ThreadLocal> currentTx = new ThreadLocal<>() ;
+
+ {
+ LOG.info("*** Using simulated PlatformTransactionManager");
+ }
+
+ @Override
+ public void rollback(TransactionStatus status) throws TransactionException {
+ LOG.debug("Simulating Rollback for {}", status);
+ if(currentTx.get().size() == 1 ) {
+ if (TransactionSynchronizationManager.isSynchronizationActive()) {
+ TransactionSynchronizationManager.clearSynchronization();
+ }
+ currentTx.remove();
+ } else {
+ currentTx.get().remove(currentTx.get().size() - 1 );
+ }
+ }
+
+ @Override
+ public void commit(TransactionStatus status) throws TransactionException {
+ LOG.debug("Simulating Commit for {}", status);
+ if(currentTx.get().size() == 1 ) {
+ if (TransactionSynchronizationManager.isSynchronizationActive()) {
+ List synchronizations = TransactionSynchronizationManager
+ .getSynchronizations();
+ if (synchronizations != null) {
+ for (TransactionSynchronization synchronization : synchronizations) {
+ synchronization.afterCommit();
+ }
+ }
+
+ TransactionSynchronizationManager.clearSynchronization();
+ }
+
+ currentTx.remove();
+ } else {
+ currentTx.get().remove(currentTx.get().size() - 1 );
+ }
+ }
+
+ @Override
+ public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
+ LOG.debug("Simulating getTransaction for {}", definition);
+ if (!TransactionSynchronizationManager.isSynchronizationActive()) {
+ TransactionSynchronizationManager.initSynchronization();
+ }
+
+ if (currentTx.get() == null) {
+ List txList = new ArrayList<>();
+ TransactionStatus ts = new SimpleTransactionStatus(true);
+ txList.add(ts);
+ currentTx.set(txList);
+ return ts;
+ } else {
+ List txList = currentTx.get();
+ TransactionStatus ts = new SimpleTransactionStatus(false);
+ txList.add(ts);
+ return ts;
+ }
+ }
+
+ };
+ return ptm;
+ }
+
+}