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

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


The following commit(s) were added to refs/heads/main by this push:
     new 6c31f1b413 Remove `JndiManager#getContext` method
6c31f1b413 is described below

commit 6c31f1b413f102923055203bdb2c1df15652a269
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Thu Dec 7 13:27:42 2023 +0100

    Remove `JndiManager#getContext` method
---
 .../logging/log4j/jndi/test/junit/JndiRule.java    | 59 ++++++++++++----------
 .../routing/RoutingAppenderWithJndiTest.java       | 12 ++---
 .../org/apache/logging/log4j/jndi/JndiManager.java |  9 ----
 3 files changed, 35 insertions(+), 45 deletions(-)

diff --git 
a/log4j-jndi-test/src/main/java/org/apache/logging/log4j/jndi/test/junit/JndiRule.java
 
b/log4j-jndi-test/src/main/java/org/apache/logging/log4j/jndi/test/junit/JndiRule.java
index dca58d4160..1a847a7f7b 100644
--- 
a/log4j-jndi-test/src/main/java/org/apache/logging/log4j/jndi/test/junit/JndiRule.java
+++ 
b/log4j-jndi-test/src/main/java/org/apache/logging/log4j/jndi/test/junit/JndiRule.java
@@ -17,18 +17,13 @@
 package org.apache.logging.log4j.jndi.test.junit;
 
 import static java.util.Objects.requireNonNull;
-import static org.junit.Assert.assertNotNull;
 
 import java.util.Collections;
 import java.util.Hashtable;
 import java.util.Map;
-import java.util.Set;
-import java.util.Spliterators;
-import java.util.stream.Collectors;
-import java.util.stream.StreamSupport;
 import javax.annotation.Nullable;
 import javax.naming.Context;
-import javax.naming.NameClassPair;
+import javax.naming.Name;
 import javax.naming.NamingException;
 import javax.naming.spi.InitialContextFactoryBuilder;
 import javax.naming.spi.NamingManager;
@@ -46,9 +41,11 @@ import org.osjava.sj.jndi.MemoryContext;
 @SuppressWarnings("BanJNDI")
 public class JndiRule implements TestRule {
 
+    private static final Hashtable<String, Object> ENV = new 
Hashtable<>(Map.of(MemoryContext.IGNORE_CLOSE, "true"));
+    private static final Context CONTEXT = new MemoryContext(ENV);
+
     static {
-        final InitialContextFactoryBuilder factoryBuilder =
-                factoryBuilderEnv -> factoryEnv -> new MemoryContext(new 
Hashtable<>()) {};
+        final InitialContextFactoryBuilder factoryBuilder = factoryBuilderEnv 
-> factoryEnv -> CONTEXT;
         try {
             NamingManager.setInitialContextFactoryBuilder(factoryBuilder);
         } catch (final NamingException error) {
@@ -91,38 +88,44 @@ public class JndiRule implements TestRule {
 
     private void resetJndiManager() throws NamingException {
         if (JndiManager.isJndiEnabled()) {
-            final Context context = getContext();
-            clearBindings(context);
-            addBindings(context);
+            clearBindings();
+            addBindings();
         }
     }
 
-    private Context getContext() {
-        final JndiManager manager =
-                managerName == null ? JndiManager.getDefaultManager() : 
JndiManager.getDefaultManager(managerName);
-        @Nullable final Context context = manager.getContext();
-        assertNotNull(context);
-        return context;
-    }
-
-    private static void clearBindings(final Context context) throws 
NamingException {
-        final Set<NameClassPair> existingBindings = StreamSupport.stream(
-                        
Spliterators.spliteratorUnknownSize(context.list("").asIterator(), 0), false)
-                .collect(Collectors.toSet());
-        existingBindings.forEach(binding -> {
+    private static void clearBindings() throws NamingException {
+        Collections.list(CONTEXT.list("")).forEach(binding -> {
             try {
-                context.unbind(binding.getName());
+                CONTEXT.unbind(binding.getName());
             } catch (NamingException error) {
                 throw new RuntimeException(error);
             }
         });
     }
 
-    private void addBindings(final Context context) throws NamingException {
+    private void addBindings() throws NamingException {
         for (final Map.Entry<String, Object> entry : bindings.entrySet()) {
-            final String name = entry.getKey();
+            final String key = entry.getKey();
             final Object object = entry.getValue();
-            context.bind(name, object);
+            recursiveBind(key, object);
+        }
+    }
+
+    public static void recursiveBind(final String key, final Object value) 
throws NamingException {
+        final Name name = CONTEXT.getNameParser((Name) null).parse(key);
+        Context currentContext = CONTEXT;
+        final int lastIndex = name.size() - 1;
+        for (int i = 0; i < lastIndex; i++) {
+            try {
+                currentContext = (Context) currentContext.lookup(name.get(i));
+            } catch (NamingException ignored) {
+                currentContext = currentContext.createSubcontext(name.get(i));
+            }
         }
+        currentContext.bind(name.get(lastIndex), value);
+    }
+
+    public static void rebind(final String key, final Object value) throws 
NamingException {
+        CONTEXT.rebind(key, value);
     }
 }
diff --git 
a/log4j-jndi-test/src/test/java/org/apache/logging/log4j/jndi/appender/routing/RoutingAppenderWithJndiTest.java
 
b/log4j-jndi-test/src/test/java/org/apache/logging/log4j/jndi/appender/routing/RoutingAppenderWithJndiTest.java
index 09dc7cff11..03d8402233 100644
--- 
a/log4j-jndi-test/src/test/java/org/apache/logging/log4j/jndi/appender/routing/RoutingAppenderWithJndiTest.java
+++ 
b/log4j-jndi-test/src/test/java/org/apache/logging/log4j/jndi/appender/routing/RoutingAppenderWithJndiTest.java
@@ -20,12 +20,10 @@ import static org.junit.Assert.*;
 
 import java.io.File;
 import java.util.Collections;
-import javax.naming.Context;
 import javax.naming.NamingException;
 import org.apache.logging.log4j.EventLogger;
 import org.apache.logging.log4j.core.test.appender.ListAppender;
 import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
-import org.apache.logging.log4j.jndi.JndiManager;
 import org.apache.logging.log4j.jndi.test.junit.JndiRule;
 import org.apache.logging.log4j.message.StructuredDataMessage;
 import org.junit.After;
@@ -77,9 +75,7 @@ public class RoutingAppenderWithJndiTest {
         assertTrue("The default log file was not created", 
defaultLogFile.exists());
 
         // now set jndi resource to Application1
-        final Context context = JndiManager.getDefaultManager().getContext();
-        assertNotNull(context);
-        context.bind(JNDI_CONTEXT_NAME, "Application1");
+        JndiRule.recursiveBind(JNDI_CONTEXT_NAME, "Application1");
 
         msg = new StructuredDataMessage("Test", "This is a message from 
Application1", "Context");
         EventLogger.logEvent(msg);
@@ -90,7 +86,7 @@ public class RoutingAppenderWithJndiTest {
                 listAppender1.getEvents().size() == 1);
 
         // now set jndi resource to Application2
-        context.rebind(JNDI_CONTEXT_NAME, "Application2");
+        JndiRule.rebind(JNDI_CONTEXT_NAME, "Application2");
 
         msg = new StructuredDataMessage("Test", "This is a message from 
Application2", "Context");
         EventLogger.logEvent(msg);
@@ -118,7 +114,7 @@ public class RoutingAppenderWithJndiTest {
 
         // now set jndi resource to Application3.
         // The context name, 'Application3', will be used as log file name by 
the default route.
-        context.rebind("java:comp/env/logging/context-name", "Application3");
+        JndiRule.rebind(JNDI_CONTEXT_NAME, "Application3");
         msg = new StructuredDataMessage("Test", "This is a message from 
Application3", "Context");
         EventLogger.logEvent(msg);
         final File application3LogFile = new 
File("target/routingbyjndi/routingbyjnditest-Application3.log");
@@ -126,7 +122,7 @@ public class RoutingAppenderWithJndiTest {
 
         // now set jndi resource to Application4
         // The context name, 'Application4', will be used as log file name by 
the default route.
-        context.rebind("java:comp/env/logging/context-name", "Application4");
+        JndiRule.rebind(JNDI_CONTEXT_NAME, "Application4");
         msg = new StructuredDataMessage("Test", "This is a message from 
Application4", "Context");
         EventLogger.logEvent(msg);
         final File application4LogFile = new 
File("target/routingbyjndi/routingbyjnditest-Application4.log");
diff --git 
a/log4j-jndi/src/main/java/org/apache/logging/log4j/jndi/JndiManager.java 
b/log4j-jndi/src/main/java/org/apache/logging/log4j/jndi/JndiManager.java
index 81e5d3feb6..83248679f9 100644
--- a/log4j-jndi/src/main/java/org/apache/logging/log4j/jndi/JndiManager.java
+++ b/log4j-jndi/src/main/java/org/apache/logging/log4j/jndi/JndiManager.java
@@ -21,7 +21,6 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Properties;
 import java.util.concurrent.TimeUnit;
-import javax.annotation.Nullable;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
@@ -195,14 +194,6 @@ public class JndiManager extends AbstractManager {
         return JndiCloser.closeSilently(this.context);
     }
 
-    /**
-     * @return the active context
-     */
-    @Nullable
-    public Context getContext() {
-        return context;
-    }
-
     /**
      * Looks up a named object through this JNDI context.
      *

Reply via email to