LOG4J2-1010 LOG4J2-1447 cleaner context injection code now that 
ThreadContextMap2 is a MutableContextDataSupplier


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

Branch: refs/heads/master
Commit: 046198901839a31b77436759ec354c183e54a25a
Parents: 09eb4f4
Author: rpopma <rpo...@apache.org>
Authored: Thu Sep 22 11:02:54 2016 +0900
Committer: rpopma <rpo...@apache.org>
Committed: Thu Sep 22 11:02:54 2016 +0900

----------------------------------------------------------------------
 .../org/apache/logging/log4j/ThreadContextAccess.java  | 13 +++++++++++++
 .../log4j/core/impl/ContextDataInjectorFactory.java    |  6 +++---
 .../log4j/core/impl/ThreadContextDataInjector.java     | 11 ++++-------
 3 files changed, 20 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java 
b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
index 2e2a992..c5c33de 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/ThreadContextAccess.java
@@ -18,6 +18,7 @@
 package org.apache.logging.log4j;
 
 import org.apache.logging.log4j.spi.ThreadContextMap;
+import org.apache.logging.log4j.spi.ThreadContextMap2;
 
 /**
  * <em>This class is intended for internal log4j2 usage and should not be used 
directly by applications.</em>
@@ -43,4 +44,16 @@ public final class ThreadContextAccess {
     public static ThreadContextMap getThreadContextMap() {
         return ThreadContext.getThreadContextMap();
     }
+
+    /**
+     * Returns the internal data structure used to store thread context 
key-value pairs.
+     * <p><em>
+     * This method is intended for internal log4j2 usage.
+     * The returned data structure is not intended to be used directly by 
applications.
+     * </em></p>
+     * @return the internal data structure used to store thread context 
key-value pairs
+     */
+    public static ThreadContextMap2 getThreadContextMap2() {
+        return (ThreadContextMap2) ThreadContext.getThreadContextMap();
+    }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/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 31e1013..eb1e0ce 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
@@ -21,8 +21,8 @@ import org.apache.logging.log4j.core.ContextDataInjector;
 import org.apache.logging.log4j.core.LogEvent;
 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.spi.ThreadContextMap2;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.LoaderUtil;
 import org.apache.logging.log4j.util.PropertiesUtil;
@@ -79,10 +79,10 @@ public class ContextDataInjectorFactory {
 
     private static ContextDataInjector createDefaultInjector() {
         final ThreadContextMap threadContextMap = 
ThreadContextAccess.getThreadContextMap();
-        if (threadContextMap instanceof CopyOnWrite && threadContextMap 
instanceof MutableContextDataSupplier) {
+        if (threadContextMap instanceof CopyOnWrite && threadContextMap 
instanceof ThreadContextMap2) {
             return new 
ThreadContextDataInjector.ForCopyOnWriteMutableThreadContextMap();
         }
-        if (threadContextMap instanceof MutableContextDataSupplier) {
+        if (threadContextMap instanceof ThreadContextMap2) {
             return new 
ThreadContextDataInjector.ForGarbageFreeMutableThreadContextMap();
         }
         return new ThreadContextDataInjector.ForDefaultThreadContextMap();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/04619890/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 e57a807..8c72f70 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
@@ -25,7 +25,6 @@ import org.apache.logging.log4j.core.ContextDataInjector;
 import org.apache.logging.log4j.core.config.Property;
 import org.apache.logging.log4j.spi.ContextData;
 import org.apache.logging.log4j.spi.MutableContextData;
-import org.apache.logging.log4j.spi.MutableContextDataSupplier;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 
 /**
@@ -119,15 +118,14 @@ public class ThreadContextDataInjector  {
             // modified.
             copyProperties(props, reusable);
 
-            final ContextData immutableCopy = ((MutableContextDataSupplier) 
ThreadContextAccess.getThreadContextMap())
-                    .getMutableContextData();
+            final ContextData immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getMutableContextData();
             reusable.putAll(immutableCopy);
             return reusable;
         }
 
         @Override
         public ContextData rawContextData() {
-            return ((MutableContextDataSupplier) 
ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+            return 
ThreadContextAccess.getThreadContextMap2().getMutableContextData();
         }
     }
 
@@ -153,8 +151,7 @@ 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 =
-                    ((MutableContextDataSupplier) 
ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+            final MutableContextData immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getMutableContextData();
             if (props == null || props.isEmpty()) {
                 return immutableCopy;
             }
@@ -167,7 +164,7 @@ public class ThreadContextDataInjector  {
 
         @Override
         public ContextData rawContextData() {
-            return ((MutableContextDataSupplier) 
ThreadContextAccess.getThreadContextMap()).getMutableContextData();
+            return 
ThreadContextAccess.getThreadContextMap2().getMutableContextData();
         }
     }
 

Reply via email to