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.
*