From 94f367af70b1b9ce6dd3b6d5474297299a083ae6 Mon Sep 17 00:00:00 2001
From: rob bygrave
Date: Fri, 18 Dec 2020 09:58:16 +1300
Subject: [PATCH] #22 - Spring @Transactional with batch mode not invoking
ebean batch flush
---
.../spring/txn/SpringJdbcTransactionManager.java | 12 +++---------
.../java/org/example/EbeanServerFactoryBean.java | 2 ++
src/test/java/org/example/EbeanSpringModuleTest.java | 6 ++++++
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/main/java/io/ebean/spring/txn/SpringJdbcTransactionManager.java b/src/main/java/io/ebean/spring/txn/SpringJdbcTransactionManager.java
index fcac89aa6..ead75c2f4 100644
--- a/src/main/java/io/ebean/spring/txn/SpringJdbcTransactionManager.java
+++ b/src/main/java/io/ebean/spring/txn/SpringJdbcTransactionManager.java
@@ -49,7 +49,6 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
*/
@Override
public void setTransactionManager(Object txnMgr) {
-
// RB: At this stage not exposing TransactionManager to
// the public API and hence the Object type and casting here
this.transactionManager = (TransactionManager) txnMgr;
@@ -64,10 +63,8 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
*/
@Override
public Object getCurrentTransaction() {
-
// Get the current Spring ConnectionHolder associated to the current spring managed transaction
ConnectionHolder holder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
-
if (holder == null || !holder.isSynchronizedWithTransaction()) {
// no current Spring transaction
SpiTransaction currentEbeanTransaction = transactionManager.getInScope();
@@ -90,7 +87,6 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
// Create and register a Spring TransactionSynchronization for this transaction
springTxnLister = createSpringTxnListener(newTrans);
TransactionSynchronizationManager.registerSynchronization(springTxnLister);
-
return transactionManager.externalBeginTransaction(newTrans, TxScope.required());
}
}
@@ -102,7 +98,6 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
*
*/
private SpringTxnListener getSpringTxnListener() {
-
if (TransactionSynchronizationManager.isSynchronizationActive()) {
List synchronizations = TransactionSynchronizationManager.getSynchronizations();
if (synchronizations != null) {
@@ -114,7 +109,6 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
}
}
}
-
return null;
}
@@ -164,13 +158,13 @@ public class SpringJdbcTransactionManager implements ExternalTransactionManager
@Override
public void beforeCommit(boolean readOnly) {
- // Future note: for JPA2 locking we will
- // have beforeCommit events to fire
+ if (!readOnly) {
+ transaction.flushBatch();
+ }
}
@Override
public void afterCompletion(int status) {
-
switch (status) {
case STATUS_COMMITTED:
log.debug("Spring Txn [{}] committed", transaction.getId());
diff --git a/src/test/java/org/example/EbeanServerFactoryBean.java b/src/test/java/org/example/EbeanServerFactoryBean.java
index b5dc172ea..41a128a8f 100644
--- a/src/test/java/org/example/EbeanServerFactoryBean.java
+++ b/src/test/java/org/example/EbeanServerFactoryBean.java
@@ -1,5 +1,6 @@
package org.example;
+import io.ebean.annotation.PersistBatch;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
@@ -31,6 +32,7 @@ public class EbeanServerFactoryBean implements InitializingBean, FactoryBean