This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-3091
in repository https://gitbox.apache.org/repos/asf/isis.git

commit f0edda908c95b9dfa37ee5441545d98ff156f789
Author: Dan Haywood <[email protected]>
AuthorDate: Mon Aug 1 08:38:27 2022 +0100

    ISIS-3091: adds guard to ignore setRollbackOnly if PM already closed
---
 .../jdo/spring/integration/JdoTransactionManager.java          | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git 
a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/integration/JdoTransactionManager.java
 
b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/integration/JdoTransactionManager.java
index 9b8c0faacb..1ed2f189a6 100644
--- 
a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/integration/JdoTransactionManager.java
+++ 
b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/integration/JdoTransactionManager.java
@@ -41,6 +41,8 @@ import 
org.springframework.transaction.support.DelegatingTransactionDefinition;
 import org.springframework.transaction.support.ResourceTransactionManager;
 import 
org.springframework.transaction.support.TransactionSynchronizationManager;
 
+import lombok.val;
+
 /**
  * {@link org.springframework.transaction.PlatformTransactionManager} 
implementation for a
  * single JDO {@link javax.jdo.PersistenceManagerFactory}. Binds a JDO 
PersistenceManager
@@ -467,9 +469,15 @@ public class JdoTransactionManager extends 
AbstractPlatformTransactionManager
        @Override
        protected void doSetRollbackOnly(DefaultTransactionStatus status) {
                JdoTransactionObject txObject = (JdoTransactionObject) 
status.getTransaction();
+               val persistenceManager = 
txObject.getPersistenceManagerHolder().getPersistenceManager();
+               if (persistenceManager.isClosed()) {
+                       logger.warn("Request to set JDO transaction on 
PersistenceManager [" +
+                                       persistenceManager + "] rollback-only 
ignored; PM is closed");
+                       return;
+               }
                if (status.isDebug()) {
                        logger.debug("Setting JDO transaction on 
PersistenceManager [" +
-                                       
txObject.getPersistenceManagerHolder().getPersistenceManager() + "] 
rollback-only");
+                                       persistenceManager + "] rollback-only");
                }
                txObject.setRollbackOnly();
        }

Reply via email to