You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2016/08/27 08:04:43 UTC

[10/10] logging-log4j2 git commit: LOG4J2-1349 use the new CopyOnWrite, MutableContextDataSupplier interfaces to determine which strategy to use for injecting context data from the ThreadContextMap

LOG4J2-1349 use the new CopyOnWrite, MutableContextDataSupplier interfaces to determine which strategy to use for injecting context data from the ThreadContextMap


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/5edcfe82
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/5edcfe82
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/5edcfe82

Branch: refs/heads/LOG4J2-1349-gcfree-threadcontext
Commit: 5edcfe8234ef78b00d297615c592fbcc2a7c77c0
Parents: 0ae2ab8
Author: rpopma <rp...@apache.org>
Authored: Sat Aug 27 17:04:26 2016 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sat Aug 27 17:04:26 2016 +0900

----------------------------------------------------------------------
 .../log4j/core/impl/ContextDataInjectorFactory.java      |  8 ++++----
 .../log4j/core/impl/ThreadContextDataInjector.java       | 11 +++++------
 2 files changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5edcfe82/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
index fa1c28f..947fbb0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataInjectorFactory.java
@@ -16,12 +16,12 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.spi.AbstractCopyOnWriteMutableThreadContext;
 import org.apache.logging.log4j.spi.AbstractGarbageFreeMutableThreadContext;
 import org.apache.logging.log4j.spi.ContextData;
+import org.apache.logging.log4j.spi.CopyOnWrite;
+import org.apache.logging.log4j.spi.MutableContextDataSupplier;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.LoaderUtil;
@@ -73,10 +73,10 @@ public class ContextDataInjectorFactory {
 
     private static ContextDataInjector createDefaultInjector() {
         final ThreadContextMap threadContextMap = ThreadContextAccess.getThreadContextMap();
-        if (threadContextMap instanceof AbstractCopyOnWriteMutableThreadContext) {
+        if (threadContextMap instanceof CopyOnWrite && threadContextMap instanceof MutableContextDataSupplier) {
             return new ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap();
         }
-        if (threadContextMap instanceof AbstractGarbageFreeMutableThreadContext) {
+        if (threadContextMap instanceof MutableContextDataSupplier) {
             return new ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap();
         }
         return new ThreadContextDataInjector.ForDefaultThreadContextMap();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/5edcfe82/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
index 6c56520..eeaaf4c 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ThreadContextDataInjector.java
@@ -22,10 +22,9 @@ import java.util.Map;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.spi.AbstractCopyOnWriteMutableThreadContext;
-import org.apache.logging.log4j.spi.AbstractGarbageFreeMutableThreadContext;
 import org.apache.logging.log4j.spi.ContextData;
 import org.apache.logging.log4j.spi.MutableContextData;
+import org.apache.logging.log4j.spi.MutableContextDataSupplier;
 
 /**
  * {@code ThreadContextDataInjector} contains a number of strategies for copying key-value pairs from the various
@@ -107,8 +106,8 @@ public class ThreadContextDataInjector  {
             // modified.
             copyProperties(props, reusable);
 
-            final ContextData immutableCopy = ((AbstractGarbageFreeMutableThreadContext)
-                    ThreadContextAccess.getThreadContextMap()).getContextData();
+            final ContextData immutableCopy = ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap())
+                    .getMutableContextData();
             reusable.putAll(immutableCopy);
             return reusable;
         }
@@ -136,8 +135,8 @@ public class ThreadContextDataInjector  {
         public MutableContextData injectContextData(final List<Property> props, final MutableContextData reusable) {
             // If there are no configuration properties we want to just return the ThreadContext's MutableContextData:
             // it is a copy-on-write data structure so we are sure ThreadContext changes will not affect our copy.
-            final MutableContextData immutableCopy = ((AbstractCopyOnWriteMutableThreadContext)
-                    ThreadContextAccess.getThreadContextMap()).getContextData();
+            final MutableContextData immutableCopy =
+                    ((MutableContextDataSupplier) ThreadContextAccess.getThreadContextMap()).getMutableContextData();
             if (props == null || props.isEmpty()) {
                 return immutableCopy;
             }