You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2022/07/13 12:09:56 UTC

[cayenne] branch master updated: CAY-2737 Cayenne 4.3: cleanup deprecated code - some more deprecated code deleted

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 45c75e3d9 CAY-2737 Cayenne 4.3: cleanup deprecated code   - some more deprecated code deleted
45c75e3d9 is described below

commit 45c75e3d99f292432c09853fd42e7bfec4bf5815
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Wed Jul 13 13:28:21 2022 +0300

    CAY-2737 Cayenne 4.3: cleanup deprecated code
      - some more deprecated code deleted
---
 .../tools/GradlePluginClassLoaderManager.java      | 97 ----------------------
 .../configuration/server/DataDomainProvider.java   | 15 +---
 .../xml/XMLDataChannelDescriptorLoader.java        | 52 ------------
 .../org/apache/cayenne/graph/ChildDiffLoader.java  |  3 +-
 .../org/apache/cayenne/map/EntityResolver.java     | 24 +++++-
 .../java/org/apache/cayenne/map/ObjEntity.java     | 23 -----
 .../reflect/LazyClassDescriptorDecorator.java      |  2 +-
 .../cayenne/reflect/LifecycleCallbackRegistry.java |  8 +-
 .../reflect/PersistentDescriptorFactory.java       |  2 +-
 .../cayenne/access/DataContextQueryChainIT.java    |  1 -
 .../cayenne/access/VerticalInheritanceIT.java      |  1 -
 .../select/DescriptorColumnExtractorTest.java      |  5 +-
 .../cayenne/dba/ConcurrentPkGeneratorIT.java       |  6 +-
 13 files changed, 39 insertions(+), 200 deletions(-)

diff --git a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePluginClassLoaderManager.java b/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePluginClassLoaderManager.java
deleted file mode 100644
index 6c49be9bc..000000000
--- a/cayenne-gradle-plugin/src/main/java/org/apache/cayenne/tools/GradlePluginClassLoaderManager.java
+++ /dev/null
@@ -1,97 +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.tools;
-
-import org.apache.cayenne.di.ClassLoaderManager;
-
-import java.io.File;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-import org.gradle.api.Project;
-import org.gradle.api.artifacts.Configuration;
-import org.gradle.api.artifacts.ConfigurationContainer;
-import org.gradle.api.artifacts.Dependency;
-import org.gradle.api.artifacts.DependencySet;
-
-/**
- * Gradle class loader manager to update class loader urls with project dependencies.
- *
- * @since 4.1
- *
- * @deprecated
- * Class supports only compile gradle configuration, which is removed in gradle 7.0
- * replaced with org.apache.cayenne.di.spi.DefaultClassLoaderManager
- *
- * Class will be removed in next updates
- * @since 4.2.M4
- */
-@Deprecated
-public class GradlePluginClassLoaderManager implements ClassLoaderManager {
-
-    private Project project;
-    private List<URL> urls = new ArrayList<>();
-
-    public GradlePluginClassLoaderManager(final Project project) {
-        this.project = project;
-    }
-
-    @Override
-    public ClassLoader getClassLoader(final String resourceName) {
-        return buildClassLoader();
-    }
-
-    private void addUrlFromDependency(final Dependency dependency, final Configuration configuration) {
-
-        if(dependency == null) {
-            return;
-        }
-
-        configuration.files(dependency).forEach(this::addUrlFromFile);
-    }
-
-    private void addUrlFromFile(final File file) {
-        try {
-            urls.add(file.toURI().toURL());
-        } catch (Exception ignored) {
-        }
-    }
-
-    private ClassLoader buildClassLoader() {
-        ClassLoader classLoader = getClass().getClassLoader();
-        ConfigurationContainer configurations = project.getConfigurations();
-
-        if (configurations == null || configurations.isEmpty()) {
-            return classLoader;
-        }
-
-        Configuration configuration = configurations.getByName("compile");
-        DependencySet dependencies = configuration.getDependencies();
-        if(dependencies == null || dependencies.isEmpty()) {
-            return classLoader;
-        }
-
-        dependencies.forEach(dependency -> addUrlFromDependency(dependency, configuration));
-
-        return new URLClassLoader(urls.toArray(new URL[0]), getClass().getClassLoader());
-    }
-
-}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
index e948c8355..f7aeb038e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
@@ -35,6 +35,7 @@ import org.apache.cayenne.configuration.DataChannelDescriptorLoader;
 import org.apache.cayenne.configuration.DataChannelDescriptorMerger;
 import org.apache.cayenne.configuration.DataNodeDescriptor;
 import org.apache.cayenne.configuration.RuntimeProperties;
+import org.apache.cayenne.di.AdhocObjectFactory;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.di.Injector;
 import org.apache.cayenne.di.Provider;
@@ -100,15 +101,6 @@ public class DataDomainProvider implements Provider<DataDomain> {
 	@Inject
 	protected DataNodeFactory dataNodeFactory;
 
-	@Inject
-	protected ValueObjectTypeRegistry valueObjectTypeRegistry;
-
-	/**
-	 * @since 4.2
-	 */
-	@Inject
-	protected ValueComparisonStrategyFactory valueComparisonStrategyFactory;
-
 	@Override
 	public DataDomain get() throws ConfigurationException {
 
@@ -148,8 +140,9 @@ public class DataDomainProvider implements Provider<DataDomain> {
 		}
 
 		dataDomain.getEntityResolver().applyDBLayerDefaults();
-		dataDomain.getEntityResolver().setValueObjectTypeRegistry(valueObjectTypeRegistry);
-		dataDomain.getEntityResolver().setValueComparisionStrategyFactory(valueComparisonStrategyFactory);
+		dataDomain.getEntityResolver().setValueObjectTypeRegistry(injector.getInstance(ValueObjectTypeRegistry.class));
+		dataDomain.getEntityResolver().setValueComparisonStrategyFactory(injector.getInstance(ValueComparisonStrategyFactory.class));
+		dataDomain.getEntityResolver().setObjectFactory(injector.getInstance(AdhocObjectFactory.class));
 
 		for (DataNodeDescriptor nodeDescriptor : descriptor.getNodeDescriptors()) {
 			addDataNode(dataDomain, nodeDescriptor);
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
index fbb56ce41..1de65aa5a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/configuration/xml/XMLDataChannelDescriptorLoader.java
@@ -27,18 +27,13 @@ import org.apache.cayenne.configuration.DataMapLoader;
 import org.apache.cayenne.di.AdhocObjectFactory;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.di.Provider;
-import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.resource.Resource;
-import org.apache.cayenne.util.Util;
 import org.slf4j.LoggerFactory;
 import org.slf4j.Logger;
 import org.xml.sax.InputSource;
 import org.xml.sax.XMLReader;
 
-import java.io.BufferedReader;
-import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.net.URL;
 import java.util.Arrays;
 
@@ -58,53 +53,6 @@ public class XMLDataChannelDescriptorLoader implements DataChannelDescriptorLoad
 		Arrays.sort(SUPPORTED_PROJECT_VERSIONS);
 	}
 
-	/**
-	 * @deprecated the caller should use password resolving strategy instead of
-	 *             resolving the password on the spot. For one thing this can be
-	 *             used in the Modeler and no password may be available.
-	 */
-	@Deprecated
-	static String passwordFromURL(URL url) {
-		InputStream inputStream;
-		String password = null;
-
-		try {
-			inputStream = url.openStream();
-			password = passwordFromInputStream(inputStream);
-		} catch (IOException exception) {
-			// Log the error while trying to open the stream. A null
-			// password will be returned as a result.
-			logger.warn(exception.getMessage(), exception);
-		}
-
-		return password;
-	}
-
-	/**
-	 * @deprecated the caller should use password resolving strategy instead of
-	 *             resolving the password on the spot. For one thing this can be
-	 *             used in the Modeler and no password may be available.
-	 */
-	@Deprecated
-	static String passwordFromInputStream(InputStream inputStream) {
-		String password = null;
-
-		try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));) {
-
-			password = bufferedReader.readLine();
-		} catch (IOException exception) {
-			logger.warn(exception.getMessage(), exception);
-		} finally {
-
-			try {
-				inputStream.close();
-			} catch (IOException ignored) {
-			}
-		}
-
-		return password;
-	}
-
 	@Inject
 	protected Provider<XMLReader> xmlReaderProvider;
 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java b/cayenne-server/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
index 6c6889932..8bfd9a1de 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/graph/ChildDiffLoader.java
@@ -96,8 +96,9 @@ public class ChildDiffLoader implements GraphChangeHandler {
 			}
 
 			Persistent dataObject;
+			Class<?> javaClass = context.getEntityResolver().getObjectFactory().getJavaClass(entity.getJavaClassName());
 			try {
-				dataObject = (Persistent) entity.getJavaClass().getDeclaredConstructor().newInstance();
+				dataObject = (Persistent) javaClass.getDeclaredConstructor().newInstance();
 			} catch (Exception ex) {
 				throw new CayenneRuntimeException("Error instantiating object.", ex);
 			}
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
index 09d31b12e..55f98e110 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/EntityResolver.java
@@ -43,6 +43,7 @@ import org.apache.cayenne.annotation.PostUpdate;
 import org.apache.cayenne.annotation.PrePersist;
 import org.apache.cayenne.annotation.PreRemove;
 import org.apache.cayenne.annotation.PreUpdate;
+import org.apache.cayenne.di.AdhocObjectFactory;
 import org.apache.cayenne.reflect.ClassDescriptor;
 import org.apache.cayenne.reflect.ClassDescriptorMap;
 import org.apache.cayenne.reflect.FaultFactory;
@@ -104,6 +105,11 @@ public class EntityResolver implements MappingNamespace, Serializable {
      */
     protected transient EntitySorter entitySorter;
 
+    /**
+     * @since 4.3
+     */
+    protected transient AdhocObjectFactory objectFactory;
+
 
     /**
      * Creates new empty EntityResolver.
@@ -174,7 +180,7 @@ public class EntityResolver implements MappingNamespace, Serializable {
 
             // load entity callbacks
             for (ObjEntity entity : getObjEntities()) {
-                Class<?> entityClass = entity.getJavaClass();
+                Class<?> entityClass = objectFactory.getJavaClass(entity.getJavaClassName());
 
                 // load annotated methods
                 for (Method m : entityClass.getDeclaredMethods()) {
@@ -538,7 +544,7 @@ public class EntityResolver implements MappingNamespace, Serializable {
     /**
      * @since 4.2
      */
-    public void setValueComparisionStrategyFactory(ValueComparisonStrategyFactory valueComparisonStrategyFactory) {
+    public void setValueComparisonStrategyFactory(ValueComparisonStrategyFactory valueComparisonStrategyFactory) {
         this.valueComparisonStrategyFactory = valueComparisonStrategyFactory;
     }
 
@@ -555,4 +561,18 @@ public class EntityResolver implements MappingNamespace, Serializable {
     public EntitySorter getEntitySorter() {
         return entitySorter;
     }
+
+    /**
+     * @since 4.3
+     */
+    public void setObjectFactory(AdhocObjectFactory objectFactory) {
+        this.objectFactory = objectFactory;
+    }
+
+    /**
+     * @since 4.3
+     */
+    public AdhocObjectFactory getObjectFactory() {
+        return objectFactory;
+    }
 }
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
index b12e27390..117cdcfca 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/ObjEntity.java
@@ -178,29 +178,6 @@ public class ObjEntity extends Entity implements ObjEntityListener, Configuratio
         return name;
     }
 
-    /**
-     * Returns Java class of persistent objects described by this entity. For
-     * generic entities with no class specified explicitly, default DataMap
-     * superclass is used, and if it is not set - CayenneDataObject is used.
-     * Casts any thrown exceptions into CayenneRuntimeException.
-     * 
-     * @since 1.2
-     * @deprecated since 4.0 this method based on statically defined class
-     *             loading algorithm is not going to work in environments like
-     *             OSGi. {@link AdhocObjectFactory} should be used as it can
-     *             provide the environment-specific class loading policy. 
-     */
-    @Deprecated
-    public Class<?> getJavaClass() {
-        String name = getJavaClassName();
-
-        try {
-            return Util.getJavaClass(name);
-        } catch (ClassNotFoundException e) {
-            throw new CayenneRuntimeException("Failed to doLoad class " + name + ": " + e.getMessage(), e);
-        }
-    }
-
     /**
      * Returns an object that stores callback methods of this entity.
      * 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/LazyClassDescriptorDecorator.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/LazyClassDescriptorDecorator.java
index 821334e8a..9a7576e9a 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/LazyClassDescriptorDecorator.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/LazyClassDescriptorDecorator.java
@@ -113,7 +113,7 @@ public class LazyClassDescriptorDecorator implements ClassDescriptor {
 
             ObjEntity entity = descriptorMap.getResolver().getObjEntity(entityName);
             if (entity != null) {
-                return entity.getJavaClass();
+                return descriptorMap.getResolver().getObjectFactory().getJavaClass(entity.getJavaClassName());
             }
         }
 
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
index c8af4c83b..642a8d518 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/LifecycleCallbackRegistry.java
@@ -403,13 +403,7 @@ public class LifecycleCallbackRegistry {
 			entities = new HashSet<>();
 
 			for (ObjEntity entity : entityResolver.getObjEntities()) {
-				Class<?> entityType;
-				try {
-					entityType = Util.getJavaClass(entity.getClassName());
-				} catch (ClassNotFoundException e) {
-					throw new CayenneRuntimeException("Class not found: " + entity.getClassName(), e);
-				}
-
+				Class<?> entityType = entityResolver.getObjectFactory().getJavaClass(entity.getJavaClassName());
 				// ensure that we don't register the same callback for multiple
 				// classes in the same hierarchy, so find the topmost type using
 				// a given annotation and register it once
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
index 3ff91b4ea..83eaf7aa0 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/reflect/PersistentDescriptorFactory.java
@@ -56,7 +56,7 @@ public abstract class PersistentDescriptorFactory implements ClassDescriptorFact
             throw new CayenneRuntimeException("Unmapped entity: %s", entityName);
         }
 
-        Class<?> entityClass = entity.getJavaClass();
+        Class<?> entityClass = descriptorMap.getResolver().getObjectFactory().getJavaClass(entity.getJavaClassName());
         return getDescriptor(entity, entityClass);
     }
 
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java
index 51a2362c8..7394fc747 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/DataContextQueryChainIT.java
@@ -41,7 +41,6 @@ public class DataContextQueryChainIT extends ServerCase {
     private DataContext context;
 
     @Test
-    @Deprecated
     public void testSelectQuery() {
         Artist a1 = context.newObject(Artist.class);
         a1.setArtistName("X");
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
index 4a83c8392..7bcbff3ea 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/VerticalInheritanceIT.java
@@ -526,7 +526,6 @@ public class VerticalInheritanceIT extends ServerCase {
 	}
 
     @Test
-	@Deprecated
 	public void testSelectQuery_AttributeOverrides() throws Exception {
 
 		TableHelper iv1RootTable = new TableHelper(dbHelper, "IV1_ROOT");
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorTest.java b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorTest.java
index 523d1fee2..a6ad6c117 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/access/translator/select/DescriptorColumnExtractorTest.java
@@ -23,6 +23,8 @@ import java.sql.Types;
 
 import org.apache.cayenne.access.sqlbuilder.sqltree.ColumnNode;
 import org.apache.cayenne.access.types.ValueObjectTypeRegistry;
+import org.apache.cayenne.di.spi.DefaultAdhocObjectFactory;
+import org.apache.cayenne.di.spi.DefaultClassLoaderManager;
 import org.apache.cayenne.map.DataMap;
 import org.apache.cayenne.map.DbEntity;
 import org.apache.cayenne.map.EntityResolver;
@@ -69,7 +71,8 @@ public class DescriptorColumnExtractorTest extends BaseColumnExtractorTest {
 
         EntityResolver resolver = new EntityResolver();
         resolver.addDataMap(dataMap);
-        resolver.setValueComparisionStrategyFactory(new DefaultValueComparisonStrategyFactory(mock(ValueObjectTypeRegistry.class)));
+        resolver.setValueComparisonStrategyFactory(new DefaultValueComparisonStrategyFactory(mock(ValueObjectTypeRegistry.class)));
+        resolver.setObjectFactory(new DefaultAdhocObjectFactory(null, new DefaultClassLoaderManager()));
 
         DescriptorColumnExtractor extractor = new DescriptorColumnExtractor(context, resolver.getClassDescriptor("mock"));
         extractor.extract();
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java b/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java
index b21807e5f..68b91af46 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/dba/ConcurrentPkGeneratorIT.java
@@ -23,6 +23,7 @@ import org.apache.cayenne.ObjectContext;
 import org.apache.cayenne.configuration.server.ServerRuntime;
 import org.apache.cayenne.di.Inject;
 import org.apache.cayenne.map.DataMap;
+import org.apache.cayenne.map.EntityResolver;
 import org.apache.cayenne.map.ObjEntity;
 import org.apache.cayenne.query.ObjectSelect;
 import org.apache.cayenne.testdo.qualified.Qualified1;
@@ -96,8 +97,9 @@ public class ConcurrentPkGeneratorIT extends ServerCase {
 		Runnable task = () -> {
             try {
                 ObjectContext context1 = runtime.newContext();
-                for (ObjEntity entity : dataMap.getObjEntities()) {
-                    context1.newObject(entity.getJavaClass());
+				EntityResolver entityResolver = context1.getEntityResolver();
+				for (ObjEntity entity : dataMap.getObjEntities()) {
+                    context1.newObject(entityResolver.getObjectFactory().getJavaClass(entity.getJavaClassName()));
                 }
                 context1.commitChanges();
             } catch (Exception e) {