Repository: logging-log4j2
Updated Branches:
  refs/heads/master b4fb66476 -> 800db9c7a


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
index 3d52c8f..50b5df5 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ContextDataFactory.java
@@ -16,31 +16,31 @@
  */
 package org.apache.logging.log4j.core.impl;
 
-import org.apache.logging.log4j.util.SortedStringArrayMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.PropertiesUtil;
 
 /**
- * Factory for creating MutableContextData instances.
+ * Factory for creating StringMap instances.
  * <p>
- * By default returns {@code SortedStringArrayMap} objects. Can be configured 
by setting system property
- * {@code "log4j2.ContextData"} to the fully qualified class name of a class 
implementing the
- * {@code MutableContextData} interface. The class must have a public default 
constructor.
+ * By default returns {@code SortedArrayStringMap} objects. Can be configured 
by setting system property
+ * {@code "log4j2.ReadOnlyStringMap"} to the fully qualified class name of a 
class implementing the
+ * {@code StringMap} interface. The class must have a public default 
constructor.
  * </p>
  *
- * @see SortedStringArrayMap
+ * @see SortedArrayStringMap
  * @since 2.7
  */
 public class ContextDataFactory {
 
     @SuppressWarnings("unchecked")
-    public static MutableContextData createContextData() {
-        final String CLASS = 
PropertiesUtil.getProperties().getStringProperty("log4j2.ContextData",
-                SortedStringArrayMap.class.getName());
+    public static StringMap createContextData() {
+        final String CLASS = 
PropertiesUtil.getProperties().getStringProperty("log4j2.ReadOnlyStringMap",
+                SortedArrayStringMap.class.getName());
         try {
-            return (MutableContextData) Class.forName(CLASS).newInstance();
+            return (StringMap) Class.forName(CLASS).newInstance();
         } catch (final Exception any) {
-            return new SortedStringArrayMap();
+            return new SortedArrayStringMap();
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/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 3379955..6af517d 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
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.impl;
 import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.ContextDataInjector;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.spi.CopyOnWrite;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 import org.apache.logging.log4j.spi.ThreadContextMap2;
@@ -35,7 +35,7 @@ import org.apache.logging.log4j.util.PropertiesUtil;
  * {@code ThreadContextDataInjector}.
  *
  * @see ContextDataInjector
- * @see ContextData
+ * @see ReadOnlyStringMap
  * @see ThreadContextDataInjector
  * @see LogEvent#getContextData()
  * @since 2.7
@@ -57,7 +57,7 @@ public class ContextDataInjectorFactory {
      * context data to determine whether an event should be logged.
      * </p>
      *
-     * @return a ContextDataInjector that populates the {@code ContextData} of 
all {@code LogEvent} objects
+     * @return a ContextDataInjector that populates the {@code 
ReadOnlyStringMap} of all {@code LogEvent} objects
      */
     public static ContextDataInjector createInjector() {
         final String className = 
PropertiesUtil.getProperties().getStringProperty("log4j2.ContextDataInjector");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
index 894d0d2..291687a 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
@@ -27,7 +27,7 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.core.ContextDataInjector;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.async.RingBufferLogEvent;
 import org.apache.logging.log4j.core.config.LoggerConfig;
@@ -41,7 +41,7 @@ import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ReusableMessage;
 import org.apache.logging.log4j.message.SimpleMessage;
 import org.apache.logging.log4j.message.TimestampMessage;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.Strings;
 
@@ -63,7 +63,7 @@ public class Log4jLogEvent implements LogEvent {
     private final long timeMillis;
     private final transient Throwable thrown;
     private ThrowableProxy thrownProxy;
-    private final MutableContextData contextData;
+    private final StringMap contextData;
     private final ThreadContext.ContextStack contextStack;
     private long threadId;
     private String threadName;
@@ -85,7 +85,7 @@ public class Log4jLogEvent implements LogEvent {
         private Throwable thrown;
         private long timeMillis = CLOCK.currentTimeMillis();
         private ThrowableProxy thrownProxy;
-        private MutableContextData contextData = 
createContextData((List<Property>) null);
+        private StringMap contextData = createContextData((List<Property>) 
null);
         private ThreadContext.ContextStack contextStack = 
ThreadContext.getImmutableStack();
         private long threadId;
         private String threadName;
@@ -130,8 +130,8 @@ public class Log4jLogEvent implements LogEvent {
                 this.threadName = evt.threadName;
                 this.threadPriority = evt.threadPriority;
             } else {
-                if (other.getContextData() instanceof MutableContextData) {
-                    this.contextData = (MutableContextData) 
other.getContextData();
+                if (other.getContextData() instanceof StringMap) {
+                    this.contextData = (StringMap) other.getContextData();
                 } else {
                     if (this.contextData.isFrozen()) {
                         this.contextData = 
ContextDataFactory.createContextData();
@@ -200,7 +200,7 @@ public class Log4jLogEvent implements LogEvent {
             return this;
         }
 
-        public Builder setContextData(final MutableContextData contextData) {
+        public Builder setContextData(final StringMap contextData) {
             this.contextData = contextData;
             return this;
         }
@@ -308,7 +308,7 @@ public class Log4jLogEvent implements LogEvent {
     * @param loggerFQCN The fully qualified class name of the caller.
     * @param level The logging Level.
     * @param message The Message.
-    * @param properties the properties to be merged with ThreadContext 
key-value pairs into the event's ContextData.
+    * @param properties the properties to be merged with ThreadContext 
key-value pairs into the event's ReadOnlyStringMap.
     * @param t A Throwable or null.
     */
    // This constructor is called from LogEventFactories.
@@ -399,7 +399,7 @@ public class Log4jLogEvent implements LogEvent {
      */
     private Log4jLogEvent(final String loggerName, final Marker marker, final 
String loggerFQCN, final Level level,
             final Message message, final Throwable thrown, final 
ThrowableProxy thrownProxy,
-            final MutableContextData contextData, final 
ThreadContext.ContextStack contextStack, final long threadId,
+            final StringMap contextData, final ThreadContext.ContextStack 
contextStack, final long threadId,
             final String threadName, final int threadPriority, final 
StackTraceElement source,
             final long timestampMillis, final long nanoTime) {
         this.loggerName = loggerName;
@@ -424,8 +424,8 @@ public class Log4jLogEvent implements LogEvent {
         this.nanoTime = nanoTime;
     }
 
-    private static MutableContextData createContextData(final Map<String, 
String> contextMap) {
-        final MutableContextData result = 
ContextDataFactory.createContextData();
+    private static StringMap createContextData(final Map<String, String> 
contextMap) {
+        final StringMap result = ContextDataFactory.createContextData();
         if (contextMap != null) {
             for (final Map.Entry<String, String> entry : 
contextMap.entrySet()) {
                 result.putValue(entry.getKey(), entry.getValue());
@@ -434,8 +434,8 @@ public class Log4jLogEvent implements LogEvent {
         return result;
     }
 
-    private static MutableContextData createContextData(final List<Property> 
properties) {
-        final MutableContextData reusable = 
ContextDataFactory.createContextData();
+    private static StringMap createContextData(final List<Property> 
properties) {
+        final StringMap reusable = ContextDataFactory.createContextData();
         return CONTEXT_DATA_INJECTOR.injectContextData(properties, reusable);
     }
 
@@ -577,12 +577,12 @@ public class Log4jLogEvent implements LogEvent {
     }
 
     /**
-     * Returns the {@code ContextData} containing context data key-value pairs.
-     * @return the {@code ContextData} containing context data key-value pairs
+     * Returns the {@code ReadOnlyStringMap} containing context data key-value 
pairs.
+     * @return the {@code ReadOnlyStringMap} containing context data key-value 
pairs
      * @since 2.7
      */
     @Override
-    public ContextData getContextData() {
+    public ReadOnlyStringMap getContextData() {
         return contextData;
     }
     /**
@@ -850,7 +850,7 @@ public class Log4jLogEvent implements LogEvent {
         private final transient Throwable thrown;
         private final ThrowableProxy thrownProxy;
         /** @since 2.7 */
-        private final MutableContextData contextData;
+        private final StringMap contextData;
         private final ThreadContext.ContextStack contextStack;
         /** @since 2.6 */
         private final long threadId;
@@ -913,8 +913,8 @@ public class Log4jLogEvent implements LogEvent {
             return message.memento();
         }
 
-        private static MutableContextData memento(final ContextData data) {
-            final MutableContextData result = 
ContextDataFactory.createContextData();
+        private static StringMap memento(final ReadOnlyStringMap data) {
+            final StringMap result = ContextDataFactory.createContextData();
             result.putAll(data);
             return result;
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
index 0b9d544..ad970ae 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/MutableLogEvent.java
@@ -24,14 +24,14 @@ import java.util.Map;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.util.Constants;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.message.ReusableMessage;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.Strings;
 
 /**
@@ -56,7 +56,7 @@ public class MutableLogEvent implements LogEvent, 
ReusableMessage {
     private Object[] parameters;
     private Throwable thrown;
     private ThrowableProxy thrownProxy;
-    private MutableContextData contextData = 
ContextDataFactory.createContextData();
+    private StringMap contextData = ContextDataFactory.createContextData();
     private Marker marker;
     private String loggerFqcn;
     private StackTraceElement source;
@@ -93,7 +93,7 @@ public class MutableLogEvent implements LogEvent, 
ReusableMessage {
 
         // NOTE: this ringbuffer event SHOULD NOT keep a reference to the 
specified
         // thread-local MutableLogEvent's context data, because then two 
threads would call
-        // ContextData.clear() on the same shared instance, resulting in data 
corruption.
+        // ReadOnlyStringMap.clear() on the same shared instance, resulting in 
data corruption.
         this.contextData.putAll(event.getContextData());
 
         this.contextStack = event.getContextStack();
@@ -350,7 +350,7 @@ public class MutableLogEvent implements LogEvent, 
ReusableMessage {
 
     @SuppressWarnings("unchecked")
     @Override
-    public ContextData getContextData() {
+    public ReadOnlyStringMap getContextData() {
         return contextData;
     }
 
@@ -359,7 +359,7 @@ public class MutableLogEvent implements LogEvent, 
ReusableMessage {
         return contextData.toMap();
     }
 
-    public void setContextData(final MutableContextData mutableContextData) {
+    public void setContextData(final StringMap mutableContextData) {
         this.contextData = mutableContextData;
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
index de715d0..bef1b8d 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/ReusableLogEventFactory.java
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.core.util.Clock;
 import org.apache.logging.log4j.core.util.ClockFactory;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.TimestampMessage;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 
 /**
  * Garbage-free LogEventFactory that reuses a single mutable log event.
@@ -80,7 +80,7 @@ public class ReusableLogEventFactory implements 
LogEventFactory {
         result.setLevel(level == null ? Level.OFF : level);
         result.setMessage(message);
         result.setThrown(t);
-        result.setContextData(injector.injectContextData(properties, 
(MutableContextData) result.getContextData()));
+        result.setContextData(injector.injectContextData(properties, 
(StringMap) result.getContextData()));
         result.setContextStack(ThreadContext.getDepth() == 0 ? 
ThreadContext.EMPTY_STACK : ThreadContext.cloneStack());// mutable copy
         result.setTimeMillis(message instanceof TimestampMessage
                 ? ((TimestampMessage) message).getTimestamp()

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/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 525f50e..d26324c 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
@@ -23,13 +23,13 @@ import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.ThreadContextAccess;
 import org.apache.logging.log4j.core.ContextDataInjector;
 import org.apache.logging.log4j.core.config.Property;
-import org.apache.logging.log4j.util.ContextData;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 
 /**
  * {@code ThreadContextDataInjector} contains a number of strategies for 
copying key-value pairs from the various
- * {@code ThreadContext} map implementations into a {@code 
MutableContextData}. In the case of duplicate keys,
+ * {@code ThreadContext} map implementations into a {@code StringMap}. In the 
case of duplicate keys,
  * thread context values overwrite configuration {@code Property} values.
  * <p>
  * These are the default {@code ContextDataInjector} objects returned by the 
{@link ContextDataInjectorFactory}.
@@ -37,7 +37,7 @@ import org.apache.logging.log4j.spi.ThreadContextMap;
  *
  * @see org.apache.logging.log4j.ThreadContext
  * @see Property
- * @see ContextData
+ * @see ReadOnlyStringMap
  * @see ContextDataInjector
  * @see ContextDataInjectorFactory
  * @since 2.7
@@ -48,22 +48,22 @@ public class ThreadContextDataInjector  {
      * Default {@code ContextDataInjector} for the legacy {@code Map<String, 
String>}-based ThreadContext (which is
      * also the ThreadContext implementation used for web applications).
      * <p>
-     * This injector always puts key-value pairs into the specified reusable 
MutableContextData.
+     * This injector always puts key-value pairs into the specified reusable 
StringMap.
      */
     public static class ForDefaultThreadContextMap implements 
ContextDataInjector {
         /**
          * Puts key-value pairs from both the specified list of properties as 
well as the thread context into the
-         * specified reusable MutableContextData.
+         * specified reusable StringMap.
          *
          * @param props list of configuration properties, may be {@code null}
-         * @param reusable a {@code MutableContextData} instance that may be 
reused to avoid creating temporary objects
-         * @return a {@code MutableContextData} combining configuration 
properties with thread context data
+         * @param reusable a {@code StringMap} instance that may be reused to 
avoid creating temporary objects
+         * @return a {@code StringMap} combining configuration properties with 
thread context data
          */
         @Override
-        public MutableContextData injectContextData(final List<Property> 
props, final MutableContextData reusable) {
+        public StringMap injectContextData(final List<Property> props, final 
StringMap reusable) {
             // implementation note:
-            // The DefaultThreadContextMap stores context data in a 
Map<String, String>, not in a ContextData object.
-            // Therefore we can populate the specified reusable 
MutableContextData, but
+            // The DefaultThreadContextMap stores context data in a 
Map<String, String>, not in a ReadOnlyStringMap object.
+            // Therefore we can populate the specified reusable StringMap, but
             // we need to copy the ThreadContext key-value pairs one by one.
             copyProperties(props, reusable);
             copyThreadContextMap(ThreadContext.getImmutableContext(), 
reusable);
@@ -71,23 +71,23 @@ public class ThreadContextDataInjector  {
         }
 
         @Override
-        public ContextData rawContextData() {
+        public ReadOnlyStringMap rawContextData() {
             final ThreadContextMap map = 
ThreadContextAccess.getThreadContextMap();
-            if (map instanceof ContextData) {
-                return (ContextData) map;
+            if (map instanceof ReadOnlyStringMap) {
+                return (ReadOnlyStringMap) map;
             }
-            final MutableContextData result = 
ContextDataFactory.createContextData();
+            final StringMap result = ContextDataFactory.createContextData();
             copyThreadContextMap(ThreadContext.getImmutableContext(), result);
             return result;
         }
 
         /**
-         * Copies key-value pairs from the specified map into the specified 
{@code MutableContextData}.
+         * Copies key-value pairs from the specified map into the specified 
{@code StringMap}.
          *
          * @param map map with key-value pairs, may be {@code null}
-         * @param result the {@code MutableContextData} object to add the 
key-values to. Must be non-{@code null}.
+         * @param result the {@code StringMap} object to add the key-values 
to. Must be non-{@code null}.
          */
-        private static void copyThreadContextMap(final Map<String, String> 
map, final MutableContextData result) {
+        private static void copyThreadContextMap(final Map<String, String> 
map, final StringMap result) {
             if (map != null) {
                 for (final Map.Entry<String, String> entry : map.entrySet()) {
                     result.putValue(entry.getKey(), entry.getValue());
@@ -98,83 +98,83 @@ public class ThreadContextDataInjector  {
 
     /**
      * The {@code ContextDataInjector} used when the ThreadContextMap 
implementation is a garbage-free
-     * MutableContextData-based data structure.
+     * StringMap-based data structure.
      * <p>
-     * This injector always puts key-value pairs into the specified reusable 
MutableContextData.
+     * This injector always puts key-value pairs into the specified reusable 
StringMap.
      */
     public static class ForGarbageFreeMutableThreadContextMap implements 
ContextDataInjector {
         /**
          * Puts key-value pairs from both the specified list of properties as 
well as the thread context into the
-         * specified reusable MutableContextData.
+         * specified reusable StringMap.
          *
          * @param props list of configuration properties, may be {@code null}
-         * @param reusable a {@code MutableContextData} instance that may be 
reused to avoid creating temporary objects
-         * @return a {@code MutableContextData} combining configuration 
properties with thread context data
+         * @param reusable a {@code StringMap} instance that may be reused to 
avoid creating temporary objects
+         * @return a {@code StringMap} combining configuration properties with 
thread context data
          */
         @Override
-        public MutableContextData injectContextData(final List<Property> 
props, final MutableContextData reusable) {
+        public StringMap injectContextData(final List<Property> props, final 
StringMap reusable) {
             // When the ThreadContext is garbage-free, we must copy its 
key-value pairs into the specified reusable
-            // MutableContextData. We cannot return the ThreadContext's 
internal data structure because it will be
+            // StringMap. We cannot return the ThreadContext's internal data 
structure because it will be
             // modified.
             copyProperties(props, reusable);
 
-            final ContextData immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
+            final ReadOnlyStringMap immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
             reusable.putAll(immutableCopy);
             return reusable;
         }
 
         @Override
-        public ContextData rawContextData() {
+        public ReadOnlyStringMap rawContextData() {
             return 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
         }
     }
 
     /**
      * The {@code ContextDataInjector} used when the ThreadContextMap 
implementation is a copy-on-write
-     * MutableContextData-based data structure.
+     * StringMap-based data structure.
      * <p>
      * If there are no configuration properties, this injector will return the 
thread context's internal data
      * structure. Otherwise the configuration properties are combined with the 
thread context key-value pairs into the
-     * specified reusable MutableContextData.
+     * specified reusable StringMap.
      */
     public static class ForCopyOnWriteMutableThreadContextMap implements 
ContextDataInjector {
         /**
          * If there are no configuration properties, this injector will return 
the thread context's internal data
          * structure. Otherwise the configuration properties are combined with 
the thread context key-value pairs into the
-         * specified reusable MutableContextData.
+         * specified reusable StringMap.
          *
          * @param props list of configuration properties, may be {@code null}
-         * @param reusable a {@code MutableContextData} instance that may be 
reused to avoid creating temporary objects
-         * @return a {@code MutableContextData} combining configuration 
properties with thread context data
+         * @param reusable a {@code StringMap} instance that may be reused to 
avoid creating temporary objects
+         * @return a {@code StringMap} combining configuration properties with 
thread context data
          */
         @Override
-        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:
+        public StringMap injectContextData(final List<Property> props, final 
StringMap reusable) {
+            // If there are no configuration properties we want to just return 
the ThreadContext's StringMap:
             // it is a copy-on-write data structure so we are sure 
ThreadContext changes will not affect our copy.
-            final MutableContextData immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
+            final StringMap immutableCopy = 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
             if (props == null || props.isEmpty()) {
                 return immutableCopy;
             }
             // However, if the list of Properties is non-empty we need to 
combine the properties and the ThreadContext
-            // data. In that case we will copy the key-value pairs into the 
specified reusable MutableContextData.
+            // data. In that case we will copy the key-value pairs into the 
specified reusable StringMap.
             copyProperties(props, reusable);
             reusable.putAll(immutableCopy);
             return reusable;
         }
 
         @Override
-        public ContextData rawContextData() {
+        public ReadOnlyStringMap rawContextData() {
             return 
ThreadContextAccess.getThreadContextMap2().getReadOnlyContextData();
         }
     }
 
     /**
-     * Copies key-value pairs from the specified property list into the 
specified {@code MutableContextData}.
+     * Copies key-value pairs from the specified property list into the 
specified {@code StringMap}.
      *
      * @param properties list of configuration properties, may be {@code null}
-     * @param result the {@code MutableContextData} object to add the 
key-values to. Must be non-{@code null}.
+     * @param result the {@code StringMap} object to add the key-values to. 
Must be non-{@code null}.
      */
-    public static void copyProperties(final List<Property> properties, final 
MutableContextData result) {
+    public static void copyProperties(final List<Property> properties, final 
StringMap result) {
         if (properties != null) {
             for (int i = 0; i < properties.size(); i++) {
                 final Property prop = properties.get(i);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.java
index b14cfce..85dd21e 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListDeserializer.java
@@ -21,7 +21,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.logging.log4j.core.impl.ContextDataFactory;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -34,7 +34,7 @@ import 
com.fasterxml.jackson.databind.deser.std.StdDeserializer;
  * <em>Consider this class private.</em>
  * </p>
  */
-public class ContextDataAsEntryListDeserializer extends 
StdDeserializer<MutableContextData> {
+public class ContextDataAsEntryListDeserializer extends 
StdDeserializer<StringMap> {
 
     private static final long serialVersionUID = 1L;
 
@@ -43,12 +43,12 @@ public class ContextDataAsEntryListDeserializer extends 
StdDeserializer<MutableC
     }
 
     @Override
-    public MutableContextData deserialize(final JsonParser jp, final 
DeserializationContext ctxt) throws IOException,
+    public StringMap deserialize(final JsonParser jp, final 
DeserializationContext ctxt) throws IOException,
             JsonProcessingException {
         final List<MapEntry> list = jp.readValueAs(new 
TypeReference<List<MapEntry>>() {
             // empty
         });
-        final MutableContextData contextData = new 
ContextDataFactory().createContextData();
+        final StringMap contextData = new 
ContextDataFactory().createContextData();
         for (final MapEntry mapEntry : list) {
             contextData.putValue(mapEntry.getKey(), mapEntry.getValue());
         }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.java
index db124eb..ccf17ff 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataAsEntryListSerializer.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.jackson;
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.util.BiConsumer;
 
 import com.fasterxml.jackson.core.JsonGenerationException;
@@ -32,7 +32,7 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer;
  * <em>Consider this class private.</em>
  * </p>
  */
-public class ContextDataAsEntryListSerializer extends 
StdSerializer<ContextData> {
+public class ContextDataAsEntryListSerializer extends 
StdSerializer<ReadOnlyStringMap> {
 
     private static final long serialVersionUID = 1L;
 
@@ -41,7 +41,7 @@ public class ContextDataAsEntryListSerializer extends 
StdSerializer<ContextData>
     }
 
     @Override
-    public void serialize(final ContextData contextData, final JsonGenerator 
jgen, final SerializerProvider provider)
+    public void serialize(final ReadOnlyStringMap contextData, final 
JsonGenerator jgen, final SerializerProvider provider)
             throws IOException, JsonGenerationException {
 
         final MapEntry[] pairs = new MapEntry[contextData.size()];

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataDeserializer.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataDeserializer.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataDeserializer.java
index 3b4cba2..3a9a13e 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataDeserializer.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataDeserializer.java
@@ -21,7 +21,7 @@ import java.io.IOException;
 import java.util.Map;
 
 import org.apache.logging.log4j.core.impl.ContextDataFactory;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -34,7 +34,7 @@ import 
com.fasterxml.jackson.databind.deser.std.StdDeserializer;
  * <em>Consider this class private.</em>
  * </p>
  */
-public class ContextDataDeserializer extends 
StdDeserializer<MutableContextData> {
+public class ContextDataDeserializer extends StdDeserializer<StringMap> {
 
     private static final long serialVersionUID = 1L;
 
@@ -43,7 +43,7 @@ public class ContextDataDeserializer extends 
StdDeserializer<MutableContextData>
     }
 
     @Override
-    public MutableContextData deserialize(final JsonParser jp, final 
DeserializationContext ctxt) throws IOException,
+    public StringMap deserialize(final JsonParser jp, final 
DeserializationContext ctxt) throws IOException,
             JsonProcessingException {
 
         // Sanity check: verify that we got "Json Object":
@@ -51,7 +51,7 @@ public class ContextDataDeserializer extends 
StdDeserializer<MutableContextData>
 //        if (tok != JsonToken.START_OBJECT) {
 //            throw new IOException("Expected data to start with an Object");
 //        }
-        final MutableContextData contextData = 
ContextDataFactory.createContextData();
+        final StringMap contextData = ContextDataFactory.createContextData();
         // Iterate over object fields:
         while (jp.nextToken() != JsonToken.END_OBJECT) {
             final String fieldName = jp.getCurrentName();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
index 161ee6a..8808d3d 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/ContextDataSerializer.java
@@ -19,7 +19,7 @@ package org.apache.logging.log4j.core.jackson;
 import java.io.IOException;
 import java.util.Map;
 
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.util.TriConsumer;
 
 import com.fasterxml.jackson.core.JsonGenerationException;
@@ -32,7 +32,7 @@ import com.fasterxml.jackson.databind.ser.std.StdSerializer;
  * <em>Consider this class private.</em>
  * </p>
  */
-public class ContextDataSerializer extends StdSerializer<ContextData> {
+public class ContextDataSerializer extends StdSerializer<ReadOnlyStringMap> {
 
     private static final long serialVersionUID = 1L;
 
@@ -41,7 +41,7 @@ public class ContextDataSerializer extends 
StdSerializer<ContextData> {
     }
 
     @Override
-    public void serialize(final ContextData contextData, final JsonGenerator 
jgen,
+    public void serialize(final ReadOnlyStringMap contextData, final 
JsonGenerator jgen,
             final SerializerProvider provider) throws IOException, 
JsonGenerationException {
 
         jgen.writeStartObject();

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.java
index e354f89..c03d556 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventJsonMixIn.java
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext.ContextStack;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
@@ -62,7 +62,7 @@ abstract class LogEventJsonMixIn implements LogEvent {
     @JsonDeserialize(using = ContextDataDeserializer.class)
     //@JsonIgnore
     @Override
-    public abstract ContextData getContextData();
+    public abstract ReadOnlyStringMap getContextData();
 
     @JsonProperty(JsonConstants.ELT_CONTEXT_STACK)
     @JacksonXmlElementWrapper(namespace = XmlConstants.XML_NAMESPACE, 
localName = XmlConstants.ELT_CONTEXT_STACK)

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.java
index b18204e..176d82d 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/jackson/LogEventWithContextListMixIn.java
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext.ContextStack;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
@@ -60,7 +60,7 @@ abstract class LogEventWithContextListMixIn implements 
LogEvent {
     @JsonDeserialize(using = ContextDataAsEntryListDeserializer.class)
 //    @JsonIgnore
     @Override
-    public abstract ContextData getContextData();
+    public abstract ReadOnlyStringMap getContextData();
 
     @JsonProperty(JsonConstants.ELT_CONTEXT_STACK)
     @JacksonXmlElementWrapper(namespace = XmlConstants.XML_NAMESPACE, 
localName = XmlConstants.ELT_CONTEXT_STACK)

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/ContextMapLookup.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/ContextMapLookup.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/ContextMapLookup.java
index 397a8eb..220d17a 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/ContextMapLookup.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/ContextMapLookup.java
@@ -21,7 +21,7 @@ import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.ContextDataInjector;
 import org.apache.logging.log4j.core.impl.ContextDataInjectorFactory;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 
 /**
  * Looks up keys from the context. By default this is the {@link 
ThreadContext}, but users may
@@ -43,7 +43,7 @@ public class ContextMapLookup implements StrLookup {
         return currentContextData().getValue(key);
     }
 
-    private ContextData currentContextData() {
+    private ReadOnlyStringMap currentContextData() {
         return injector.rawContextData();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
index 760bcbd..599d623 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MdcPatternConverter.java
@@ -16,7 +16,7 @@
  */
 package org.apache.logging.log4j.core.pattern;
 
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.config.plugins.Plugin;
 import org.apache.logging.log4j.core.util.Constants;
@@ -97,7 +97,7 @@ public final class MdcPatternConverter extends 
LogEventPatternConverter {
      */
     @Override
     public void format(final LogEvent event, final StringBuilder toAppendTo) {
-        final ContextData contextData = event.getContextData();
+        final ReadOnlyStringMap contextData = event.getContextData();
         // if there is no additional options, we output every single
         // Key/Value pair for the MDC in a similar format to 
Hashtable.toString()
         if (full) {
@@ -123,7 +123,7 @@ public final class MdcPatternConverter extends 
LogEventPatternConverter {
         }
     }
 
-    private static void appendFully(final ContextData contextData, final 
StringBuilder toAppendTo) {
+    private static void appendFully(final ReadOnlyStringMap contextData, final 
StringBuilder toAppendTo) {
         final StringBuilder sb = getStringBuilder();
         sb.append("{");
         contextData.forEach(WRITE_KEY_VALUES_INTO, sb);
@@ -132,7 +132,7 @@ public final class MdcPatternConverter extends 
LogEventPatternConverter {
         trimToMaxSize(sb);
     }
 
-    private static void appendSelectedKeys(final String[] keys, final 
ContextData contextData, final StringBuilder toAppendTo) {
+    private static void appendSelectedKeys(final String[] keys, final 
ReadOnlyStringMap contextData, final StringBuilder toAppendTo) {
         // Print all the keys in the array that have a value.
         final StringBuilder sb = getStringBuilder();
         sb.append("{");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
index f09bf09..cc5260f 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/TestBaseEntity.java
@@ -34,7 +34,7 @@ import javax.persistence.Transient;
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.LevelAttributeConverter;
 import 
org.apache.logging.log4j.core.appender.db.jpa.converter.MessageAttributeConverter;
@@ -162,7 +162,7 @@ public class TestBaseEntity extends 
AbstractLogEventWrapperEntity {
 
     @Override
     @Transient
-    public ContextData getContextData() {
+    public ReadOnlyStringMap getContextData() {
         return this.getWrappedEvent().getContextData();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverterTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverterTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverterTest.java
index a56c15a..1112f3e 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverterTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataAttributeConverterTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.logging.log4j.core.appender.db.jpa.converter;
 
-import org.apache.logging.log4j.util.SortedStringArrayMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,7 +39,7 @@ public class ContextDataAttributeConverterTest {
 
     @Test
     public void testConvertToDatabaseColumn01() {
-        final MutableContextData map = new SortedStringArrayMap();
+        final StringMap map = new SortedArrayStringMap();
         map.putValue("test1", "another1");
         map.putValue("key2", "value2");
 
@@ -49,7 +49,7 @@ public class ContextDataAttributeConverterTest {
 
     @Test
     public void testConvertToDatabaseColumn02() {
-        final MutableContextData map = new SortedStringArrayMap();
+        final StringMap map = new SortedArrayStringMap();
         map.putValue("someKey", "coolValue");
         map.putValue("anotherKey", "testValue");
         map.putValue("myKey", "yourValue");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverterTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverterTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverterTest.java
index 76a11fc..45b444a 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverterTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/appender/db/jpa/converter/ContextDataJsonAttributeConverterTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.logging.log4j.core.appender.db.jpa.converter;
 
-import org.apache.logging.log4j.util.ContextData;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,7 +40,7 @@ public class ContextDataJsonAttributeConverterTest {
 
     @Test
     public void testConvert01() {
-        final MutableContextData map = new SortedStringArrayMap();
+        final StringMap map = new SortedArrayStringMap();
         map.putValue("test1", "another1");
         map.putValue("key2", "value2");
 
@@ -48,7 +48,7 @@ public class ContextDataJsonAttributeConverterTest {
 
         assertNotNull("The converted value should not be null.", converted);
 
-        final ContextData reversed = 
this.converter.convertToEntityAttribute(converted);
+        final ReadOnlyStringMap reversed = 
this.converter.convertToEntityAttribute(converted);
 
         assertNotNull("The reversed value should not be null.", reversed);
         assertEquals("The reversed value is not correct.", map, reversed);
@@ -56,7 +56,7 @@ public class ContextDataJsonAttributeConverterTest {
 
     @Test
     public void testConvert02() {
-        final MutableContextData map = new SortedStringArrayMap();
+        final StringMap map = new SortedArrayStringMap();
         map.putValue("someKey", "coolValue");
         map.putValue("anotherKey", "testValue");
         map.putValue("myKey", "yourValue");
@@ -65,7 +65,7 @@ public class ContextDataJsonAttributeConverterTest {
 
         assertNotNull("The converted value should not be null.", converted);
 
-        final ContextData reversed = 
this.converter.convertToEntityAttribute(converted);
+        final ReadOnlyStringMap reversed = 
this.converter.convertToEntityAttribute(converted);
 
         assertNotNull("The reversed value should not be null.", reversed);
         assertEquals("The reversed value is not correct.", map, reversed);

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
index 16fc036..fb33926 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/async/RingBufferLogEventTest.java
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.ThreadContext.ContextStack;
 import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.SimpleMessage;
@@ -57,7 +57,7 @@ public class RingBufferLogEventTest {
         final StackTraceElement location = null;
         final long currentTimeMillis = 0;
         final long nanoTime = 1;
-        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(MutableContextData) evt.getContextData(),
+        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(StringMap) evt.getContextData(),
                 contextStack, -1, threadName, -1, location, currentTimeMillis, 
nanoTime);
         assertEquals(Level.OFF, evt.getLevel());
     }
@@ -76,7 +76,7 @@ public class RingBufferLogEventTest {
         final StackTraceElement location = null;
         final long currentTimeMillis = 0;
         final long nanoTime = 1;
-        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(MutableContextData) evt.getContextData(),
+        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(StringMap) evt.getContextData(),
                 contextStack, -1, threadName, -1, location, currentTimeMillis, 
nanoTime);
         assertNotNull(evt.getMessage());
     }
@@ -95,7 +95,7 @@ public class RingBufferLogEventTest {
         final StackTraceElement location = null;
         final long currentTimeMillis = 123;
         final long nanoTime = 1;
-        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(MutableContextData) evt.getContextData(),
+        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(StringMap) evt.getContextData(),
                 contextStack, -1, threadName, -1, location, currentTimeMillis, 
nanoTime);
         assertEquals(123, evt.getTimeMillis());
     }
@@ -114,9 +114,9 @@ public class RingBufferLogEventTest {
         final StackTraceElement location = null;
         final long currentTimeMillis = 12345;
         final long nanoTime = 1;
-        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(MutableContextData) evt.getContextData(),
+        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(StringMap) evt.getContextData(),
                 contextStack, -1, threadName, -1, location, currentTimeMillis, 
nanoTime);
-        ((MutableContextData) evt.getContextData()).putValue("key", "value");
+        ((StringMap) evt.getContextData()).putValue("key", "value");
 
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         final ObjectOutputStream out = new ObjectOutputStream(baos);
@@ -152,9 +152,9 @@ public class RingBufferLogEventTest {
         final StackTraceElement location = null;
         final long currentTimeMillis = 12345;
         final long nanoTime = 1;
-        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(MutableContextData) evt.getContextData(),
+        evt.setValues(null, loggerName, marker, fqcn, level, data, t, 
(StringMap) evt.getContextData(),
                 contextStack, -1, threadName, -1, location, currentTimeMillis, 
nanoTime);
-        ((MutableContextData) evt.getContextData()).putValue("key", "value");
+        ((StringMap) evt.getContextData()).putValue("key", "value");
 
         final LogEvent actual = evt.createMemento();
         assertEquals(evt.getLoggerName(), actual.getLoggerName());

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
index b662eff..0199444 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/Log4jLogEventTest.java
@@ -40,8 +40,8 @@ import org.apache.logging.log4j.core.util.DummyNanoClock;
 import org.apache.logging.log4j.message.Message;
 import org.apache.logging.log4j.message.ObjectMessage;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.Strings;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -285,7 +285,7 @@ public class Log4jLogEventTest {
 
     @Test
     public void testBuilderCorrectlyCopiesAllEventAttributesInclContextData() {
-        final MutableContextData contextData = new SortedStringArrayMap();
+        final StringMap contextData = new SortedArrayStringMap();
         contextData.putValue("A", "B");
         final ContextStack contextStack = ThreadContext.getImmutableStack();
         final Exception exception = new Exception("test");
@@ -334,7 +334,7 @@ public class Log4jLogEventTest {
 
     @Test
     public void testBuilderCorrectlyCopiesMutableLogEvent() throws Exception {
-        final MutableContextData contextData = new SortedStringArrayMap();
+        final StringMap contextData = new SortedArrayStringMap();
         contextData.putValue("A", "B");
         final ContextStack contextStack = ThreadContext.getImmutableStack();
         final Exception exception = new Exception("test");

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
----------------------------------------------------------------------
diff --git 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
index 5ce6fca..843115d 100644
--- 
a/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
+++ 
b/log4j-core/src/test/java/org/apache/logging/log4j/core/impl/MutableLogEventTest.java
@@ -29,8 +29,8 @@ import org.apache.logging.log4j.MarkerManager;
 import org.apache.logging.log4j.ThreadContext;
 import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.logging.log4j.message.SimpleMessage;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.MutableThreadContextStack;
 import org.junit.Test;
 
@@ -40,11 +40,11 @@ import static org.junit.Assert.*;
  * Tests the MutableLogEvent class.
  */
 public class MutableLogEventTest {
-    private static final MutableContextData CONTEXT_DATA = createContextData();
+    private static final StringMap CONTEXT_DATA = createContextData();
     private static final ThreadContext.ContextStack STACK = new 
MutableThreadContextStack(Arrays.asList("abc", "xyz"));
 
-    private static MutableContextData createContextData() {
-        final MutableContextData result = new SortedStringArrayMap();
+    private static StringMap createContextData() {
+        final StringMap result = new SortedArrayStringMap();
         result.putValue("a", "1");
         result.putValue("b", "2");
         return result;

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
----------------------------------------------------------------------
diff --git 
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
 
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
index 7ecffe0..355f654 100644
--- 
a/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
+++ 
b/log4j-flume-ng/src/main/java/org/apache/logging/log4j/flume/appender/FlumeEvent.java
@@ -29,7 +29,7 @@ import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LoggingException;
 import org.apache.logging.log4j.Marker;
 import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.util.ContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.impl.ThrowableProxy;
 import org.apache.logging.log4j.core.util.Patterns;
@@ -326,7 +326,7 @@ public class FlumeEvent extends SimpleEvent implements 
LogEvent {
      * @return the context data of the {@code LogEvent} that this {@code 
FlumeEvent} was constructed with.
      */
     @Override
-    public ContextData getContextData() {
+    public ReadOnlyStringMap getContextData() {
         return event.getContextData();
     }
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
index f2692de..df63b5f 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/SortedArrayVsHashMapBenchmark.java
@@ -23,7 +23,7 @@ import java.util.Random;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.perf.nogc.OpenHashMapContextData;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.TriConsumer;
 import org.openjdk.jmh.annotations.Benchmark;
@@ -39,7 +39,7 @@ import org.openjdk.jmh.annotations.State;
 import org.openjdk.jmh.annotations.Warmup;
 
 /**
- * Compares performance of SortedStringArrayMap vs. OpenHashMap vs. JDK 
HashMap.
+ * Compares performance of SortedArrayStringMap vs. OpenHashMap vs. JDK 
HashMap.
  */
 // ============================== HOW TO RUN THIS TEST: 
====================================
 // (Quick build: mvn -DskipTests=true clean package -pl log4j-perf -am )
@@ -72,17 +72,17 @@ public class SortedArrayVsHashMapBenchmark {
     private String[] keys;
     private static Object value = new Object();
     private HashMap<String, Object> map;
-    private SortedStringArrayMap sortedStringArrayMap;
+    private SortedArrayStringMap sortedStringArrayMap;
     private OpenHashMapContextData<String, Object> openHashMapContextData;
 
     private HashMap<String, Object> populatedMap;
-    private SortedStringArrayMap populatedSortedStringArrayMap;
+    private SortedArrayStringMap populatedSortedStringArrayMap;
     private OpenHashMapContextData<String, Object> 
populatedOpenHashContextData;
 
     @Setup
     public void setup() {
         openHashMapContextData = new OpenHashMapContextData<>();
-        sortedStringArrayMap = new SortedStringArrayMap();
+        sortedStringArrayMap = new SortedArrayStringMap();
         map = new HashMap<>();
 
         keys = new String[count];
@@ -99,7 +99,7 @@ public class SortedArrayVsHashMapBenchmark {
         for (int i = 0; i < count; i++) {
             populatedMap.put(keys[i], value);
         }
-        populatedSortedStringArrayMap = new SortedStringArrayMap();
+        populatedSortedStringArrayMap = new SortedArrayStringMap();
         for (int i = 0; i < count; i++) {
             populatedSortedStringArrayMap.putValue(keys[i], value);
         }
@@ -110,7 +110,7 @@ public class SortedArrayVsHashMapBenchmark {
     }
 
     @Benchmark
-    public SortedStringArrayMap putAllArrayContextData() {
+    public SortedArrayStringMap putAllArrayContextData() {
         sortedStringArrayMap.clear();
         sortedStringArrayMap.putAll(populatedSortedStringArrayMap);
         return sortedStringArrayMap;
@@ -131,8 +131,8 @@ public class SortedArrayVsHashMapBenchmark {
     }
 
     @Benchmark
-    public SortedStringArrayMap cloneArrayContextData() {
-        return new SortedStringArrayMap(populatedSortedStringArrayMap);
+    public SortedArrayStringMap cloneArrayContextData() {
+        return new SortedArrayStringMap(populatedSortedStringArrayMap);
     }
 
     @Benchmark

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadContextBenchmark.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadContextBenchmark.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadContextBenchmark.java
index a04a5c4..7ca0855 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadContextBenchmark.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/ThreadContextBenchmark.java
@@ -34,9 +34,9 @@ import 
org.apache.logging.log4j.perf.nogc.OpenHashMapContextData;
 import org.apache.logging.log4j.spi.CopyOnWriteOpenHashMapThreadContextMap;
 import org.apache.logging.log4j.spi.DefaultThreadContextMap;
 import org.apache.logging.log4j.spi.GarbageFreeOpenHashMapThreadContextMap;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.ThreadContextMap;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
 import org.openjdk.jmh.annotations.Benchmark;
 import org.openjdk.jmh.annotations.BenchmarkMode;
 import org.openjdk.jmh.annotations.Fork;
@@ -99,7 +99,7 @@ public class ThreadContextBenchmark {
     private List<Property> propertyList;
 
     private ContextDataInjector injector;
-    private MutableContextData reusableContextData;
+    private StringMap reusableContextData;
 
     @Setup
     public void setup() {
@@ -110,7 +110,7 @@ public class ThreadContextBenchmark {
         System.out.println(threadContextMapAlias + ": Injector = " + injector);
 
         reusableContextData = threadContextMapAlias.contains("Array")
-                ? new SortedStringArrayMap()
+                ? new SortedArrayStringMap()
                 : new OpenHashMapContextData<>();
 
         keys = new String[count];
@@ -161,13 +161,13 @@ public class ThreadContextBenchmark {
     }
 
     @Benchmark
-    public MutableContextData injectWithoutProperties() {
+    public StringMap injectWithoutProperties() {
         reusableContextData.clear();
         return injector.injectContextData(null, reusableContextData);
     }
 
     @Benchmark
-    public MutableContextData injectWithProperties() {
+    public StringMap injectWithProperties() {
         reusableContextData.clear();
         return injector.injectContextData(propertyList, reusableContextData);
     }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashMapContextData.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashMapContextData.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashMapContextData.java
index fa228ac..1d7c647 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashMapContextData.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashMapContextData.java
@@ -26,14 +26,14 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
-import org.apache.logging.log4j.util.ContextData;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.ThreadContextMap;
 import org.apache.logging.log4j.util.BiConsumer;
 import org.apache.logging.log4j.util.TriConsumer;
 
 /**
- * Open hash map-based implementation of the {@code ContextData} interface.
+ * Open hash map-based implementation of the {@code ReadOnlyStringMap} 
interface.
  * Implementation based on <a 
href="http://fastutil.di.unimi.it/";>fastutil</a>'s
  * <a 
href="http://fastutil.di.unimi.it/docs/it/unimi/dsi/fastutil/objects/Object2ObjectOpenHashMap.html";>Object2ObjectOpenHashMap</a>.
  * <p>
@@ -60,7 +60,7 @@ import org.apache.logging.log4j.util.TriConsumer;
  *
  * @since 2.7
  */
-public class OpenHashMapContextData<K, V> implements MutableContextData, 
ThreadContextMap {
+public class OpenHashMapContextData<K, V> implements StringMap, 
ThreadContextMap {
     /** The initial default size of a hash table. */
     public static final int DEFAULT_INITIAL_SIZE = 16;
 
@@ -169,7 +169,7 @@ public class OpenHashMapContextData<K, V> implements 
MutableContextData, ThreadC
      * @param contextData
      *            a type-specific map to be copied into the new hash map.
      */
-    public OpenHashMapContextData(final ContextData contextData) {
+    public OpenHashMapContextData(final ReadOnlyStringMap contextData) {
         this(contextData, DEFAULT_LOAD_FACTOR);
     }
     /**
@@ -180,7 +180,7 @@ public class OpenHashMapContextData<K, V> implements 
MutableContextData, ThreadC
      * @param f
      *            the load factor.
      */
-    public OpenHashMapContextData(final ContextData contextData, final float 
f) {
+    public OpenHashMapContextData(final ReadOnlyStringMap contextData, final 
float f) {
         this(contextData.size(), f);
         if (contextData instanceof OpenHashMapContextData) {
             initFrom0((OpenHashMapContextData) contextData);
@@ -188,10 +188,10 @@ public class OpenHashMapContextData<K, V> implements 
MutableContextData, ThreadC
             contextData.forEach(PUT_ALL, this);
         }
     }
-    private static final TriConsumer<String, Object, MutableContextData> 
PUT_ALL =
-            new TriConsumer<String, Object, MutableContextData>() {
+    private static final TriConsumer<String, Object, StringMap> PUT_ALL =
+            new TriConsumer<String, Object, StringMap>() {
         @Override
-        public void accept(final String key, final Object value, final 
MutableContextData contextData) {
+        public void accept(final String key, final Object value, final 
StringMap contextData) {
             contextData.putValue(key, value);
         }
     };
@@ -310,10 +310,10 @@ public class OpenHashMapContextData<K, V> implements 
MutableContextData, ThreadC
         if (obj == this) {
             return true;
         }
-        if (!(obj instanceof ContextData)) {
+        if (!(obj instanceof ReadOnlyStringMap)) {
             return false;
         }
-        final ContextData other = (ContextData) obj;
+        final ReadOnlyStringMap other = (ReadOnlyStringMap) obj;
         if (other.size() != size()) {
             return false;
         }
@@ -483,7 +483,7 @@ public class OpenHashMapContextData<K, V> implements 
MutableContextData, ThreadC
     }
 
     @Override
-    public void putAll(final ContextData source) {
+    public void putAll(final ReadOnlyStringMap source) {
         assertNotFrozen();
         assertNoConcurrentModification();
 

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-perf/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteOpenHashMapThreadContextMap.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteOpenHashMapThreadContextMap.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteOpenHashMapThreadContextMap.java
index 6724aed..a0c6975 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteOpenHashMapThreadContextMap.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/spi/CopyOnWriteOpenHashMapThreadContextMap.java
@@ -17,8 +17,8 @@
 package org.apache.logging.log4j.spi;
 
 import org.apache.logging.log4j.perf.nogc.OpenHashMapContextData;
-import org.apache.logging.log4j.util.ContextData;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.PropertiesUtil;
 
 /**
@@ -34,13 +34,13 @@ public class CopyOnWriteOpenHashMapThreadContextMap extends 
CopyOnWriteSortedArr
     public static final Class<? extends ThreadContextMap> SUPER = 
CopyOnWriteSortedArrayThreadContextMap.class;
 
     @Override
-    protected MutableContextData createMutableContextData() {
+    protected StringMap createStringMap() {
         return new 
OpenHashMapContextData<>(PropertiesUtil.getProperties().getIntegerProperty(
                 PROPERTY_NAME_INITIAL_CAPACITY, DEFAULT_INITIAL_CAPACITY));
     }
 
     @Override
-    protected MutableContextData createMutableContextData(final ContextData 
original) {
+    protected StringMap createStringMap(final ReadOnlyStringMap original) {
         return new OpenHashMapContextData<>(original);
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-perf/src/main/java/org/apache/logging/log4j/spi/GarbageFreeOpenHashMapThreadContextMap.java
----------------------------------------------------------------------
diff --git 
a/log4j-perf/src/main/java/org/apache/logging/log4j/spi/GarbageFreeOpenHashMapThreadContextMap.java
 
b/log4j-perf/src/main/java/org/apache/logging/log4j/spi/GarbageFreeOpenHashMapThreadContextMap.java
index 8f1a931..b3ccf64 100644
--- 
a/log4j-perf/src/main/java/org/apache/logging/log4j/spi/GarbageFreeOpenHashMapThreadContextMap.java
+++ 
b/log4j-perf/src/main/java/org/apache/logging/log4j/spi/GarbageFreeOpenHashMapThreadContextMap.java
@@ -17,8 +17,8 @@
 package org.apache.logging.log4j.spi;
 
 import org.apache.logging.log4j.perf.nogc.OpenHashMapContextData;
-import org.apache.logging.log4j.util.ContextData;
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.ReadOnlyStringMap;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.util.PropertiesUtil;
 
 /**
@@ -37,13 +37,13 @@ public class GarbageFreeOpenHashMapThreadContextMap extends 
GarbageFreeSortedArr
     public static final Class<? extends ThreadContextMap> SUPER = 
GarbageFreeSortedArrayThreadContextMap.class;
 
     @Override
-    protected MutableContextData createMutableContextData() {
+    protected StringMap createStringMap() {
         return new 
OpenHashMapContextData<>(PropertiesUtil.getProperties().getIntegerProperty(
                 PROPERTY_NAME_INITIAL_CAPACITY, DEFAULT_INITIAL_CAPACITY));
     }
 
     @Override
-    protected MutableContextData createMutableContextData(final ContextData 
original) {
+    protected StringMap createStringMap(final ReadOnlyStringMap original) {
         return new OpenHashMapContextData<>(original);
     }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/800db9c7/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
----------------------------------------------------------------------
diff --git 
a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java 
b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
index e048896..6b0f3ae 100644
--- a/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
+++ b/log4j-to-slf4j/src/main/java/org/apache/logging/slf4j/MDCContextMap.java
@@ -19,9 +19,9 @@ package org.apache.logging.slf4j;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.logging.log4j.util.MutableContextData;
+import org.apache.logging.log4j.util.StringMap;
 import org.apache.logging.log4j.spi.ThreadContextMap2;
-import org.apache.logging.log4j.util.SortedStringArrayMap;
+import org.apache.logging.log4j.util.SortedArrayStringMap;
 import org.slf4j.MDC;
 
 /**
@@ -29,7 +29,7 @@ import org.slf4j.MDC;
  */
 public class MDCContextMap implements ThreadContextMap2 {
 
-    private static final MutableContextData EMPTY_CONTEXT_DATA = new 
SortedStringArrayMap();
+    private static final StringMap EMPTY_CONTEXT_DATA = new 
SortedArrayStringMap();
     static {
         EMPTY_CONTEXT_DATA.freeze();
     }
@@ -84,12 +84,12 @@ public class MDCContextMap implements ThreadContextMap2 {
     }
 
     @Override
-    public MutableContextData getReadOnlyContextData() {
+    public StringMap getReadOnlyContextData() {
         final Map<String, String> copy = getCopy();
         if (copy.isEmpty()) {
             return EMPTY_CONTEXT_DATA;
         }
-        final MutableContextData result = new SortedStringArrayMap();
+        final StringMap result = new SortedArrayStringMap();
         for (Entry<String, String> entry : copy.entrySet()) {
             result.putValue(entry.getKey(), entry.getValue());
         }

Reply via email to