From f6916189673fa4a73e7ac649e575f058a0c2ba06 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 1 Nov 2014 13:00:54 +0100 Subject: [PATCH] Polishing --- .../NoSuchBeanDefinitionException.java | 12 +++-- .../support/DefaultListableBeanFactory.java | 6 +-- .../DelegatingConnectionFactory.java | 4 +- .../connection/SingleConnectionFactory.java | 11 +++-- .../DestinationPatternsMessageCondition.java | 27 ++++++----- .../LocalSessionFactoryBuilder.java | 2 +- .../SpringFlushSynchronization.java | 4 +- .../SpringSessionSynchronization.java | 2 +- .../HibernateTransactionManagerTests.java | 2 +- .../jpa/AbstractEntityManagerFactoryBean.java | 16 +++---- .../orm/jpa/EntityManagerFactoryAccessor.java | 6 +-- .../orm/jpa/EntityManagerFactoryUtils.java | 29 +++++------- .../orm/jpa/ExtendedEntityManagerCreator.java | 2 + .../springframework/orm/jpa/JpaDialect.java | 27 +++++------ ...ocalContainerEntityManagerFactoryBean.java | 4 +- .../jpa/LocalEntityManagerFactoryBean.java | 4 +- .../orm/jpa/SharedEntityManagerCreator.java | 2 + .../jpa/support/SharedEntityManagerBean.java | 4 +- .../HibernateTransactionManagerTests.java | 2 +- ...rEntityManagerFactoryIntegrationTests.java | 5 +- ...tEntityManagerFactoryIntegrationTests.java | 6 ++- ...nManagedEntityManagerIntegrationTests.java | 14 ++---- ...rManagedEntityManagerIntegrationTests.java | 16 +++---- .../orm/jpa/JpaTransactionManagerTests.java | 22 ++++----- .../jpa/SharedEntityManagerCreatorTests.java | 3 +- .../org/springframework/orm/jpa/inject.xml | 16 +++---- .../PersistenceInjectionIntegrationTests.java | 5 -- .../support/PersistenceInjectionTests.java | 47 ++++++++++--------- ...sactionalDataSourceSpringContextTests.java | 11 ++--- .../web/util/Log4jWebConfigurer.java | 3 +- 30 files changed, 151 insertions(+), 163 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/NoSuchBeanDefinitionException.java b/spring-beans/src/main/java/org/springframework/beans/factory/NoSuchBeanDefinitionException.java index 5bd8ea7a9f1..106fa0cafc9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/NoSuchBeanDefinitionException.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/NoSuchBeanDefinitionException.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,21 +20,23 @@ import org.springframework.beans.BeansException; import org.springframework.util.StringUtils; /** - * Exception thrown when a {@code BeanFactory} is asked for a bean instance - * for which it cannot find a definition. + * Exception thrown when a {@code BeanFactory} is asked for a bean instance for which it + * cannot find a definition. This may point to a non-existing bean, a non-unique bean, + * or a manually registered singleton instance without an associated bean definition. * * @author Rod Johnson * @author Juergen Hoeller * @see BeanFactory#getBean(String) * @see BeanFactory#getBean(Class) + * @see NoUniqueBeanDefinitionException */ @SuppressWarnings("serial") public class NoSuchBeanDefinitionException extends BeansException { - /** Name of the missing bean. */ + /** Name of the missing bean */ private String beanName; - /** Required type of the missing bean. */ + /** Required type of the missing bean */ private Class beanType; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index 139e12e1a00..9e422fccc9d 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -140,14 +140,14 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto /** Map of bean definition objects, keyed by bean name */ private final Map beanDefinitionMap = new ConcurrentHashMap(64); - /** Map of singleton and non-singleton bean names keyed by dependency type */ + /** Map of singleton and non-singleton bean names, keyed by dependency type */ private final Map, String[]> allBeanNamesByType = new ConcurrentHashMap, String[]>(64); - /** Map of singleton-only bean names keyed by dependency type */ + /** Map of singleton-only bean names, keyed by dependency type */ private final Map, String[]> singletonBeanNamesByType = new ConcurrentHashMap, String[]>(64); /** List of bean definition names, in registration order */ - private final List beanDefinitionNames = new ArrayList(); + private final List beanDefinitionNames = new ArrayList(64); /** Whether bean definition metadata may be cached for all beans */ private boolean configurationFrozen = false; diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java index 85a1a589deb..0b81da699f0 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/DelegatingConnectionFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,7 +76,7 @@ public class DelegatingConnectionFactory /** * Indicate whether Connections obtained from the target factory are supposed * to be stopped before closed ("true") or simply closed ("false"). - * The latter may be necessary for some connection pools that simply return + * An extra stop call may be necessary for some connection pools that simply return * released connections to the pool, not stopping them while they sit in the pool. *

Default is "false", simply closing Connections. * @see ConnectionFactoryUtils#releaseConnection diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java index 5d37c668c0c..59f84dea2ed 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/SingleConnectionFactory.java @@ -73,9 +73,8 @@ import org.springframework.util.Assert; * @see org.springframework.jms.listener.SimpleMessageListenerContainer * @see org.springframework.jms.listener.DefaultMessageListenerContainer#setCacheLevel */ -public class SingleConnectionFactory - implements ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory, ExceptionListener, - InitializingBean, DisposableBean { +public class SingleConnectionFactory implements ConnectionFactory, QueueConnectionFactory, + TopicConnectionFactory, ExceptionListener, InitializingBean, DisposableBean { protected final Log logger = LogFactory.getLog(getClass()); @@ -171,7 +170,7 @@ public class SingleConnectionFactory /** * Specify an JMS ExceptionListener implementation that should be - * registered with with the single Connection created by this factory. + * registered with the single Connection created by this factory. * @see #setReconnectOnException */ public void setExceptionListener(ExceptionListener exceptionListener) { @@ -180,7 +179,7 @@ public class SingleConnectionFactory /** * Return the JMS ExceptionListener implementation that should be registered - * with with the single Connection created by this factory, if any. + * with the single Connection created by this factory, if any. */ protected ExceptionListener getExceptionListener() { return this.exceptionListener; @@ -315,6 +314,7 @@ public class SingleConnectionFactory * The provider of this ConnectionFactory needs to care for proper shutdown. *

As this bean implements DisposableBean, a bean factory will * automatically invoke this on destruction of its cached singletons. + * @see #resetConnection() */ @Override public void destroy() { @@ -323,6 +323,7 @@ public class SingleConnectionFactory /** * Reset the underlying shared Connection, to be reinitialized on next access. + * @see #closeConnection */ public void resetConnection() { synchronized (this.connectionMonitor) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/DestinationPatternsMessageCondition.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/DestinationPatternsMessageCondition.java index 12ff720e41f..48cac836d58 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/DestinationPatternsMessageCondition.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/DestinationPatternsMessageCondition.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -38,8 +38,7 @@ import org.springframework.util.StringUtils; * @author Rossen Stoyanchev * @since 4.0 */ -public final class DestinationPatternsMessageCondition - extends AbstractMessageCondition { +public class DestinationPatternsMessageCondition extends AbstractMessageCondition { public static final String LOOKUP_DESTINATION_HEADER = "lookupDestination"; @@ -59,22 +58,22 @@ public final class DestinationPatternsMessageCondition } /** - * Additional constructor with flags for using suffix pattern (.*) and - * trailing slash matches. + * Additional constructor with flags for using suffix pattern (.*) and trailing slash matches. * @param patterns the URL patterns to use; if 0, the condition will match to every request. - * @param pathMatcher for path matching with patterns + * @param pathMatcher the PathMatcher to use */ - public DestinationPatternsMessageCondition(String[] patterns,PathMatcher pathMatcher) { + public DestinationPatternsMessageCondition(String[] patterns, PathMatcher pathMatcher) { this(asList(patterns), pathMatcher); } private DestinationPatternsMessageCondition(Collection patterns, PathMatcher pathMatcher) { this.patterns = Collections.unmodifiableSet(prependLeadingSlash(patterns)); - this.pathMatcher = (pathMatcher != null) ? pathMatcher : new AntPathMatcher(); + this.pathMatcher = (pathMatcher != null ? pathMatcher : new AntPathMatcher()); } + private static List asList(String... patterns) { - return patterns != null ? Arrays.asList(patterns) : Collections.emptyList(); + return (patterns != null ? Arrays.asList(patterns) : Collections.emptyList()); } private static Set prependLeadingSlash(Collection patterns) { @@ -91,6 +90,7 @@ public final class DestinationPatternsMessageCondition return result; } + public Set getPatterns() { return this.patterns; } @@ -105,14 +105,15 @@ public final class DestinationPatternsMessageCondition return " || "; } + /** * Returns a new instance with URL patterns from the current instance ("this") and * the "other" instance as follows: *

    - *
  • If there are patterns in both instances, combine the patterns in "this" with - * the patterns in "other" using {@link org.springframework.util.PathMatcher#combine(String, String)}. - *
  • If only one instance has patterns, use them. - *
  • If neither instance has patterns, use an empty String (i.e. ""). + *
  • If there are patterns in both instances, combine the patterns in "this" with + * the patterns in "other" using {@link org.springframework.util.PathMatcher#combine(String, String)}. + *
  • If only one instance has patterns, use them. + *
  • If neither instance has patterns, use an empty String (i.e. ""). *
*/ @Override diff --git a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java index 659afaf09b9..64718b2bf12 100644 --- a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java +++ b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/LocalSessionFactoryBuilder.java @@ -241,7 +241,7 @@ public class LocalSessionFactoryBuilder extends Configuration { * @see #scanPackages */ public LocalSessionFactoryBuilder addPackages(String... annotatedPackages) { - for (String annotatedPackage :annotatedPackages) { + for (String annotatedPackage : annotatedPackages) { addPackage(annotatedPackage); } return this; diff --git a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringFlushSynchronization.java b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringFlushSynchronization.java index 11aa50b6e26..07d8d6981e1 100644 --- a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringFlushSynchronization.java +++ b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringFlushSynchronization.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -28,7 +28,7 @@ import org.springframework.transaction.support.TransactionSynchronizationAdapter * @author Juergen Hoeller * @since 3.1 */ -class SpringFlushSynchronization extends TransactionSynchronizationAdapter { +public class SpringFlushSynchronization extends TransactionSynchronizationAdapter { private final Session session; diff --git a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringSessionSynchronization.java b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringSessionSynchronization.java index e738e2762ae..7fed04113d5 100644 --- a/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringSessionSynchronization.java +++ b/spring-orm-hibernate4/src/main/java/org/springframework/orm/hibernate4/SpringSessionSynchronization.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/spring-orm-hibernate4/src/test/java/org/springframework/orm/hibernate4/HibernateTransactionManagerTests.java b/spring-orm-hibernate4/src/test/java/org/springframework/orm/hibernate4/HibernateTransactionManagerTests.java index 1a85dc8f51a..1ae134b762c 100644 --- a/spring-orm-hibernate4/src/test/java/org/springframework/orm/hibernate4/HibernateTransactionManagerTests.java +++ b/spring-orm-hibernate4/src/test/java/org/springframework/orm/hibernate4/HibernateTransactionManagerTests.java @@ -70,7 +70,7 @@ import static org.mockito.BDDMockito.*; * @author Juergen Hoeller * @since 3.2 */ -@SuppressWarnings({ "rawtypes", "unchecked" }) +@SuppressWarnings({"rawtypes", "unchecked"}) public class HibernateTransactionManagerTests { @After diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java index 0d784527e50..872ba91f37b 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -55,15 +55,15 @@ import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; /** - * Abstract {@link org.springframework.beans.factory.FactoryBean} that - * creates a local JPA {@link javax.persistence.EntityManagerFactory} - * instance within a Spring application context. + * Abstract {@link org.springframework.beans.factory.FactoryBean} that creates + * a local JPA {@link javax.persistence.EntityManagerFactory} instance within + * a Spring application context. * - *

Encapsulates the common functionality between the different JPA - * bootstrap contracts (standalone as well as container). + *

Encapsulates the common functionality between the different JPA bootstrap + * contracts (standalone as well as container). * - *

Implements support for standard JPA configuration as well as - * Spring's {@link JpaVendorAdapter} abstraction, and controls the + *

Implements support for standard JPA configuration conventions as well as + * Spring's customizable {@link JpaVendorAdapter} mechanism, and controls the * EntityManagerFactory's lifecycle. * *

This class also implements the diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java index dba34467c9e..7e0eb82a05b 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryAccessor.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,8 +33,8 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; /** - * Base class for any class that needs to access an EntityManagerFactory, - * usually in order to obtain an EntityManager. Defines common properties. + * Base class for any class that needs to access a JPA {@link EntityManagerFactory}, + * usually in order to obtain a JPA {@link EntityManager}. Defines common properties. * * @author Juergen Hoeller * @since 2.0 diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java index 341e5be8041..d123e60392c 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerFactoryUtils.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -80,6 +80,7 @@ public abstract class EntityManagerFactoryUtils { private static final Log logger = LogFactory.getLog(EntityManagerFactoryUtils.class); + private static Method createEntityManagerWithSynchronizationTypeMethod; private static Object synchronizationTypeUnsynchronized; @@ -144,9 +145,8 @@ public abstract class EntityManagerFactoryUtils { } /** - * Obtain a JPA EntityManager from the given factory. Is aware of a - * corresponding EntityManager bound to the current thread, - * for example when using JpaTransactionManager. + * Obtain a JPA EntityManager from the given factory. Is aware of a corresponding + * EntityManager bound to the current thread, e.g. when using JpaTransactionManager. *

Note: Will return {@code null} if no thread-bound EntityManager found! * @param emf EntityManagerFactory to create the EntityManager with * @return the EntityManager, or {@code null} if none found @@ -160,9 +160,8 @@ public abstract class EntityManagerFactoryUtils { } /** - * Obtain a JPA EntityManager from the given factory. Is aware of a - * corresponding EntityManager bound to the current thread, - * for example when using JpaTransactionManager. + * Obtain a JPA EntityManager from the given factory. Is aware of a corresponding + * EntityManager bound to the current thread, e.g. when using JpaTransactionManager. *

Note: Will return {@code null} if no thread-bound EntityManager found! * @param emf EntityManagerFactory to create the EntityManager with * @param properties the properties to be passed into the {@code createEntityManager} @@ -182,9 +181,8 @@ public abstract class EntityManagerFactoryUtils { } /** - * Obtain a JPA EntityManager from the given factory. Is aware of a - * corresponding EntityManager bound to the current thread, - * for example when using JpaTransactionManager. + * Obtain a JPA EntityManager from the given factory. Is aware of a corresponding + * EntityManager bound to the current thread, e.g. when using JpaTransactionManager. *

Same as {@code getEntityManager}, but throwing the original PersistenceException. * @param emf EntityManagerFactory to create the EntityManager with * @param properties the properties to be passed into the {@code createEntityManager} @@ -201,9 +199,8 @@ public abstract class EntityManagerFactoryUtils { } /** - * Obtain a JPA EntityManager from the given factory. Is aware of a - * corresponding EntityManager bound to the current thread, - * for example when using JpaTransactionManager. + * Obtain a JPA EntityManager from the given factory. Is aware of a corresponding + * EntityManager bound to the current thread, e.g. when using JpaTransactionManager. *

Same as {@code getEntityManager}, but throwing the original PersistenceException. * @param emf EntityManagerFactory to create the EntityManager with * @param properties the properties to be passed into the {@code createEntityManager} @@ -285,8 +282,8 @@ public abstract class EntityManagerFactoryUtils { em = (!CollectionUtils.isEmpty(properties) ? emf.createEntityManager(properties) : emf.createEntityManager()); } - // Use same EntityManager for further JPA actions within the transaction. - // Thread object will get removed by synchronization at transaction completion. + // Use same EntityManager for further JPA operations within the transaction. + // Thread-bound object will get removed by synchronization at transaction completion. logger.debug("Registering transaction synchronization for JPA EntityManager"); emHolder = new EntityManagerHolder(em); if (synchronizedWithTransaction) { @@ -296,7 +293,7 @@ public abstract class EntityManagerFactoryUtils { emHolder.setSynchronizedWithTransaction(true); } else { - // unsynchronized - just scope it for the transaction, as demanded by the JPA 2.1 spec + // Unsynchronized - just scope it for the transaction, as demanded by the JPA 2.1 spec... TransactionSynchronizationManager.registerSynchronization( new TransactionScopedEntityManagerSynchronization(emHolder, emf)); } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java index e70845a20b5..1faa7235087 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java @@ -95,6 +95,7 @@ public abstract class ExtendedEntityManagerCreator { * transactions (according to the JPA 2.1 SynchronizationType rules) * @return an application-managed EntityManager that can join transactions * but does not participate in them automatically + * @since 4.0 */ public static EntityManager createApplicationManagedEntityManager( EntityManager rawEntityManager, EntityManagerFactoryInfo emfInfo, boolean synchronizedWithTransaction) { @@ -156,6 +157,7 @@ public abstract class ExtendedEntityManagerCreator { * @return a container-managed EntityManager that expects container-driven lifecycle * management but may opt out of automatic transaction synchronization * @see javax.persistence.EntityManagerFactory#createEntityManager(java.util.Map) + * @since 4.0 */ public static EntityManager createContainerManagedEntityManager( EntityManagerFactory emf, Map properties, boolean synchronizedWithTransaction) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java index 11529655b61..51382cfd739 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaDialect.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,19 +26,15 @@ import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; /** - * SPI strategy that encapsulates certain functionality that standard JPA 2.0 - * does not offer, such as access to the underlying JDBC Connection. This - * strategy is mainly intended for standalone usage of a JPA provider; most - * of its functionality is not relevant when running with JTA transactions. + * SPI strategy that encapsulates certain functionality that standard JPA 2.0 does + * not offer, such as access to the underlying JDBC Connection. This strategy is + * mainly intended for standalone usage of a JPA provider; most of its functionality + * is not relevant when running with JTA transactions. * - *

Also allows for the provision of value-added methods for portable yet - * more capable EntityManager and EntityManagerFactory subinterfaces offered - * by Spring. - * - *

In general, it is recommended to derive from DefaultJpaDialect instead of - * implementing this interface directly. This allows for inheriting common - * behavior (present and future) from DefaultJpaDialect, only overriding - * specific hooks to plug in concrete vendor-specific behavior. + *

In general, it is recommended to derive from {@link DefaultJpaDialect} instead + * of implementing this interface directly. This allows for inheriting common behavior + * (present and future) from DefaultJpaDialect, only overriding specific hooks to + * plug in concrete vendor-specific behavior. * * @author Juergen Hoeller * @author Rod Johnson @@ -141,9 +137,8 @@ public interface JpaDialect extends PersistenceExceptionTranslator { * an implementation should use a special handle that references that other object. * @param entityManager the current JPA EntityManager * @param readOnly whether the Connection is only needed for read-only purposes - * @return a handle for the JDBC Connection, to be passed into - * {@code releaseJdbcConnection}, or {@code null} - * if no JDBC Connection can be retrieved + * @return a handle for the Connection, to be passed into {@code releaseJdbcConnection}, + * or {@code null} if no JDBC Connection can be retrieved * @throws javax.persistence.PersistenceException if thrown by JPA methods * @throws java.sql.SQLException if thrown by JDBC methods * @see #releaseJdbcConnection diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java index f08be25ac70..6741671c5c6 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java @@ -68,7 +68,9 @@ import org.springframework.util.ClassUtils; * metadata as assembled by this FactoryBean. * *

NOTE: Spring's JPA support requires JPA 2.0 or higher, as of Spring 4.0. - * Spring's persistence unit bootstrapping automatically detects JPA 2.1 at runtime. + * JPA 1.0 based applications are still supported; however, a JPA 2.0/2.1 compliant + * persistence provider is needed at runtime. Spring's persistence unit bootstrapping + * automatically detects JPA 2.0 vs 2.1 through checking the JPA API on the classpath. * * @author Juergen Hoeller * @author Rod Johnson diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java index 9df7e08ef97..ab6d60db1e9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalEntityManagerFactoryBean.java @@ -41,7 +41,7 @@ import javax.persistence.spi.PersistenceProvider; *

This EntityManagerFactory bootstrap is appropriate for standalone applications * which solely use JPA for data access. If you want to set up your persistence * provider for an external DataSource and/or for global transactions which span - * multiple resources, you will need to either deploy it into a full Java EE 5 + * multiple resources, you will need to either deploy it into a full Java EE * application server and access the deployed EntityManagerFactory via JNDI, * or use Spring's {@link LocalContainerEntityManagerFactoryBean} with appropriate * configuration for local setup according to JPA's container contract. @@ -53,6 +53,8 @@ import javax.persistence.spi.PersistenceProvider; * {@link LocalContainerEntityManagerFactoryBean} instead. * *

NOTE: Spring's JPA support requires JPA 2.0 or higher, as of Spring 4.0. + * JPA 1.0 based applications are still supported; however, a JPA 2.0/2.1 compliant + * persistence provider is needed at runtime. * * @author Juergen Hoeller * @author Rod Johnson diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java index 4219f75647f..c720fe9ad79 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java @@ -110,6 +110,7 @@ public abstract class SharedEntityManagerCreator { * @param synchronizedWithTransaction whether to automatically join ongoing * transactions (according to the JPA 2.1 SynchronizationType rules) * @return a shareable transaction EntityManager proxy + * @since 4.0 */ public static EntityManager createSharedEntityManager( EntityManagerFactory emf, Map properties, boolean synchronizedWithTransaction) { @@ -145,6 +146,7 @@ public abstract class SharedEntityManagerCreator { * @param entityManagerInterfaces the interfaces to be implemented by the * EntityManager. Allows the addition or specification of proprietary interfaces. * @return a shareable transactional EntityManager proxy + * @since 4.0 */ public static EntityManager createSharedEntityManager(EntityManagerFactory emf, Map properties, boolean synchronizedWithTransaction, Class... entityManagerInterfaces) { diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java index f392734cd39..c6595279de5 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/SharedEntityManagerBean.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -30,7 +30,7 @@ import org.springframework.util.Assert; * {@link FactoryBean} that exposes a shared JPA {@link javax.persistence.EntityManager} * reference for a given EntityManagerFactory. Typically used for an EntityManagerFactory * created by {@link org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean}, - * as direct alternative to a JNDI lookup for a Java EE 5 server's EntityManager reference. + * as direct alternative to a JNDI lookup for a Java EE server's EntityManager reference. * *

The shared EntityManager will behave just like an EntityManager fetched from an * application server's JNDI environment, as defined by the JPA specification. diff --git a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java index 695d6901640..3f2a4d34cfb 100644 --- a/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/hibernate3/HibernateTransactionManagerTests.java @@ -68,7 +68,7 @@ import static org.mockito.BDDMockito.*; * @author Phillip Webb * @since 05.03.2005 */ -@SuppressWarnings({ "rawtypes", "unchecked", "deprecation" }) +@SuppressWarnings({"rawtypes", "unchecked", "deprecation"}) public class HibernateTransactionManagerTests { @After diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java index 2718bcc4e49..d7526d46ef6 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractContainerEntityManagerFactoryIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -123,8 +123,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests newTony.getDriversLicense().getSerialNumber(); } finally { - deleteFromTables(new String[] { "person", "drivers_license" }); - //setComplete(); + deleteFromTables("person", "drivers_license"); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java index 84ac09fd5fe..0a6be7ac9cd 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2012 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -87,9 +87,11 @@ public abstract class AbstractEntityManagerFactoryIntegrationTests extends Abstr protected int countRowsInTable(EntityManager em, String tableName) { Query query = em.createNativeQuery("SELECT COUNT(0) FROM " + tableName); return ((Number) query.getSingleResult()).intValue(); - }; + } + public enum Provider { + ECLIPSELINK, HIBERNATE, OPENJPA } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java index d98197ff67d..6d7fc824b7d 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ApplicationManagedEntityManagerIntegrationTests.java @@ -121,15 +121,13 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt doInstantiateAndSave(em); setComplete(); endTransaction(); // Should rollback - assertEquals("Tx must have committed back", - 1, countRowsInTable(em, "person")); + assertEquals("Tx must have committed back", 1, countRowsInTable(em, "person")); // Now clean up the database startNewTransaction(); em.joinTransaction(); deleteAllPeopleUsingEntityManager(em); - assertEquals("People have been killed", - 0, countRowsInTable(em, "person")); + assertEquals("People have been killed", 0, countRowsInTable(em, "person")); setComplete(); } @@ -142,8 +140,7 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt em.joinTransaction(); doInstantiateAndSave(em); endTransaction(); // Should rollback - assertEquals("Tx must have been rolled back", - 0, countRowsInTable(em, "person")); + assertEquals("Tx must have been rolled back", 0, countRowsInTable(em, "person")); } public void testCommitOccurs() { @@ -153,11 +150,10 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt setComplete(); endTransaction(); // Should rollback - assertEquals("Tx must have committed back", - 1, countRowsInTable(em, "person")); + assertEquals("Tx must have committed back", 1, countRowsInTable(em, "person")); // Now clean up the database - deleteFromTables(new String[] { "person" }); + deleteFromTables("person"); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java index 844f41bdbcb..6bc0482d833 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/ContainerManagedEntityManagerIntegrationTests.java @@ -104,8 +104,7 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit } public void doInstantiateAndSave(EntityManager em) { - assertEquals("Should be no people from previous transactions", - 0, countRowsInTable(em, "person")); + assertEquals("Should be no people from previous transactions", 0, countRowsInTable(em, "person")); Person p = new Person(); p.setFirstName("Tony"); @@ -131,19 +130,17 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit doInstantiateAndSave(em); setComplete(); endTransaction(); // Should rollback - assertEquals("Tx must have committed back", - 1, countRowsInTable(em, "person")); + assertEquals("Tx must have committed back", 1, countRowsInTable(em, "person")); // Now clean up the database - deleteFromTables(new String[] { "person" }); + deleteFromTables("person"); } public void testRollbackOccurs() { EntityManager em = createContainerManagedEntityManager(); doInstantiateAndSave(em); endTransaction(); // Should rollback - assertEquals("Tx must have been rolled back", - 0, countRowsInTable(em, "person")); + assertEquals("Tx must have been rolled back", 0, countRowsInTable(em, "person")); } public void testCommitOccurs() { @@ -151,11 +148,10 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit doInstantiateAndSave(em); setComplete(); endTransaction(); // Should rollback - assertEquals("Tx must have committed back", - 1, countRowsInTable(em, "person")); + assertEquals("Tx must have committed back", 1, countRowsInTable(em, "person")); // Now clean up the database - deleteFromTables(new String[] { "person" }); + deleteFromTables("person"); } } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java index aa9d1269d09..a2eeceb99e2 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/JpaTransactionManagerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2013 the original author or authors. + * Copyright 2002-2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -50,13 +50,13 @@ import static org.mockito.BDDMockito.*; */ public class JpaTransactionManagerTests { + private EntityManagerFactory factory; + private EntityManager manager; private EntityTransaction tx; - private EntityManagerFactory factory; - - private JpaTransactionManager transactionManager; + private JpaTransactionManager tm; private TransactionTemplate tt; @@ -67,8 +67,8 @@ public class JpaTransactionManagerTests { manager = mock(EntityManager.class); tx = mock(EntityTransaction.class); - transactionManager = new JpaTransactionManager(factory); - tt = new TransactionTemplate(transactionManager); + tm = new JpaTransactionManager(factory); + tt = new TransactionTemplate(tm); given(factory.createEntityManager()).willReturn(manager); given(manager.getTransaction()).willReturn(tx); @@ -83,6 +83,7 @@ public class JpaTransactionManagerTests { assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } + @Test public void testTransactionCommit() { given(manager.getTransaction()).willReturn(tx); @@ -456,7 +457,7 @@ public class JpaTransactionManagerTests { @Override public Object doInTransaction(TransactionStatus status) { assertFalse(TransactionSynchronizationManager.hasResource(factory)); - TransactionTemplate tt2 = new TransactionTemplate(transactionManager); + TransactionTemplate tt2 = new TransactionTemplate(tm); tt2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); return tt2.execute(new TransactionCallback() { @Override @@ -497,7 +498,7 @@ public class JpaTransactionManagerTests { EntityManagerFactoryUtils.getTransactionalEntityManager(factory); assertTrue(TransactionSynchronizationManager.hasResource(factory)); - TransactionTemplate tt2 = new TransactionTemplate(transactionManager); + TransactionTemplate tt2 = new TransactionTemplate(tm); tt2.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW); return tt2.execute(new TransactionCallback() { @Override @@ -660,7 +661,6 @@ public class JpaTransactionManagerTests { @Test public void testTransactionRollbackWithPrebound() { - given(manager.getTransaction()).willReturn(tx); given(tx.isActive()).willReturn(true); @@ -694,7 +694,6 @@ public class JpaTransactionManagerTests { @Test public void testTransactionCommitWithPreboundAndPropagationSupports() { - final List l = new ArrayList(); l.add("test"); @@ -730,7 +729,6 @@ public class JpaTransactionManagerTests { @Test public void testTransactionRollbackWithPreboundAndPropagationSupports() { - tt.setPropagationBehavior(TransactionDefinition.PROPAGATION_SUPPORTS); assertTrue(!TransactionSynchronizationManager.hasResource(factory)); @@ -765,7 +763,7 @@ public class JpaTransactionManagerTests { @Test public void testTransactionCommitWithDataSource() throws SQLException { DataSource ds = mock(DataSource.class); - transactionManager.setDataSource(ds); + tm.setDataSource(ds); given(manager.getTransaction()).willReturn(tx); diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java index 8b1de7680b0..27fce9069c0 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/SharedEntityManagerCreatorTests.java @@ -38,8 +38,7 @@ public class SharedEntityManagerCreatorTests { EntityManagerFactory emf = mock(EntityManagerFactory.class, withSettings().extraInterfaces(EntityManagerFactoryInfo.class)); // EntityManagerFactoryInfo.getEntityManagerInterface returns null - assertThat(SharedEntityManagerCreator.createSharedEntityManager(emf), - is(notNullValue())); + assertThat(SharedEntityManagerCreator.createSharedEntityManager(emf), is(notNullValue())); } @Test(expected = TransactionRequiredException.class) diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/inject.xml b/spring-orm/src/test/java/org/springframework/orm/jpa/inject.xml index 09aa0eb7f31..33edf99a8da 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/inject.xml +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/inject.xml @@ -2,7 +2,7 @@ @@ -11,13 +11,13 @@ - - - + + + - - - - + + + + diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionIntegrationTests.java index 5c598e00c99..f946837365c 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionIntegrationTests.java @@ -51,11 +51,6 @@ public class PersistenceInjectionIntegrationTests extends AbstractEntityManagerF assertNotNull("Default PersistenceContext Setter was injected", injectedEm); } - public void testInjectedEntityManagerImplmentsPortableEntityManagerPlus() { - EntityManager injectedEm = defaultSetterInjected.getEntityManager(); - assertNotNull("Default PersistenceContext Setter was injected", injectedEm); - } - public void testSetterInjectionOfNamedPersistenceContext() { assertNotNull("Named PersistenceContext Setter was injected", namedSetterInjected.getEntityManagerFactory()); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java index 04c4ce0ac3f..b907a2d5dfc 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java @@ -330,8 +330,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT assertSame(mockEmf2, bean2.emf); } + @Test @Ignore - public void ignoreTestPersistenceUnitsFromJndi() { + public void testPersistenceUnitsFromJndi() { EntityManager mockEm = mock(EntityManager.class); given(mockEmf.createEntityManager()).willReturn(mockEm); @@ -542,9 +543,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT @Test public void testFieldOfWrongTypeAnnotatedWithPersistenceUnit() { - PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new PersistenceAnnotationBeanPostProcessor(); try { - babpp.postProcessPropertyValues(null, null, new FieldOfWrongTypeAnnotatedWithPersistenceUnit(), "bean"); + pabpp.postProcessPropertyValues(null, null, new FieldOfWrongTypeAnnotatedWithPersistenceUnit(), "bean"); fail("Can't inject this field"); } catch (IllegalStateException ex) { @@ -554,9 +555,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT @Test public void testSetterOfWrongTypeAnnotatedWithPersistenceUnit() { - PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new PersistenceAnnotationBeanPostProcessor(); try { - babpp.postProcessPropertyValues(null, null, new SetterOfWrongTypeAnnotatedWithPersistenceUnit(), "bean"); + pabpp.postProcessPropertyValues(null, null, new SetterOfWrongTypeAnnotatedWithPersistenceUnit(), "bean"); fail("Can't inject this setter"); } catch (IllegalStateException ex) { @@ -566,9 +567,9 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT @Test public void testSetterWithNoArgs() { - PersistenceAnnotationBeanPostProcessor babpp = new PersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new PersistenceAnnotationBeanPostProcessor(); try { - babpp.postProcessPropertyValues(null, null, new SetterWithNoArgs(), "bean"); + pabpp.postProcessPropertyValues(null, null, new SetterWithNoArgs(), "bean"); fail("Can't inject this setter"); } catch (IllegalStateException ex) { @@ -576,28 +577,28 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT } } - @Ignore - public void ignoreTestNoPropertiesPassedIn() { + @Test + public void testNoPropertiesPassedIn() { EntityManager mockEm = mock(EntityManager.class); given(mockEmf.createEntityManager()).willReturn(mockEm); - PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldExtended dppcf = new DefaultPrivatePersistenceContextFieldExtended(); - babpp.postProcessAfterInstantiation(dppcf, "bean name does not matter"); + pabpp.postProcessPropertyValues(null, null, dppcf, "bean"); assertNotNull(dppcf.em); } - @Ignore - public void ignoreTestPropertiesPassedIn() { + @Test + public void testPropertiesPassedIn() { Properties props = new Properties(); props.put("foo", "bar"); EntityManager mockEm = mock(EntityManager.class); given(mockEmf.createEntityManager(props)).willReturn(mockEm); - PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldExtendedWithProps dppcf = new DefaultPrivatePersistenceContextFieldExtendedWithProps(); - babpp.postProcessAfterInstantiation(dppcf, "bean name does not matter"); + pabpp.postProcessPropertyValues(null, null, dppcf, "bean"); assertNotNull(dppcf.em); } @@ -610,10 +611,10 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT given(em.getDelegate()).willReturn(new Object()); given(em.isOpen()).willReturn(true); - PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalField = new DefaultPrivatePersistenceContextFieldWithProperties(); - babpp.postProcessPropertyValues(null, null, transactionalField, "bean"); + pabpp.postProcessPropertyValues(null, null, transactionalField, "bean"); assertNotNull(transactionalField.em); assertNotNull(transactionalField.em.getDelegate()); @@ -635,13 +636,13 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT given(em.getDelegate()).willReturn(new Object()); given(em.isOpen()).willReturn(true); - PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalFieldWithProperties = new DefaultPrivatePersistenceContextFieldWithProperties(); DefaultPrivatePersistenceContextField transactionalField = new DefaultPrivatePersistenceContextField(); - babpp.postProcessPropertyValues(null, null, transactionalFieldWithProperties, "bean1"); - babpp.postProcessPropertyValues(null, null, transactionalField, "bean2"); + pabpp.postProcessPropertyValues(null, null, transactionalFieldWithProperties, "bean1"); + pabpp.postProcessPropertyValues(null, null, transactionalField, "bean2"); assertNotNull(transactionalFieldWithProperties.em); assertNotNull(transactionalField.em); @@ -668,13 +669,13 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT given(em.getDelegate()).willReturn(new Object(), 2); given(em.isOpen()).willReturn(true); - PersistenceAnnotationBeanPostProcessor babpp = new MockPersistenceAnnotationBeanPostProcessor(); + PersistenceAnnotationBeanPostProcessor pabpp = new MockPersistenceAnnotationBeanPostProcessor(); DefaultPrivatePersistenceContextFieldWithProperties transactionalFieldWithProperties = new DefaultPrivatePersistenceContextFieldWithProperties(); DefaultPrivatePersistenceContextField transactionalField = new DefaultPrivatePersistenceContextField(); - babpp.postProcessPropertyValues(null, null, transactionalFieldWithProperties, "bean1"); - babpp.postProcessPropertyValues(null, null, transactionalField, "bean2"); + pabpp.postProcessPropertyValues(null, null, transactionalFieldWithProperties, "bean1"); + pabpp.postProcessPropertyValues(null, null, transactionalField, "bean2"); assertNotNull(transactionalFieldWithProperties.em); assertNotNull(transactionalField.em); diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java index dcd60ae78ca..ba5cd266649 100644 --- a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java +++ b/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalDataSourceSpringContextTests.java @@ -48,8 +48,7 @@ import org.springframework.test.jdbc.JdbcTestUtils; * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) */ @Deprecated -public abstract class AbstractTransactionalDataSourceSpringContextTests - extends AbstractTransactionalSpringContextTests { +public abstract class AbstractTransactionalDataSourceSpringContextTests extends AbstractTransactionalSpringContextTests { protected JdbcTemplate jdbcTemplate; @@ -105,11 +104,11 @@ public abstract class AbstractTransactionalDataSourceSpringContextTests * {@code setComplete()} impossible. * @see #setComplete */ - protected void deleteFromTables(String[] names) { - for (int i = 0; i < names.length; i++) { - int rowCount = this.jdbcTemplate.update("DELETE FROM " + names[i]); + protected void deleteFromTables(String... names) { + for (String name : names) { + int rowCount = this.jdbcTemplate.update("DELETE FROM " + name); if (logger.isInfoEnabled()) { - logger.info("Deleted " + rowCount + " rows from table " + names[i]); + logger.info("Deleted " + rowCount + " rows from table " + name); } } this.zappedTables = true; diff --git a/spring-web/src/main/java/org/springframework/web/util/Log4jWebConfigurer.java b/spring-web/src/main/java/org/springframework/web/util/Log4jWebConfigurer.java index 4861703930a..5fe7a6ae09d 100644 --- a/spring-web/src/main/java/org/springframework/web/util/Log4jWebConfigurer.java +++ b/spring-web/src/main/java/org/springframework/web/util/Log4jWebConfigurer.java @@ -127,8 +127,7 @@ public abstract class Log4jWebConfigurer { // Leave a URL (e.g. "classpath:" or "file:") as-is. if (!ResourceUtils.isUrl(location)) { - // Consider a plain file path as relative to the web - // application root directory. + // Consider a plain file path as relative to the web application root directory. location = WebUtils.getRealPath(servletContext, location); }