You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2023/12/06 13:51:29 UTC
(logging-log4j2) 01/03: Upgrade to Spring Boot 3
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch main-spring-cloud-revamp
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 43703e482d204c0a347efc522d5c1090fba9c58c
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Wed Dec 6 11:28:24 2023 +0100
Upgrade to Spring Boot 3
---
.github/dependabot.yaml | 9 ---
.../log4j/jdbc/appender/internal/JndiUtil.java | 10 ++-
.../AbstractJdbcAppenderDataSourceTest.java | 6 +-
.../appender/DataSourceConnectionSourceTest.java | 4 +-
.../JdbcAppenderMapMessageDataSourceTest.java | 6 +-
log4j-jndi-test/pom.xml | 7 +-
.../logging/log4j/jndi/test/junit/JndiRule.java | 89 +++++++++++++++++++---
.../routing/RoutingAppenderWithJndiTest.java | 5 +-
.../org/apache/logging/log4j/jndi/JndiManager.java | 9 +++
log4j-parent/pom.xml | 26 -------
log4j-spring-cloud-config-client/pom.xml | 13 ++++
11 files changed, 129 insertions(+), 55 deletions(-)
diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml
index fb02e7e425..0f80d895ea 100644
--- a/.github/dependabot.yaml
+++ b/.github/dependabot.yaml
@@ -115,15 +115,6 @@ updates:
# EclipseLink 3.x is Jakarta EE 9
- dependency-name: "org.eclipse.persistence:*"
update-types: ["version-update:semver-major"]
- # Spring 6.x is Jakarta EE 9
- - dependency-name: "org.springframework:*"
- update-types: ["version-update:semver-major"]
- # Spring Boot 3.x is Jakarta EE 9
- - dependency-name: "org.springframework.boot:*"
- update-types: ["version-update:semver-major"]
- # Spring Cloud 2022.x is Jakarta EE 9
- - dependency-name: "org.springframework.cloud:*"
- update-types: ["version-update:semver-major"]
# Keep Logback version 1.2.x
- dependency-name: "ch.qos.logback:*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
diff --git a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/internal/JndiUtil.java b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/internal/JndiUtil.java
index ebfaa4693b..97213bc45e 100644
--- a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/internal/JndiUtil.java
+++ b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/internal/JndiUtil.java
@@ -29,13 +29,17 @@ import org.apache.logging.log4j.status.StatusLogger;
public final class JndiUtil {
private static final Logger LOGGER = StatusLogger.getLogger();
+ /**
+ * Manager name used for accessing the {@link JndiManager} instance.
+ */
+ public static final String JNDI_MANAGER_NAME = DataSourceConnectionSource.class.getCanonicalName();
+
private JndiUtil() {}
public static DataSource getDataSource(final String jndiName) {
try {
- final DataSource dataSource = JndiManager.getDefaultManager(
- DataSourceConnectionSource.class.getCanonicalName())
- .lookup(jndiName);
+ final DataSource dataSource =
+ JndiManager.getDefaultManager(JNDI_MANAGER_NAME).lookup(jndiName);
if (dataSource == null) {
LOGGER.error("No data source found with JNDI name [" + jndiName + "].");
return null;
diff --git a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/AbstractJdbcAppenderDataSourceTest.java b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/AbstractJdbcAppenderDataSourceTest.java
index 8b404fa453..e3709bd68f 100644
--- a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/AbstractJdbcAppenderDataSourceTest.java
+++ b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/AbstractJdbcAppenderDataSourceTest.java
@@ -31,6 +31,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
import org.apache.logging.log4j.core.util.Throwables;
+import org.apache.logging.log4j.jdbc.appender.internal.JndiUtil;
import org.apache.logging.log4j.jndi.test.junit.JndiRule;
import org.h2.util.IOUtils;
import org.junit.BeforeClass;
@@ -57,7 +58,10 @@ public abstract class AbstractJdbcAppenderDataSourceTest {
protected AbstractJdbcAppenderDataSourceTest(final JdbcRule jdbcRule) {
this.rules = RuleChain.emptyRuleChain()
- .around(new JndiRule("java:/comp/env/jdbc/TestDataSourceAppender", createMockDataSource()))
+ .around(new JndiRule(
+ JndiUtil.JNDI_MANAGER_NAME,
+ "java:/comp/env/jdbc/TestDataSourceAppender",
+ createMockDataSource()))
.around(jdbcRule)
.around(new LoggerContextRule("org/apache/logging/log4j/jdbc/appender/log4j2-data-source.xml"));
this.jdbcRule = jdbcRule;
diff --git a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSourceTest.java b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSourceTest.java
index 8868984b0a..25dc8a603c 100644
--- a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSourceTest.java
+++ b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/DataSourceConnectionSourceTest.java
@@ -27,6 +27,7 @@ import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
+import org.apache.logging.log4j.jdbc.appender.internal.JndiUtil;
import org.apache.logging.log4j.jndi.test.junit.JndiRule;
import org.junit.Rule;
import org.junit.Test;
@@ -52,7 +53,8 @@ public class DataSourceConnectionSourceTest {
private final String jndiURL;
public DataSourceConnectionSourceTest(final String jndiURL) {
- this.rules = RuleChain.outerRule(new JndiRule(jndiURL, dataSource)).around(new LoggerContextRule(CONFIG));
+ this.rules = RuleChain.outerRule(new JndiRule(JndiUtil.JNDI_MANAGER_NAME, jndiURL, dataSource))
+ .around(new LoggerContextRule(CONFIG));
this.jndiURL = jndiURL;
}
diff --git a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderMapMessageDataSourceTest.java b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderMapMessageDataSourceTest.java
index 46224ba2b3..45c9a201db 100644
--- a/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderMapMessageDataSourceTest.java
+++ b/log4j-jdbc/src/test/java/org/apache/logging/log4j/jdbc/appender/JdbcAppenderMapMessageDataSourceTest.java
@@ -33,6 +33,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.test.junit.LoggerContextRule;
import org.apache.logging.log4j.core.util.Throwables;
+import org.apache.logging.log4j.jdbc.appender.internal.JndiUtil;
import org.apache.logging.log4j.jndi.test.junit.JndiRule;
import org.apache.logging.log4j.message.MapMessage;
import org.junit.Assert;
@@ -70,7 +71,10 @@ public class JdbcAppenderMapMessageDataSourceTest {
protected JdbcAppenderMapMessageDataSourceTest(final JdbcRule jdbcRule) {
// @formatter:off
this.rules = RuleChain.emptyRuleChain()
- .around(new JndiRule("java:/comp/env/jdbc/TestDataSourceAppender", createMockDataSource()))
+ .around(new JndiRule(
+ JndiUtil.JNDI_MANAGER_NAME,
+ "java:/comp/env/jdbc/TestDataSourceAppender",
+ createMockDataSource()))
.around(jdbcRule)
.around(new LoggerContextRule(
"org/apache/logging/log4j/jdbc/appender/log4j2-data-source-map-message.xml"));
diff --git a/log4j-jndi-test/pom.xml b/log4j-jndi-test/pom.xml
index a8a610db70..e5cd9cef2b 100644
--- a/log4j-jndi-test/pom.xml
+++ b/log4j-jndi-test/pom.xml
@@ -31,6 +31,7 @@
<properties>
<log4jParentDir>${basedir}/..</log4jParentDir>
<module.name>org.apache.logging.log4j.jndi.test</module.name>
+ <simple-jndi.version>0.23.0</simple-jndi.version>
</properties>
<dependencies>
<dependency>
@@ -53,10 +54,10 @@
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
- <!-- `org.springframework:spring-test` is required for `org.springframework.mock.jndi.SimpleNamingContextBuilder`: -->
<dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
+ <groupId>com.github.h-thurow</groupId>
+ <artifactId>simple-jndi</artifactId>
+ <version>${simple-jndi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
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 04a8b5c71e..2918914475 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
@@ -16,29 +16,66 @@
*/
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.NamingException;
+import javax.naming.spi.InitialContextFactoryBuilder;
+import javax.naming.spi.NamingManager;
+import org.apache.logging.log4j.jndi.JndiManager;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
-import org.springframework.mock.jndi.SimpleNamingContextBuilder;
+import org.osjava.sj.jndi.MemoryContext;
/**
* JUnit rule to create a mock {@link Context} and bind an object to a name.
*
* @since 2.8
*/
+@SuppressWarnings("BanJNDI")
public class JndiRule implements TestRule {
- private final Map<String, Object> initialBindings;
+ static {
+ final InitialContextFactoryBuilder factoryBuilder =
+ factoryBuilderEnv -> factoryEnv -> new MemoryContext(new Hashtable<>()) {};
+ try {
+ NamingManager.setInitialContextFactoryBuilder(factoryBuilder);
+ } catch (final NamingException error) {
+ throw new RuntimeException(error);
+ }
+ }
+
+ @Nullable
+ private final String managerName;
+
+ private final Map<String, Object> bindings;
public JndiRule(final String name, final Object value) {
- this.initialBindings = Collections.singletonMap(name, value);
+ this(null, Collections.singletonMap(name, value));
}
- public JndiRule(final Map<String, Object> initialBindings) {
- this.initialBindings = initialBindings;
+ public JndiRule(@Nullable final String managerName, final String name, final Object value) {
+ this(managerName, Collections.singletonMap(name, value));
+ }
+
+ public JndiRule(final Map<String, Object> bindings) {
+ this(null, bindings);
+ }
+
+ public JndiRule(@Nullable final String managerName, final Map<String, Object> bindings) {
+ this.managerName = managerName;
+ this.bindings = requireNonNull(bindings, "bindings");
}
@Override
@@ -46,12 +83,46 @@ public class JndiRule implements TestRule {
return new Statement() {
@Override
public void evaluate() throws Throwable {
- final SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
- for (final Map.Entry<String, Object> entry : initialBindings.entrySet()) {
- builder.bind(entry.getKey(), entry.getValue());
- }
+ resetJndiManager();
base.evaluate();
}
};
}
+
+ private void resetJndiManager() throws NamingException {
+ if (JndiManager.isJndiEnabled()) {
+ final Context context = getContext();
+ clearBindings(context);
+ addBindings(context);
+ }
+ }
+
+ 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 -> {
+ try {
+ context.unbind(binding.getName());
+ } catch (NamingException error) {
+ throw new RuntimeException(error);
+ }
+ });
+ }
+
+ private void addBindings(Context context) throws NamingException {
+ for (final Map.Entry<String, Object> entry : bindings.entrySet()) {
+ final String name = entry.getKey();
+ final Object object = entry.getValue();
+ context.bind(name, object);
+ }
+ }
}
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 1b426904e1..09dc7cff11 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
@@ -21,11 +21,11 @@ import static org.junit.Assert.*;
import java.io.File;
import java.util.Collections;
import javax.naming.Context;
-import javax.naming.InitialContext;
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,7 +77,8 @@ public class RoutingAppenderWithJndiTest {
assertTrue("The default log file was not created", defaultLogFile.exists());
// now set jndi resource to Application1
- final Context context = new InitialContext();
+ final Context context = JndiManager.getDefaultManager().getContext();
+ assertNotNull(context);
context.bind(JNDI_CONTEXT_NAME, "Application1");
msg = new StructuredDataMessage("Test", "This is a message from Application1", "Context");
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 83248679f9..81e5d3feb6 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,6 +21,7 @@ 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;
@@ -194,6 +195,14 @@ 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.
*
diff --git a/log4j-parent/pom.xml b/log4j-parent/pom.xml
index fc4130524d..1656cde8f0 100644
--- a/log4j-parent/pom.xml
+++ b/log4j-parent/pom.xml
@@ -152,8 +152,6 @@
<slf4j.version>2.0.9</slf4j.version>
<!-- Last version before a breaking change -->
<slf4j-ext.version>1.7.25</slf4j-ext.version>
- <spring-boot.version>2.7.18</spring-boot.version>
- <spring-framework.version>5.3.31</spring-framework.version>
<system-stubs.version>2.1.5</system-stubs.version>
<tomcat-juli.version>10.1.16</tomcat-juli.version>
<velocity.version>1.7</velocity.version>
@@ -820,30 +818,6 @@
<version>${slf4j-ext.version}</version>
</dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot</artifactId>
- <version>${spring-boot.version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <version>${spring-boot.version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-logging</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${spring-framework.version}</version>
- </dependency>
-
<dependency>
<groupId>uk.org.webcompere</groupId>
<artifactId>system-stubs-core</artifactId>
diff --git a/log4j-spring-cloud-config-client/pom.xml b/log4j-spring-cloud-config-client/pom.xml
index 12c74caca6..bfdcca6b32 100644
--- a/log4j-spring-cloud-config-client/pom.xml
+++ b/log4j-spring-cloud-config-client/pom.xml
@@ -45,6 +45,7 @@
<Fragment-Host>org.apache.logging.log4j.core</Fragment-Host>
<!-- dependency versions -->
+ <spring-boot.version>3.2.0</spring-boot.version>
<spring-cloud.version>2021.0.8</spring-cloud.version>
</properties>
@@ -68,6 +69,18 @@
<scope>import</scope>
</dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <version>${spring-boot.version}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-logging</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+
</dependencies>
</dependencyManagement>