From d218da59632c8e1fdee67eaa4a9e7e39747eef7f Mon Sep 17 00:00:00 2001 From: Robert von Burg Date: Wed, 5 Aug 2020 13:17:33 +0200 Subject: [PATCH] [New] Added ThreadLocal to TX for logging when multiple TX open in same thread --- .../strolch/persistence/api/AbstractTransaction.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java index e7f2ea56b..a617b2cb9 100644 --- a/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java +++ b/li.strolch.agent/src/main/java/li/strolch/persistence/api/AbstractTransaction.java @@ -103,6 +103,8 @@ public abstract class AbstractTransaction implements StrolchTransaction { private Certificate certificate; private PrivilegeContext privilegeContext; + private static final ThreadLocal threadLocalTx = new ThreadLocal<>(); + public AbstractTransaction(ComponentContainer container, StrolchRealm realm, Certificate certificate, String action, boolean readOnly) { DBC.PRE.assertNotNull("container must be set!", container); //$NON-NLS-1$ @@ -110,6 +112,11 @@ public abstract class AbstractTransaction implements StrolchTransaction { DBC.PRE.assertNotNull("certificate must be set!", certificate); //$NON-NLS-1$ DBC.PRE.assertNotNull("action must be set!", action); //$NON-NLS-1$ + if (threadLocalTx.get() != null) + logger.error("THIS THREAD HAS ALREADY OPENED A TX!"); + else + threadLocalTx.set(this); + this.container = container; this.privilegeHandler = container.getPrivilegeHandler(); this.realm = (InternalStrolchRealm) realm; @@ -1498,6 +1505,7 @@ public abstract class AbstractTransaction implements StrolchTransaction { } finally { releaseElementLocks(); + threadLocalTx.remove(); } } @@ -1516,6 +1524,7 @@ public abstract class AbstractTransaction implements StrolchTransaction { this.txResult.setState(TransactionState.FAILED); } finally { releaseElementLocks(); + threadLocalTx.remove(); } } @@ -1559,6 +1568,7 @@ public abstract class AbstractTransaction implements StrolchTransaction { this.txResult.setState(TransactionState.FAILED); } finally { releaseElementLocks(); + threadLocalTx.remove(); } }