From dcbe25c313f06750f7fb8a267869dedaa1a8cf97 Mon Sep 17 00:00:00 2001 From: Doychin Bondzhev Date: Mon, 10 Jun 2019 11:58:54 +0300 Subject: [PATCH 1/3] Use ListOrderedSet for thread context listeners. - Guarantees only one instance per listener in the collection - Guarantees predictable execution order - Added commons-collections4 as dependency to openejb-core. It was already there as transitive dependency from openjpa. Signed-off-by: Doychin Bondzhev --- container/openejb-core/pom.xml | 4 ++++ .../openejb/cdi/RequestScopedThreadContextListener.java | 2 +- .../main/java/org/apache/openejb/core/ThreadContext.java | 5 +++-- pom.xml | 6 ++++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/container/openejb-core/pom.xml b/container/openejb-core/pom.xml index b0ab0104750..62b5f0632b5 100644 --- a/container/openejb-core/pom.xml +++ b/container/openejb-core/pom.xml @@ -519,6 +519,10 @@ commons-collections commons-collections + + org.apache.commons + commons-collections4 + diff --git a/container/openejb-core/src/main/java/org/apache/openejb/cdi/RequestScopedThreadContextListener.java b/container/openejb-core/src/main/java/org/apache/openejb/cdi/RequestScopedThreadContextListener.java index 4e71875018f..471967b6522 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/cdi/RequestScopedThreadContextListener.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/cdi/RequestScopedThreadContextListener.java @@ -63,7 +63,7 @@ public void contextExited(final ThreadContext exitedContext, final ThreadContext } destroyContext.contextsService.endContext(RequestScoped.class, CdiAppContextsService.EJB_REQUEST_EVENT); - CdiAppContextsService.class.cast(destroyContext.contextsService).removeThreadLocals(); + destroyContext.contextsService.removeThreadLocals(); } private static final class DestroyContext { diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java index 5c4e7c00ca0..2ca4102d116 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java @@ -17,6 +17,7 @@ package org.apache.openejb.core; +import org.apache.commons.collections4.set.ListOrderedSet; import org.apache.openejb.BeanContext; import org.apache.openejb.core.transaction.TransactionPolicy; import org.apache.openejb.util.LogCategory; @@ -24,16 +25,16 @@ import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean; public class ThreadContext { private static final Logger log = Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources"); private static final ThreadLocal threadStorage = new ThreadLocal<>(); - private static final List listeners = new CopyOnWriteArrayList<>(); + private static final ListOrderedSet listeners = ListOrderedSet.listOrderedSet(new CopyOnWriteArraySet<>(), new CopyOnWriteArrayList<>()); private static final ThreadLocal asynchronousCancelled = new ThreadLocal<>(); public static ThreadContext getThreadContext() { diff --git a/pom.xml b/pom.xml index 754839ea445..45364e3a36e 100644 --- a/pom.xml +++ b/pom.xml @@ -163,6 +163,7 @@ 2.1 2.3 3.2.2 + 4.3 1.10 1.3.1 0.5 @@ -1587,6 +1588,11 @@ commons-collections ${commons-collections.version} + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + commons-codec commons-codec From 33db1cade5a8554fe91c7acc1407631b9057ef3e Mon Sep 17 00:00:00 2001 From: Doychin Bondzhev Date: Mon, 10 Jun 2019 15:07:41 +0300 Subject: [PATCH 2/3] Revert the addition of collections4 library. Rever back to the original code that used CopyOnWriteArraySet Signed-off-by: Doychin Bondzhev --- container/openejb-core/pom.xml | 4 ---- .../main/java/org/apache/openejb/core/ThreadContext.java | 3 ++- pom.xml | 6 ------ 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/container/openejb-core/pom.xml b/container/openejb-core/pom.xml index 62b5f0632b5..b0ab0104750 100644 --- a/container/openejb-core/pom.xml +++ b/container/openejb-core/pom.xml @@ -519,10 +519,6 @@ commons-collections commons-collections - - org.apache.commons - commons-collections4 - diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java index 2ca4102d116..5de48de9ec8 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java @@ -26,6 +26,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean; @@ -34,7 +35,7 @@ public class ThreadContext { private static final Logger log = Logger.getInstance(LogCategory.OPENEJB, "org.apache.openejb.util.resources"); private static final ThreadLocal threadStorage = new ThreadLocal<>(); - private static final ListOrderedSet listeners = ListOrderedSet.listOrderedSet(new CopyOnWriteArraySet<>(), new CopyOnWriteArrayList<>()); + private static final CopyOnWriteArraySet listeners = new CopyOnWriteArraySet<>(); private static final ThreadLocal asynchronousCancelled = new ThreadLocal<>(); public static ThreadContext getThreadContext() { diff --git a/pom.xml b/pom.xml index 45364e3a36e..754839ea445 100644 --- a/pom.xml +++ b/pom.xml @@ -163,7 +163,6 @@ 2.1 2.3 3.2.2 - 4.3 1.10 1.3.1 0.5 @@ -1588,11 +1587,6 @@ commons-collections ${commons-collections.version} - - org.apache.commons - commons-collections4 - ${commons-collections4.version} - commons-codec commons-codec From e08bf32ac4f35f42fd44a9fede8a78cdcda554b1 Mon Sep 17 00:00:00 2001 From: Doychin Bondzhev Date: Mon, 10 Jun 2019 15:08:52 +0300 Subject: [PATCH 3/3] Cleanup imports Signed-off-by: Doychin Bondzhev --- .../src/main/java/org/apache/openejb/core/ThreadContext.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java index 5de48de9ec8..2a5d57f0ea8 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/ThreadContext.java @@ -17,7 +17,6 @@ package org.apache.openejb.core; -import org.apache.commons.collections4.set.ListOrderedSet; import org.apache.openejb.BeanContext; import org.apache.openejb.core.transaction.TransactionPolicy; import org.apache.openejb.util.LogCategory; @@ -26,8 +25,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Set; -import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.atomic.AtomicBoolean;