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

asf-gitbox-commits pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit 684b555cd0a400eeadfd26e97659e041f4f07937
Author: Andrus Adamchik <[email protected]>
AuthorDate: Wed May 13 15:12:23 2026 -0400

    getting rid of Spring test dependency
---
 cayenne/pom.xml                                    |  17 --
 .../runtime/JNDIDataSourceFactoryIT.java           |   1 -
 .../cayenne/configuration/runtime/JNDISetup.java   | 241 +++++++++++++++++++++
 .../java/org/apache/cayenne/unit/JNDISetup.java    |  57 -----
 pom.xml                                            |  20 --
 5 files changed, 241 insertions(+), 95 deletions(-)

diff --git a/cayenne/pom.xml b/cayenne/pom.xml
index eecf911c5..686fc8930 100644
--- a/cayenne/pom.xml
+++ b/cayenne/pom.xml
@@ -62,23 +62,6 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-core</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework</groupId>
-            <artifactId>spring-mock</artifactId>
-            <scope>test</scope>
-            <exclusions>
-                <exclusion>
-                    <!-- do not need this one -->
-                    <groupId>log4j</groupId>
-                    <artifactId>log4j</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
         <dependency>
             <groupId>com.mockrunner</groupId>
             <artifactId>mockrunner-jdbc</artifactId>
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDIDataSourceFactoryIT.java
 
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDIDataSourceFactoryIT.java
index 57037a439..85a114888 100644
--- 
a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDIDataSourceFactoryIT.java
+++ 
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDIDataSourceFactoryIT.java
@@ -21,7 +21,6 @@ package org.apache.cayenne.configuration.runtime;
 import com.mockrunner.mock.jdbc.MockDataSource;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.unit.JNDISetup;
 import org.apache.cayenne.unit.di.runtime.CayenneProjects;
 import org.apache.cayenne.unit.di.runtime.CayenneTestsEnv;
 import org.junit.jupiter.api.extension.RegisterExtension;
diff --git 
a/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDISetup.java 
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDISetup.java
new file mode 100644
index 000000000..978a27882
--- /dev/null
+++ 
b/cayenne/src/test/java/org/apache/cayenne/configuration/runtime/JNDISetup.java
@@ -0,0 +1,241 @@
+/*****************************************************************
+ *   Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    https://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ ****************************************************************/
+package org.apache.cayenne.configuration.runtime;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.Name;
+import javax.naming.NameClassPair;
+import javax.naming.NameNotFoundException;
+import javax.naming.NameParser;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.OperationNotSupportedException;
+import javax.naming.spi.InitialContextFactory;
+import javax.naming.spi.InitialContextFactoryBuilder;
+import javax.naming.spi.NamingManager;
+import java.util.Hashtable;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * A helper to setup a shared test JNDI environment.
+ */
+class JNDISetup {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(JNDISetup.class);
+
+    private static final String ENV_SUBCONTEXT = "java:comp/env";
+
+    private static final Map<String, Object> BINDINGS = new 
ConcurrentHashMap<>();
+
+    private static volatile boolean setup;
+
+    public static void doSetup() {
+        if (setup) {
+            return;
+        }
+        synchronized (JNDISetup.class) {
+            if (setup) {
+                return;
+            }
+            try {
+                NamingManager.setInitialContextFactoryBuilder(new 
InMemoryContextFactoryBuilder());
+            } catch (NamingException e) {
+                logger.error("Can't perform JNDI setup, ignoring...", e);
+            }
+            setup = true;
+        }
+    }
+
+    private static class InMemoryContextFactoryBuilder implements 
InitialContextFactoryBuilder {
+        @Override
+        public InitialContextFactory createInitialContextFactory(Hashtable<?, 
?> environment) {
+            return env -> new InMemoryContext("");
+        }
+    }
+
+    private static class InMemoryContext implements Context {
+
+        private final String prefix;
+
+        InMemoryContext(String prefix) {
+            this.prefix = prefix;
+        }
+
+        private String fullName(String name) {
+            return prefix.isEmpty() ? name : prefix + "/" + name;
+        }
+
+        @Override
+        public Object lookup(String name) throws NamingException {
+            String key = fullName(name);
+            if (ENV_SUBCONTEXT.equals(key)) {
+                return new InMemoryContext(key);
+            }
+            Object value = BINDINGS.get(key);
+            if (value == null) {
+                throw new NameNotFoundException(key);
+            }
+            return value;
+        }
+
+        @Override
+        public Object lookup(Name name) throws NamingException {
+            return lookup(name.toString());
+        }
+
+        @Override
+        public void bind(String name, Object obj) {
+            BINDINGS.put(fullName(name), obj);
+        }
+
+        @Override
+        public void bind(Name name, Object obj) {
+            bind(name.toString(), obj);
+        }
+
+        @Override
+        public void rebind(String name, Object obj) {
+            BINDINGS.put(fullName(name), obj);
+        }
+
+        @Override
+        public void rebind(Name name, Object obj) {
+            rebind(name.toString(), obj);
+        }
+
+        @Override
+        public void unbind(String name) {
+            BINDINGS.remove(fullName(name));
+        }
+
+        @Override
+        public void unbind(Name name) {
+            unbind(name.toString());
+        }
+
+        @Override
+        public void close() {
+        }
+
+        @Override
+        public void rename(Name oldName, Name newName) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public void rename(String oldName, String newName) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(Name name) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public NamingEnumeration<NameClassPair> list(String name) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(Name name) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public NamingEnumeration<Binding> listBindings(String name) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public void destroySubcontext(Name name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public void destroySubcontext(String name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public Context createSubcontext(Name name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public Context createSubcontext(String name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public Object lookupLink(Name name) throws NamingException {
+            return lookup(name);
+        }
+
+        @Override
+        public Object lookupLink(String name) throws NamingException {
+            return lookup(name);
+        }
+
+        @Override
+        public NameParser getNameParser(Name name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public NameParser getNameParser(String name) throws NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public Name composeName(Name name, Name prefix) throws NamingException 
{
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public String composeName(String name, String prefix) throws 
NamingException {
+            throw new OperationNotSupportedException();
+        }
+
+        @Override
+        public Object addToEnvironment(String propName, Object propVal) {
+            return null;
+        }
+
+        @Override
+        public Object removeFromEnvironment(String propName) {
+            return null;
+        }
+
+        @Override
+        public Hashtable<?, ?> getEnvironment() {
+            return new Hashtable<>();
+        }
+
+        @Override
+        public String getNameInNamespace() {
+            return prefix;
+        }
+    }
+}
diff --git a/cayenne/src/test/java/org/apache/cayenne/unit/JNDISetup.java 
b/cayenne/src/test/java/org/apache/cayenne/unit/JNDISetup.java
deleted file mode 100644
index cb50c8370..000000000
--- a/cayenne/src/test/java/org/apache/cayenne/unit/JNDISetup.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*****************************************************************
- *   Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    https://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- ****************************************************************/
-package org.apache.cayenne.unit;
-
-import javax.naming.NamingException;
-import javax.naming.spi.NamingManager;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.mock.jndi.SimpleNamingContextBuilder;
-
-/**
- * A helper class to setup a shared test JNDI environment.
- */
-public class JNDISetup {
-
-    private static Logger logger = LoggerFactory.getLogger(JNDISetup.class);
-
-    private static volatile boolean setup;
-
-    public static void doSetup() {
-        if (!setup) {
-
-            synchronized (JNDISetup.class) {
-
-                if (!setup) {
-                    try {
-                        NamingManager
-                                .setInitialContextFactoryBuilder(new 
SimpleNamingContextBuilder());
-                    }
-                    catch (NamingException e) {
-                        logger.error("Can't perform JNDI setup, ignoring...", 
e);
-                    }
-
-                    setup = true;
-                }
-            }
-        }
-    }
-
-}
diff --git a/pom.xml b/pom.xml
index dd3b1ea84..91241a6b2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -383,26 +383,6 @@
                 <artifactId>mockrunner-jdbc</artifactId>
                 <version>2.0.7</version>
             </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-core</artifactId>
-                <version>5.3.39</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>xerces</groupId>
-                        <artifactId>xerces</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>xml-apis</groupId>
-                        <artifactId>xml-apis</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-mock</artifactId>
-                <version>2.0.8</version>
-            </dependency>
             <dependency>
                 <groupId>org.apache.velocity</groupId>
                 <artifactId>velocity-engine-core</artifactId>

Reply via email to