From 6cab3d753efe7f841ce223335a0d5a58622b1fce Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 16 Nov 2021 13:52:15 +0100 Subject: [PATCH 1/3] #2359-spring-jcl prepare branch --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 906fa1e409..2c21cd8afd 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-jpa - 2.7.0-SNAPSHOT + 2.7.0-2359-spring-jcl-SNAPSHOT Spring Data JPA Spring Data module for JPA repositories. From 8db770db5feab9779c84d51f89bb599f2b57056e Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 16 Nov 2021 14:00:16 +0100 Subject: [PATCH 2/3] Migrate from Slf4J to JCL. Closes #2359 --- .../repository/cdi/JpaRepositoryExtension.java | 10 +++++----- .../JpaMetamodelMappingContextFactoryBean.java | 6 +++--- .../query/JpaQueryLookupStrategy.java | 6 +++--- .../data/jpa/repository/query/NamedQuery.java | 18 +++++++++--------- .../repository/query/QueryParameterSetter.java | 8 ++++---- .../support/JpaRepositoryFactory.java | 8 ++++---- ...thScanningPersistenceUnitPostProcessor.java | 10 +++++----- .../support/MergingPersistenceUnitManager.java | 12 ++++++------ .../cdi/CdiExtensionIntegrationTests.java | 6 +++--- .../repository/sample/UserRepositoryImpl.java | 6 +++--- 10 files changed, 45 insertions(+), 45 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java index d6d866cab5..3bee552c17 100644 --- a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java +++ b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java @@ -32,8 +32,8 @@ import javax.enterprise.inject.spi.ProcessBean; import javax.persistence.EntityManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.data.repository.cdi.CdiRepositoryBean; import org.springframework.data.repository.cdi.CdiRepositoryExtensionSupport; @@ -47,7 +47,7 @@ */ public class JpaRepositoryExtension extends CdiRepositoryExtensionSupport { - private static final Logger LOGGER = LoggerFactory.getLogger(JpaRepositoryExtension.class); + private static final Log LOGGER = LogFactory.getLog(JpaRepositoryExtension.class); private final Map, Bean> entityManagers = new HashMap, Bean>(); @@ -70,7 +70,7 @@ void processBean(@Observes ProcessBean processBean) { if (type instanceof Class && EntityManager.class.isAssignableFrom((Class) type)) { Set qualifiers = new HashSet(bean.getQualifiers()); if (bean.isAlternative() || !entityManagers.containsKey(qualifiers)) { - LOGGER.debug("Discovered '{}' with qualifiers {}.", EntityManager.class.getName(), qualifiers); + LOGGER.debug(String.format("Discovered '%s' with qualifiers %s.", EntityManager.class.getName(), qualifiers)); entityManagers.put(qualifiers, (Bean) bean); } } @@ -94,7 +94,7 @@ void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBeanDiscovery, BeanMan // Create the bean representing the repository. CdiRepositoryBean repositoryBean = createRepositoryBean(repositoryType, qualifiers, beanManager); - LOGGER.info("Registering bean for '{}' with qualifiers {}.", repositoryType.getName(), qualifiers); + LOGGER.info(String.format("Registering bean for '%s' with qualifiers %s.", repositoryType.getName(), qualifiers)); // Register the bean to the extension and the container. registerBean(repositoryBean); diff --git a/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java b/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java index ce3cdd6f34..ca000690d4 100644 --- a/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java +++ b/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java @@ -21,8 +21,8 @@ import javax.persistence.EntityManagerFactory; import javax.persistence.metamodel.Metamodel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactoryUtils; import org.springframework.beans.factory.FactoryBean; @@ -44,7 +44,7 @@ public class JpaMetamodelMappingContextFactoryBean extends AbstractFactoryBean implements ApplicationContextAware { - private static final Logger LOG = LoggerFactory.getLogger(JpaMetamodelMappingContextFactoryBean.class); + private static final Log LOG = LogFactory.getLog(JpaMetamodelMappingContextFactoryBean.class); private @Nullable ListableBeanFactory beanFactory; diff --git a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategy.java b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategy.java index 9c3db738a8..2c3ac135e6 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategy.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/JpaQueryLookupStrategy.java @@ -19,8 +19,8 @@ import javax.persistence.EntityManager; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.data.jpa.repository.Query; import org.springframework.data.projection.ProjectionFactory; @@ -44,7 +44,7 @@ */ public final class JpaQueryLookupStrategy { - private static final Logger LOG = LoggerFactory.getLogger(JpaQueryLookupStrategy.class); + private static final Log LOG = LogFactory.getLog(JpaQueryLookupStrategy.class); /** * Private constructor to prevent instantiation. diff --git a/src/main/java/org/springframework/data/jpa/repository/query/NamedQuery.java b/src/main/java/org/springframework/data/jpa/repository/query/NamedQuery.java index b6d473a116..8927619ecb 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/NamedQuery.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/NamedQuery.java @@ -20,9 +20,8 @@ import javax.persistence.Tuple; import javax.persistence.TypedQuery; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.data.jpa.provider.QueryExtractor; import org.springframework.data.repository.query.Parameters; import org.springframework.data.repository.query.QueryCreationException; @@ -45,7 +44,7 @@ final class NamedQuery extends AbstractJpaQuery { + "have a JpaDialect configured at your EntityManagerFactoryBean as this affects " + "discovering the concrete persistence provider."; - private static final Logger LOG = LoggerFactory.getLogger(NamedQuery.class); + private static final Log LOG = LogFactory.getLog(NamedQuery.class); private final String queryName; private final String countQueryName; @@ -89,8 +88,9 @@ private NamedQuery(JpaQueryMethod method, EntityManager em) { } if (parameters.hasPageableParameter()) { - LOG.warn("Finder method {} is backed by a NamedQuery" + " but contains a Pageable parameter! Sorting delivered " - + "via this Pageable will not be applied!", method); + LOG.warn(String.format( + "Finder method %s is backed by a NamedQuery but contains a Pageable parameter! Sorting delivered via this Pageable will not be applied!", + method)); } this.metadataCache = new QueryParameterSetter.QueryMetadataCache(); @@ -115,7 +115,7 @@ static boolean hasNamedQuery(EntityManager em, String queryName) { lookupEm.createNamedQuery(queryName); return true; } catch (IllegalArgumentException e) { - LOG.debug("Did not find named query {}", queryName); + LOG.debug(String.format("Did not find named query %s", queryName)); return false; } finally { lookupEm.close(); @@ -134,7 +134,7 @@ public static RepositoryQuery lookupFrom(JpaQueryMethod method, EntityManager em final String queryName = method.getNamedQueryName(); - LOG.debug("Looking up named query {}", queryName); + LOG.debug(String.format("Looking up named query %s", queryName)); if (!hasNamedQuery(em, queryName)) { return null; @@ -142,7 +142,7 @@ public static RepositoryQuery lookupFrom(JpaQueryMethod method, EntityManager em try { RepositoryQuery query = new NamedQuery(method, em); - LOG.debug("Found named query {}!", queryName); + LOG.debug(String.format("Found named query %s!", queryName)); return query; } catch (IllegalArgumentException e) { return null; diff --git a/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java b/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java index c645b6ce81..6e84647108 100644 --- a/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java +++ b/src/main/java/org/springframework/data/jpa/repository/query/QueryParameterSetter.java @@ -30,8 +30,8 @@ import javax.persistence.TemporalType; import javax.persistence.criteria.ParameterExpression; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -155,7 +155,7 @@ public void execute(Runnable block) { } }; - private static final Logger LOG = LoggerFactory.getLogger(ErrorHandling.class); + private static final Log LOG = LogFactory.getLog(ErrorHandling.class); abstract void execute(Runnable block); } @@ -280,7 +280,7 @@ private static Class unwrapClass(Query query) { } catch (RuntimeException e) { - LoggerFactory.getLogger(QueryMetadata.class).warn("Failed to unwrap actual class for Query proxy.", e); + LogFactory.getLog(QueryMetadata.class).warn("Failed to unwrap actual class for Query proxy.", e); return queryType; } diff --git a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java index d4773baab2..3cd9ec88df 100644 --- a/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java +++ b/src/main/java/org/springframework/data/jpa/repository/support/JpaRepositoryFactory.java @@ -25,7 +25,8 @@ import javax.persistence.EntityManager; import javax.persistence.Tuple; -import org.slf4j.Logger; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanFactory; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.jpa.projection.CollectionAwareProjectionFactory; @@ -304,8 +305,7 @@ private static class EclipseLinkProjectionQueryCreationListener implements Query private static final String ECLIPSELINK_PROJECTIONS = "Usage of Spring Data projections detected on persistence provider EclipseLink. Make sure the following query methods declare result columns in exactly the order the accessors are declared in the projecting interface or the order of parameters for DTOs:"; - private static final Logger log = org.slf4j.LoggerFactory - .getLogger(EclipseLinkProjectionQueryCreationListener.class); + private static final Log log = LogFactory.getLog(EclipseLinkProjectionQueryCreationListener.class); private final JpaMetamodel metamodel; @@ -340,7 +340,7 @@ public void onCreation(AbstractJpaQuery query) { this.warningLogged = true; } - log.info(" - {}", queryMethod); + log.info(String.format(" - %s", queryMethod)); } } } diff --git a/src/main/java/org/springframework/data/jpa/support/ClasspathScanningPersistenceUnitPostProcessor.java b/src/main/java/org/springframework/data/jpa/support/ClasspathScanningPersistenceUnitPostProcessor.java index 44929f4f12..8d471f692d 100644 --- a/src/main/java/org/springframework/data/jpa/support/ClasspathScanningPersistenceUnitPostProcessor.java +++ b/src/main/java/org/springframework/data/jpa/support/ClasspathScanningPersistenceUnitPostProcessor.java @@ -24,8 +24,8 @@ import javax.persistence.Entity; import javax.persistence.MappedSuperclass; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.context.EnvironmentAware; import org.springframework.context.ResourceLoaderAware; @@ -58,7 +58,7 @@ public class ClasspathScanningPersistenceUnitPostProcessor implements PersistenceUnitPostProcessor, ResourceLoaderAware, EnvironmentAware { - private static final Logger LOG = LoggerFactory.getLogger(ClasspathScanningPersistenceUnitPostProcessor.class); + private static final Log LOG = LogFactory.getLog(ClasspathScanningPersistenceUnitPostProcessor.class); private final String basePackage; @@ -133,7 +133,7 @@ public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) { for (BeanDefinition definition : provider.findCandidateComponents(basePackage)) { - LOG.debug("Registering classpath-scanned entity {} in persistence unit info!", definition.getBeanClassName()); + LOG.debug(String.format("Registering classpath-scanned entity %s in persistence unit info!", definition.getBeanClassName())); if (definition.getBeanClassName() != null) { pui.addManagedClassName(definition.getBeanClassName()); @@ -142,7 +142,7 @@ public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui) { for (String location : scanForMappingFileLocations()) { - LOG.debug("Registering classpath-scanned entity mapping file {} in persistence unit info!", location); + LOG.debug(String.format("Registering classpath-scanned entity mapping file %s in persistence unit info!", location)); pui.addMappingFileName(location); } diff --git a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java index 93c3d242e8..b8bf05bb15 100644 --- a/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java +++ b/src/main/java/org/springframework/data/jpa/support/MergingPersistenceUnitManager.java @@ -20,8 +20,8 @@ import javax.persistence.spi.PersistenceUnitInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; import org.springframework.orm.jpa.persistenceunit.MutablePersistenceUnitInfo; @@ -34,7 +34,7 @@ */ public class MergingPersistenceUnitManager extends DefaultPersistenceUnitManager { - private static final Logger LOG = LoggerFactory.getLogger(MergingPersistenceUnitManager.class); + private static final Log LOG = LogFactory.getLog(MergingPersistenceUnitManager.class); /* * (non-Javadoc) @@ -68,21 +68,21 @@ void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo pui, PersistenceU for (URL url : oldPui.getJarFileUrls()) { if (!pui.getJarFileUrls().contains(url)) { - LOG.debug("Adding JAR file URL {} to persistence unit {}.", url, persistenceUnitName); + LOG.debug(String.format("Adding JAR file URL %s to persistence unit %s.", url, persistenceUnitName)); pui.addJarFileUrl(url); } } for (String className : oldPui.getManagedClassNames()) { if (!pui.getManagedClassNames().contains(className)) { - LOG.debug("Adding class {} to PersistenceUnit {}", className, persistenceUnitName); + LOG.debug(String.format("Adding class %s to PersistenceUnit %s", className, persistenceUnitName)); pui.addManagedClassName(className); } } for (String mappingFileName : oldPui.getMappingFileNames()) { if (!pui.getMappingFileNames().contains(mappingFileName)) { - LOG.debug("Adding mapping file to persistence unit {}.", mappingFileName, persistenceUnitName); + LOG.debug(String.format("Adding mapping file to persistence unit %s.", mappingFileName, persistenceUnitName)); pui.addMappingFileName(mappingFileName); } } diff --git a/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java b/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java index ecf7242afc..5502778df7 100644 --- a/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/cdi/CdiExtensionIntegrationTests.java @@ -26,8 +26,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; /** * Integration tests for Spring Data JPA CDI extension. @@ -40,7 +40,7 @@ class CdiExtensionIntegrationTests { private static SeContainer container; - private static Logger LOGGER = LoggerFactory.getLogger(CdiExtensionIntegrationTests.class); + private static Log LOGGER = LogFactory.getLog(CdiExtensionIntegrationTests.class); @BeforeAll static void setUp() { diff --git a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepositoryImpl.java b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepositoryImpl.java index 0c530d2a2a..648bb7da8d 100644 --- a/src/test/java/org/springframework/data/jpa/repository/sample/UserRepositoryImpl.java +++ b/src/test/java/org/springframework/data/jpa/repository/sample/UserRepositoryImpl.java @@ -15,8 +15,8 @@ */ package org.springframework.data.jpa.repository.sample; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.jpa.domain.sample.User; import org.springframework.data.jpa.repository.JpaContext; @@ -29,7 +29,7 @@ */ public class UserRepositoryImpl implements UserRepositoryCustom { - private static final Logger LOG = LoggerFactory.getLogger(UserRepositoryImpl.class); + private static final Log LOG = LogFactory.getLog(UserRepositoryImpl.class); @Autowired public UserRepositoryImpl(JpaContext context) { From 5e6c7915bf01f48606277564a7df5a1c4fdfe5e4 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Wed, 17 Nov 2021 13:50:56 +0100 Subject: [PATCH 3/3] Polishing. See #2359 --- .../data/jpa/repository/cdi/JpaRepositoryExtension.java | 7 ++++--- .../config/JpaMetamodelMappingContextFactoryBean.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java index 3bee552c17..b6d5a5d5c8 100644 --- a/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java +++ b/src/main/java/org/springframework/data/jpa/repository/cdi/JpaRepositoryExtension.java @@ -49,7 +49,7 @@ public class JpaRepositoryExtension extends CdiRepositoryExtensionSupport { private static final Log LOGGER = LogFactory.getLog(JpaRepositoryExtension.class); - private final Map, Bean> entityManagers = new HashMap, Bean>(); + private final Map, Bean> entityManagers = new HashMap<>(); public JpaRepositoryExtension() { LOGGER.info("Activating CDI extension for Spring Data JPA repositories."); @@ -64,11 +64,12 @@ public JpaRepositoryExtension() { */ @SuppressWarnings("unchecked") void processBean(@Observes ProcessBean processBean) { + Bean bean = processBean.getBean(); for (Type type : bean.getTypes()) { // Check if the bean is an EntityManager. if (type instanceof Class && EntityManager.class.isAssignableFrom((Class) type)) { - Set qualifiers = new HashSet(bean.getQualifiers()); + Set qualifiers = new HashSet<>(bean.getQualifiers()); if (bean.isAlternative() || !entityManagers.containsKey(qualifiers)) { LOGGER.debug(String.format("Discovered '%s' with qualifiers %s.", EntityManager.class.getName(), qualifiers)); entityManagers.put(qualifiers, (Bean) bean); @@ -122,7 +123,7 @@ private CdiRepositoryBean createRepositoryBean(Class repositoryType, S } // Construct and return the repository bean. - return new JpaRepositoryBean(beanManager, entityManagerBean, qualifiers, repositoryType, + return new JpaRepositoryBean<>(beanManager, entityManagerBean, qualifiers, repositoryType, Optional.of(getCustomImplementationDetector())); } } diff --git a/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java b/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java index ca000690d4..d7f69b8612 100644 --- a/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java +++ b/src/main/java/org/springframework/data/jpa/repository/config/JpaMetamodelMappingContextFactoryBean.java @@ -71,7 +71,7 @@ public Class getObjectType() { * @see org.springframework.beans.factory.config.AbstractFactoryBean#createInstance() */ @Override - protected JpaMetamodelMappingContext createInstance() throws Exception { + protected JpaMetamodelMappingContext createInstance() { if (LOG.isDebugEnabled()) { LOG.debug("Initializing JpaMetamodelMappingContext…");