This is an automated email from the ASF dual-hosted git repository.

mattsicker pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new 4dd393c910 Refactor static fields into singleton instance fields
4dd393c910 is described below

commit 4dd393c91061b0eaf6587239b01c2d3f9a59dc59
Author: Matt Sicker <[email protected]>
AuthorDate: Thu May 26 20:51:29 2022 -0500

    Refactor static fields into singleton instance fields
    
    Signed-off-by: Matt Sicker <[email protected]>
---
 .../log4j/core/osgi/BundleContextSelector.java     | 16 ++++++------
 .../core/selector/ClassLoaderContextSelector.java  | 29 ++++++++--------------
 2 files changed, 19 insertions(+), 26 deletions(-)

diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
index e744e56107..165f3106a4 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/osgi/BundleContextSelector.java
@@ -89,7 +89,7 @@ public class BundleContextSelector extends 
ClassLoaderContextSelector {
 
     private LoggerContext getLoggerContext(final Bundle bundle) {
         final String name = Objects.requireNonNull(bundle, "No Bundle 
provided").getSymbolicName();
-        final AtomicReference<WeakReference<LoggerContext>> ref = 
CONTEXT_MAP.get(name);
+        final AtomicReference<WeakReference<LoggerContext>> ref = 
contextMap.get(name);
         if (ref != null && ref.get() != null) {
            return ref.get().get();
         }
@@ -97,7 +97,7 @@ public class BundleContextSelector extends 
ClassLoaderContextSelector {
     }
 
     private void removeLoggerContext(final LoggerContext context) {
-        CONTEXT_MAP.remove(context.getName());
+        contextMap.remove(context.getName());
     }
 
     @Override
@@ -137,20 +137,20 @@ public class BundleContextSelector extends 
ClassLoaderContextSelector {
         return lc == null ? getDefault() : lc;
     }
 
-    private static boolean hasContext(final Bundle bundle) {
+    private boolean hasContext(final Bundle bundle) {
         final String name = Objects.requireNonNull(bundle, "No Bundle 
provided").getSymbolicName();
-        final AtomicReference<WeakReference<LoggerContext>> ref = 
CONTEXT_MAP.get(name);
+        final AtomicReference<WeakReference<LoggerContext>> ref = 
contextMap.get(name);
         return ref != null && ref.get() != null && ref.get().get() != null && 
ref.get().get().isStarted();
     }
 
-    private static LoggerContext locateContext(final Bundle bundle, final URI 
configLocation) {
+    private LoggerContext locateContext(final Bundle bundle, final URI 
configLocation) {
         final String name = Objects.requireNonNull(bundle, "No Bundle 
provided").getSymbolicName();
-        final AtomicReference<WeakReference<LoggerContext>> ref = 
CONTEXT_MAP.get(name);
+        final AtomicReference<WeakReference<LoggerContext>> ref = 
contextMap.get(name);
         if (ref == null) {
             final LoggerContext context = new LoggerContext(name, bundle, 
configLocation);
-            CONTEXT_MAP.putIfAbsent(name,
+            contextMap.putIfAbsent(name,
                 new AtomicReference<>(new WeakReference<>(context)));
-            return CONTEXT_MAP.get(name).get().get();
+            return contextMap.get(name).get().get();
         }
         final WeakReference<LoggerContext> r = ref.get();
         final LoggerContext ctx = r.get();
diff --git 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
index 378b0d1adf..5cc1d36544 100644
--- 
a/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
+++ 
b/log4j-core/src/main/java/org/apache/logging/log4j/core/selector/ClassLoaderContextSelector.java
@@ -23,6 +23,7 @@ import org.apache.logging.log4j.plugins.Singleton;
 import org.apache.logging.log4j.plugins.di.Injector;
 import org.apache.logging.log4j.spi.LoggerContextShutdownAware;
 import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.util.LazyValue;
 import org.apache.logging.log4j.util.StackLocatorUtil;
 
 import java.lang.ref.WeakReference;
@@ -33,7 +34,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -51,12 +51,10 @@ import java.util.concurrent.atomic.AtomicReference;
 @Singleton
 public class ClassLoaderContextSelector implements ContextSelector, 
LoggerContextShutdownAware {
 
-    private static final AtomicReference<LoggerContext> DEFAULT_CONTEXT = new 
AtomicReference<>();
-
     protected static final StatusLogger LOGGER = StatusLogger.getLogger();
 
-    protected static final ConcurrentMap<String, 
AtomicReference<WeakReference<LoggerContext>>> CONTEXT_MAP =
-            new ConcurrentHashMap<>();
+    protected final LazyValue<LoggerContext> defaultContext = 
LazyValue.from(() -> createContext(defaultContextName(), null));
+    protected final Map<String, AtomicReference<WeakReference<LoggerContext>>> 
contextMap = new ConcurrentHashMap<>();
 
     protected final Injector injector;
 
@@ -116,7 +114,7 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
     private LoggerContext findContext(final ClassLoader loaderOrNull) {
         final ClassLoader loader = loaderOrNull != null ? loaderOrNull : 
ClassLoader.getSystemClassLoader();
         final String name = toContextMapKey(loader);
-        final AtomicReference<WeakReference<LoggerContext>> ref = 
CONTEXT_MAP.get(name);
+        final AtomicReference<WeakReference<LoggerContext>> ref = 
contextMap.get(name);
         if (ref != null) {
             final WeakReference<LoggerContext> weakRef = ref.get();
             return weakRef.get();
@@ -163,10 +161,10 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
 
     @Override
     public void removeContext(final LoggerContext context) {
-        for (final Map.Entry<String, 
AtomicReference<WeakReference<LoggerContext>>> entry : CONTEXT_MAP.entrySet()) {
+        for (final Map.Entry<String, 
AtomicReference<WeakReference<LoggerContext>>> entry : contextMap.entrySet()) {
             final LoggerContext ctx = entry.getValue().get().get();
             if (ctx == context) {
-                CONTEXT_MAP.remove(entry.getKey());
+                contextMap.remove(entry.getKey());
             }
         }
     }
@@ -180,7 +178,7 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
     @Override
     public List<LoggerContext> getLoggerContexts() {
         final List<LoggerContext> list = new ArrayList<>();
-        final Collection<AtomicReference<WeakReference<LoggerContext>>> coll = 
CONTEXT_MAP.values();
+        final Collection<AtomicReference<WeakReference<LoggerContext>>> coll = 
contextMap.values();
         for (final AtomicReference<WeakReference<LoggerContext>> ref : coll) {
             final LoggerContext ctx = ref.get().get();
             if (ctx != null) {
@@ -207,13 +205,13 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
         // LOG4J2-477: class loader may be null
         final ClassLoader loader = loaderOrNull != null ? loaderOrNull : 
ClassLoader.getSystemClassLoader();
         final String name = toContextMapKey(loader);
-        AtomicReference<WeakReference<LoggerContext>> ref = 
CONTEXT_MAP.get(name);
+        AtomicReference<WeakReference<LoggerContext>> ref = 
contextMap.get(name);
         if (ref == null) {
             if (configLocation == null) {
                 ClassLoader parent = loader.getParent();
                 while (parent != null) {
 
-                    ref = CONTEXT_MAP.get(toContextMapKey(parent));
+                    ref = contextMap.get(toContextMapKey(parent));
                     if (ref != null) {
                         final WeakReference<LoggerContext> r = ref.get();
                         final LoggerContext ctx = r.get();
@@ -245,7 +243,7 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
             if (entry != null) {
                 ctx.putObject(entry.getKey(), entry.getValue());
             }
-            final LoggerContext newContext = CONTEXT_MAP.computeIfAbsent(name,
+            final LoggerContext newContext = contextMap.computeIfAbsent(name,
                     k -> new AtomicReference<>(new 
WeakReference<>(ctx))).get().get();
             if (newContext != null && newContext == ctx) {
                 newContext.addShutdownListener(this);
@@ -292,12 +290,7 @@ public class ClassLoaderContextSelector implements 
ContextSelector, LoggerContex
     }
 
     protected LoggerContext getDefault() {
-        final LoggerContext ctx = DEFAULT_CONTEXT.get();
-        if (ctx != null) {
-            return ctx;
-        }
-        DEFAULT_CONTEXT.compareAndSet(null, 
createContext(defaultContextName(), null));
-        return DEFAULT_CONTEXT.get();
+        return defaultContext.get();
     }
 
     protected String defaultContextName() {

Reply via email to