From aae4874b85b8dfbbf9b84b8bc0b897f5203ade09 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 19 Jul 2016 17:50:57 +0200 Subject: [PATCH] Revised spring-orm test suite (no AbstractJpaTests anymore) Issue: SPR-13515 --- .../aspectj/TransactionAspectTests.java | 69 +-- .../TransactionAspectTests-context.xml | 6 - ...rEntityManagerFactoryIntegrationTests.java | 53 +- ...tEntityManagerFactoryIntegrationTests.java | 159 ++++-- ...nManagedEntityManagerIntegrationTests.java | 28 +- ...rManagedEntityManagerIntegrationTests.java | 47 +- ...kEntityManagerFactoryIntegrationTests.java | 10 +- ...eEntityManagerFactoryIntegrationTests.java | 12 +- ...iEntityManagerFactoryIntegrationTests.java | 29 +- .../PersistenceInjectionIntegrationTests.java | 15 +- ...DependencyInjectionSpringContextTests.java | 128 ----- .../AbstractSingleSpringContextTests.java | 231 --------- .../test/AbstractSpringContextTests.java | 113 ---- ...stractTransactionalSpringContextTests.java | 484 ------------------ .../test/jpa/AbstractJpaTests.java | 354 ------------- .../OrmXmlOverridingShadowingClassLoader.java | 55 -- .../beans/factory/xml/child.xml | 51 -- .../beans/factory/xml/test.xml | 127 ----- .../orm/hibernate3/filterDefinitions.xml | 30 -- .../orm/hibernate3/typeDefinitions.xml | 32 -- .../jpa/eclipselink/eclipselink-manager.xml | 5 + .../jpa/hibernate/hibernate-manager-multi.xml | 8 +- .../orm/jpa/hibernate/hibernate-manager.xml | 11 +- .../openjpa-manager-aspectj-weaving.xml | 23 - .../orm/jpa/openjpa/openjpa-manager.xml | 18 - .../ltw/ComponentScanningWithLTWTests.java | 41 -- 26 files changed, 294 insertions(+), 1845 deletions(-) delete mode 100644 spring-orm/src/test/java/org/springframework/test/AbstractDependencyInjectionSpringContextTests.java delete mode 100644 spring-orm/src/test/java/org/springframework/test/AbstractSingleSpringContextTests.java delete mode 100644 spring-orm/src/test/java/org/springframework/test/AbstractSpringContextTests.java delete mode 100644 spring-orm/src/test/java/org/springframework/test/AbstractTransactionalSpringContextTests.java delete mode 100644 spring-orm/src/test/java/org/springframework/test/jpa/AbstractJpaTests.java delete mode 100644 spring-orm/src/test/java/org/springframework/test/jpa/OrmXmlOverridingShadowingClassLoader.java delete mode 100644 spring-orm/src/test/resources/org/springframework/beans/factory/xml/child.xml delete mode 100644 spring-orm/src/test/resources/org/springframework/beans/factory/xml/test.xml delete mode 100644 spring-orm/src/test/resources/org/springframework/orm/hibernate3/filterDefinitions.xml delete mode 100644 spring-orm/src/test/resources/org/springframework/orm/hibernate3/typeDefinitions.xml delete mode 100644 spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager-aspectj-weaving.xml delete mode 100644 spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager.xml delete mode 100644 src/test/java/org/springframework/context/annotation/ltw/ComponentScanningWithLTWTests.java diff --git a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/TransactionAspectTests.java b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/TransactionAspectTests.java index 5971b0ae006..7d1f1f73fb5 100644 --- a/spring-aspects/src/test/java/org/springframework/transaction/aspectj/TransactionAspectTests.java +++ b/spring-aspects/src/test/java/org/springframework/transaction/aspectj/TransactionAspectTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -18,55 +18,45 @@ package org.springframework.transaction.aspectj; import java.lang.reflect.Method; +import org.junit.Before; +import org.junit.Test; + import org.springframework.tests.transaction.CallCountingTransactionManager; import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource; -import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAttribute; +import static org.junit.Assert.*; + /** * @author Rod Johnson * @author Ramnivas Laddad * @author Juergen Hoeller * @author Sam Brannen */ -@SuppressWarnings("deprecation") -public class TransactionAspectTests extends org.springframework.test.AbstractDependencyInjectionSpringContextTests { +public class TransactionAspectTests { - private CallCountingTransactionManager txManager; + private final CallCountingTransactionManager txManager = new CallCountingTransactionManager(); - private TransactionalAnnotationOnlyOnClassWithNoInterface annotationOnlyOnClassWithNoInterface; + private final TransactionalAnnotationOnlyOnClassWithNoInterface annotationOnlyOnClassWithNoInterface = + new TransactionalAnnotationOnlyOnClassWithNoInterface(); - private ClassWithProtectedAnnotatedMember beanWithAnnotatedProtectedMethod; + private final ClassWithProtectedAnnotatedMember beanWithAnnotatedProtectedMethod = + new ClassWithProtectedAnnotatedMember(); - private ClassWithPrivateAnnotatedMember beanWithAnnotatedPrivateMethod; + private final ClassWithPrivateAnnotatedMember beanWithAnnotatedPrivateMethod = + new ClassWithPrivateAnnotatedMember(); - private MethodAnnotationOnClassWithNoInterface methodAnnotationOnly = new MethodAnnotationOnClassWithNoInterface(); + private final MethodAnnotationOnClassWithNoInterface methodAnnotationOnly = + new MethodAnnotationOnClassWithNoInterface(); - public void setAnnotationOnlyOnClassWithNoInterface( - TransactionalAnnotationOnlyOnClassWithNoInterface annotationOnlyOnClassWithNoInterface) { - this.annotationOnlyOnClassWithNoInterface = annotationOnlyOnClassWithNoInterface; - } - - public void setClassWithAnnotatedProtectedMethod(ClassWithProtectedAnnotatedMember aBean) { - this.beanWithAnnotatedProtectedMethod = aBean; - } - - public void setClassWithAnnotatedPrivateMethod(ClassWithPrivateAnnotatedMember aBean) { - this.beanWithAnnotatedPrivateMethod = aBean; - } - - public void setTransactionAspect(TransactionAspectSupport transactionAspect) { - this.txManager = (CallCountingTransactionManager) transactionAspect.getTransactionManager(); - } - - - @Override - protected String[] getConfigPaths() { - return new String[] { "TransactionAspectTests-context.xml" }; + @Before + public void initContext() { + AnnotationTransactionAspect.aspectOf().setTransactionManager(txManager); } + @Test public void testCommitOnAnnotatedClass() throws Throwable { txManager.clear(); assertEquals(0, txManager.begun); @@ -74,6 +64,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(1, txManager.commits); } + @Test public void testCommitOnAnnotatedProtectedMethod() throws Throwable { txManager.clear(); assertEquals(0, txManager.begun); @@ -81,6 +72,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(1, txManager.commits); } + @Test public void testCommitOnAnnotatedPrivateMethod() throws Throwable { txManager.clear(); assertEquals(0, txManager.begun); @@ -88,6 +80,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(1, txManager.commits); } + @Test public void testNoCommitOnNonAnnotatedNonPublicMethodInTransactionalType() throws Throwable { txManager.clear(); assertEquals(0,txManager.begun); @@ -95,6 +88,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(0,txManager.begun); } + @Test public void testCommitOnAnnotatedMethod() throws Throwable { txManager.clear(); assertEquals(0, txManager.begun); @@ -102,6 +96,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(1, txManager.commits); } + @Test public void testNotTransactional() throws Throwable { txManager.clear(); assertEquals(0, txManager.begun); @@ -109,6 +104,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertEquals(0, txManager.begun); } + @Test public void testDefaultCommitOnAnnotatedClass() throws Throwable { final Exception ex = new Exception(); try { @@ -125,6 +121,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep } } + @Test public void testDefaultRollbackOnAnnotatedClass() throws Throwable { final RuntimeException ex = new RuntimeException(); try { @@ -141,10 +138,11 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep } } + @Test public void testDefaultCommitOnSubclassOfAnnotatedClass() throws Throwable { final Exception ex = new Exception(); try { - testRollback(new TransactionOperationCallback() { + testRollback(new TransactionOperationCallback() { @Override public Object performTransactionalOperation() throws Throwable { return new SubclassOfClassWithTransactionalAnnotation().echo(ex); @@ -157,6 +155,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep } } + @Test public void testDefaultCommitOnSubclassOfClassWithTransactionalMethodAnnotated() throws Throwable { final Exception ex = new Exception(); try { @@ -173,6 +172,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep } } + @Test public void testDefaultCommitOnImplementationOfAnnotatedInterface() throws Throwable { final Exception ex = new Exception(); testNotTransactional(new TransactionOperationCallback() { @@ -188,6 +188,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep * it implements a transactionally annotated interface. This behaviour could only * be changed in AbstractFallbackTransactionAttributeSource in Spring proper. */ + @Test public void testDoesNotResolveTxAnnotationOnMethodFromClassImplementingAnnotatedInterface() throws Exception { AnnotationTransactionAttributeSource atas = new AnnotationTransactionAttributeSource(); Method m = ImplementsAnnotatedInterface.class.getMethod("echo", Throwable.class); @@ -195,6 +196,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep assertNull(ta); } + @Test public void testDefaultRollbackOnImplementationOfAnnotatedInterface() throws Throwable { final Exception rollbackProvokingException = new RuntimeException(); testNotTransactional(new TransactionOperationCallback() { @@ -237,15 +239,19 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep private interface TransactionOperationCallback { + Object performTransactionalOperation() throws Throwable; } + public static class SubclassOfClassWithTransactionalAnnotation extends TransactionalAnnotationOnlyOnClassWithNoInterface { } + public static class SubclassOfClassWithTransactionalMethodAnnotation extends MethodAnnotationOnClassWithNoInterface { } + public static class ImplementsAnnotatedInterface implements ITransactional { @Override @@ -257,6 +263,7 @@ public class TransactionAspectTests extends org.springframework.test.AbstractDep } } + public static class NotTransactional { public void noop() { diff --git a/spring-aspects/src/test/resources/org/springframework/transaction/aspectj/TransactionAspectTests-context.xml b/spring-aspects/src/test/resources/org/springframework/transaction/aspectj/TransactionAspectTests-context.xml index 0d08cdcb56f..aa58304004c 100644 --- a/spring-aspects/src/test/resources/org/springframework/transaction/aspectj/TransactionAspectTests-context.xml +++ b/spring-aspects/src/test/resources/org/springframework/transaction/aspectj/TransactionAspectTests-context.xml @@ -9,10 +9,4 @@ - - - - - - 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 bc32b66800e..94a7c5a8b2b 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-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -24,13 +24,14 @@ import javax.persistence.FlushModeType; import javax.persistence.NoResultException; import javax.persistence.Query; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.junit.Test; + import org.springframework.orm.jpa.domain.DriversLicense; import org.springframework.orm.jpa.domain.Person; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; import org.springframework.util.SerializationTestUtils; +import static org.junit.Assert.*; + /** * Integration tests for LocalContainerEntityManagerFactoryBean. * Uses an in-memory database. @@ -39,10 +40,9 @@ import org.springframework.util.SerializationTestUtils; * @author Juergen Hoeller */ @SuppressWarnings("deprecation") -public abstract class AbstractContainerEntityManagerFactoryIntegrationTests extends - AbstractEntityManagerFactoryIntegrationTests { +public abstract class AbstractContainerEntityManagerFactoryIntegrationTests extends AbstractEntityManagerFactoryIntegrationTests { - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Test public void testEntityManagerFactoryImplementsEntityManagerFactoryInfo() { assertTrue(Proxy.isProxyClass(entityManagerFactory.getClass())); assertTrue("Must have introduced config interface", entityManagerFactory instanceof EntityManagerFactoryInfo); @@ -52,27 +52,33 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte assertNotNull("Raw EntityManagerFactory must be available", emfi.getNativeEntityManagerFactory()); } + @Test public void testStateClean() { assertEquals("Should be no people from previous transactions", 0, countRowsInTable("person")); } + @Test public void testJdbcTx1_1() { testJdbcTx2(); } + @Test public void testJdbcTx1_2() { testJdbcTx2(); } + @Test public void testJdbcTx1_3() { testJdbcTx2(); } + @Test public void testJdbcTx2() { assertEquals("Any previous tx must have been rolled back", 0, countRowsInTable("person")); - executeSqlScript("/org/springframework/orm/jpa/insertPerson.sql", false); + executeSqlScript("/org/springframework/orm/jpa/insertPerson.sql"); } + @Test @SuppressWarnings({ "unused", "unchecked" }) public void testEntityManagerProxyIsProxy() { assertTrue(Proxy.isProxyClass(sharedEntityManager.getClass())); @@ -84,6 +90,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte assertTrue("Close should have been silently ignored", sharedEntityManager.isOpen()); } + @Test public void testBogusQuery() { try { Query query = sharedEntityManager.createQuery("It's raining toads"); @@ -91,11 +98,12 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte query.executeUpdate(); fail("Should have thrown a RuntimeException"); } - catch (RuntimeException e) { - /* expected */ + catch (RuntimeException ex) { + // expected } } + @Test public void testGetReferenceWhenNoRow() { try { Person notThere = sharedEntityManager.getReference(Person.class, 666); @@ -106,11 +114,12 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte notThere.getFirstName(); fail("Should have thrown an EntityNotFoundException"); } - catch (EntityNotFoundException e) { - /* expected */ + catch (EntityNotFoundException ex) { + // expected } } + @Test public void testLazyLoading() { try { Person tony = new Person(); @@ -136,6 +145,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } + @Test @SuppressWarnings("unchecked") public void testMultipleResults() { // Add with JDBC @@ -150,11 +160,12 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte assertEquals(firstName, people.get(0).getFirstName()); } - protected final void insertPerson(String firstName) { + protected void insertPerson(String firstName) { String INSERT_PERSON = "INSERT INTO PERSON (ID, FIRST_NAME, LAST_NAME) VALUES (?, ?, ?)"; jdbcTemplate.update(INSERT_PERSON, 1, firstName, "Blair"); } + @Test public void testEntityManagerProxyRejectsProgrammaticTxManagement() { try { sharedEntityManager.getTransaction(); @@ -164,6 +175,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } + @Test public void testInstantiateAndSaveWithSharedEmProxy() { testInstantiateAndSave(sharedEntityManager); } @@ -179,6 +191,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte assertEquals("1 row must have been inserted", 1, countRowsInTable("person")); } + @Test @SuppressWarnings("unchecked") public void testQueryNoPersons() { EntityManager em = entityManagerFactory.createEntityManager(); @@ -194,7 +207,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Test @SuppressWarnings("unchecked") public void testQueryNoPersonsNotTransactional() { EntityManager em = entityManagerFactory.createEntityManager(); @@ -210,6 +223,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } + @Test @SuppressWarnings({ "unused", "unchecked" }) public void testQueryNoPersonsShared() { EntityManager em = SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory); @@ -225,9 +239,11 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Test @SuppressWarnings("unchecked") public void testQueryNoPersonsSharedNotTransactional() { + endTransaction(); + EntityManager em = SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory); Query q = em.createQuery("select p from Person as p"); q.setFlushMode(FlushModeType.AUTO); @@ -239,8 +255,7 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } catch (Exception ex) { // We would typically expect an IllegalStateException, but Hibernate throws a - // PersistenceException. So we assert the contents of the exception message - // instead. + // PersistenceException. So we assert the contents of the exception message instead. assertTrue(ex.getMessage().contains("closed")); } q = em.createQuery("select p from Person as p"); @@ -254,10 +269,8 @@ public abstract class AbstractContainerEntityManagerFactoryIntegrationTests exte } } + @Test public void testCanSerializeProxies() throws Exception { - // just necessary because of AbstractJpaTests magically cloning the BeanFactory - ((DefaultListableBeanFactory) getApplicationContext().getBeanFactory()).setSerializationId("emf-it"); - assertNotNull(SerializationTestUtils.serializeAndDeserialize(entityManagerFactory)); assertNotNull(SerializationTestUtils.serializeAndDeserialize(sharedEntityManager)); } 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 0774d940db3..7997a8dc172 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 @@ -17,16 +17,35 @@ package org.springframework.orm.jpa; import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; import javax.persistence.Query; +import javax.sql.DataSource; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.core.io.Resource; +import org.springframework.dao.DataAccessException; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionDefinition; +import org.springframework.transaction.TransactionException; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.DefaultTransactionDefinition; import org.springframework.transaction.support.TransactionSynchronizationManager; +import static org.junit.Assert.*; + /** * @author Rod Johnson * @author Juergen Hoeller */ -@SuppressWarnings("deprecation") -public abstract class AbstractEntityManagerFactoryIntegrationTests extends org.springframework.test.jpa.AbstractJpaTests { +public abstract class AbstractEntityManagerFactoryIntegrationTests { protected static final String[] ECLIPSELINK_CONFIG_LOCATIONS = new String[] { "/org/springframework/orm/jpa/eclipselink/eclipselink-manager.xml", "/org/springframework/orm/jpa/memdb.xml", @@ -37,51 +56,131 @@ public abstract class AbstractEntityManagerFactoryIntegrationTests extends org.s "/org/springframework/orm/jpa/inject.xml"}; - private static Provider getProvider() { - String provider = System.getProperty("org.springframework.orm.jpa.provider"); - if (provider != null && provider.toLowerCase().contains("hibernate")) { - return Provider.HIBERNATE; + private static ConfigurableApplicationContext applicationContext; + + protected EntityManagerFactory entityManagerFactory; + + protected EntityManager sharedEntityManager; + + protected PlatformTransactionManager transactionManager; + + protected TransactionDefinition transactionDefinition = new DefaultTransactionDefinition(); + + protected TransactionStatus transactionStatus; + + private boolean complete = false; + + protected JdbcTemplate jdbcTemplate; + + private boolean zappedTables = false; + + + @Autowired + public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { + this.entityManagerFactory = entityManagerFactory; + this.sharedEntityManager = SharedEntityManagerCreator.createSharedEntityManager(this.entityManagerFactory); + } + + @Autowired + public void setTransactionManager(PlatformTransactionManager transactionManager) { + this.transactionManager = transactionManager; + } + + @Autowired + public void setDataSource(DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + } + + + @Before + public void setUp() { + if (applicationContext == null) { + applicationContext = new ClassPathXmlApplicationContext(getConfigLocations()); } - return Provider.ECLIPSELINK; - } + applicationContext.getAutowireCapableBeanFactory().autowireBean(this); - - @Override - protected String getActualOrmXmlLocation() { - // Specify that we do NOT want to find such a file. - return null; - } - - @Override - protected String[] getConfigPaths() { - Provider provider = getProvider(); - switch (provider) { - case ECLIPSELINK: - return ECLIPSELINK_CONFIG_LOCATIONS; - case HIBERNATE: - return HIBERNATE_CONFIG_LOCATIONS; - default: - throw new IllegalStateException("Unknown provider: " + provider); + if (this.transactionManager != null && this.transactionDefinition != null) { + startNewTransaction(); } } - @Override - protected void onTearDownAfterTransaction() throws Exception { + protected String[] getConfigLocations() { + return ECLIPSELINK_CONFIG_LOCATIONS; + } + + @After + public void tearDown() throws Exception { + if (this.transactionStatus != null && !this.transactionStatus.isCompleted()) { + endTransaction(); + } + assertTrue(TransactionSynchronizationManager.getResourceMap().isEmpty()); assertFalse(TransactionSynchronizationManager.isSynchronizationActive()); assertFalse(TransactionSynchronizationManager.isCurrentTransactionReadOnly()); assertFalse(TransactionSynchronizationManager.isActualTransactionActive()); } + @AfterClass + public static void closeContext() { + applicationContext.close(); + applicationContext = null; + } + + + protected EntityManager createContainerManagedEntityManager() { + return ExtendedEntityManagerCreator.createContainerManagedEntityManager(this.entityManagerFactory); + } + + protected void setComplete() { + if (this.transactionManager == null) { + throw new IllegalStateException("No transaction manager set"); + } + if (this.zappedTables) { + throw new IllegalStateException("Cannot set complete after deleting tables"); + } + this.complete = true; + } + + protected void endTransaction() { + final boolean commit = this.complete; + if (this.transactionStatus != null) { + try { + if (commit) { + this.transactionManager.commit(this.transactionStatus); + } + else { + this.transactionManager.rollback(this.transactionStatus); + } + } + finally { + this.transactionStatus = null; + } + } + } + + protected void startNewTransaction() throws TransactionException { + this.transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition); + } + + protected void deleteFromTables(String... names) { + for (String name : names) { + this.jdbcTemplate.update("DELETE FROM " + name); + } + this.zappedTables = true; + } + protected int countRowsInTable(EntityManager em, String tableName) { Query query = em.createNativeQuery("SELECT COUNT(0) FROM " + tableName); return ((Number) query.getSingleResult()).intValue(); } + protected int countRowsInTable(String tableName) { + return this.jdbcTemplate.queryForObject("SELECT COUNT(0) FROM " + tableName, Integer.class); + } - static enum Provider { - - ECLIPSELINK, HIBERNATE + protected void executeSqlScript(String sqlResourcePath) throws DataAccessException { + Resource resource = applicationContext.getResource(sqlResourcePath); + new ResourceDatabasePopulator(resource).execute(this.jdbcTemplate.getDataSource()); } } 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 52323467f86..3591bea96bf 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -22,26 +22,23 @@ import javax.persistence.EntityManager; import javax.persistence.Query; import javax.persistence.TransactionRequiredException; +import org.junit.Test; + import org.springframework.orm.jpa.domain.Person; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; + +import static org.junit.Assert.*; /** * An application-managed entity manager can join an existing transaction, * but such joining must be made programmatically, not transactionally. * * @author Rod Johnson + * @author Juergen Hoeller * @since 2.0 */ -@SuppressWarnings("deprecation") public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEntityManagerFactoryIntegrationTests { - @Transactional(propagation = Propagation.NOT_SUPPORTED) - public void testEntityManagerIsProxy() { - assertTrue("EntityManagerFactory is proxied", Proxy.isProxyClass(entityManagerFactory.getClass())); - } - - @Transactional(readOnly = true) + @Test @SuppressWarnings("unchecked") public void testEntityManagerProxyIsProxy() { EntityManager em = entityManagerFactory.createEntityManager(); @@ -55,17 +52,20 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt assertFalse("Close should work on application managed EM", em.isOpen()); } + @Test public void testEntityManagerProxyAcceptsProgrammaticTxJoining() { EntityManager em = entityManagerFactory.createEntityManager(); em.joinTransaction(); } + @Test public void testInstantiateAndSave() { EntityManager em = entityManagerFactory.createEntityManager(); em.joinTransaction(); doInstantiateAndSave(em); } + @Test public void testCannotFlushWithoutGettingTransaction() { EntityManager em = entityManagerFactory.createEntityManager(); try { @@ -84,7 +84,7 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt setComplete(); } - public void doInstantiateAndSave(EntityManager em) { + protected void doInstantiateAndSave(EntityManager em) { testStateClean(); Person p = new Person(); @@ -96,10 +96,12 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt assertEquals("1 row must have been inserted", 1, countRowsInTable(em, "person")); } + @Test public void testStateClean() { assertEquals("Should be no people from previous transactions", 0, countRowsInTable("person")); } + @Test public void testReuseInNewTransaction() { EntityManager em = entityManagerFactory.createEntityManager(); em.joinTransaction(); @@ -131,10 +133,11 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt setComplete(); } - public static void deleteAllPeopleUsingEntityManager(EntityManager em) { + protected void deleteAllPeopleUsingEntityManager(EntityManager em) { em.createQuery("delete from Person p").executeUpdate(); } + @Test public void testRollbackOccurs() { EntityManager em = entityManagerFactory.createEntityManager(); em.joinTransaction(); @@ -143,6 +146,7 @@ public class ApplicationManagedEntityManagerIntegrationTests extends AbstractEnt assertEquals("Tx must have been rolled back", 0, countRowsInTable(em, "person")); } + @Test public void testCommitOccurs() { EntityManager em = entityManagerFactory.createEntityManager(); em.joinTransaction(); 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 462948cf5f2..9b720bd215a 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 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. @@ -23,32 +23,38 @@ import javax.persistence.PersistenceException; import javax.persistence.Query; import javax.persistence.TransactionRequiredException; +import org.junit.Test; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.dao.support.PersistenceExceptionTranslator; import org.springframework.orm.jpa.domain.Person; -import org.springframework.transaction.annotation.Propagation; -import org.springframework.transaction.annotation.Transactional; + +import static org.junit.Assert.*; /** * Integration tests using in-memory database for container-managed JPA * * @author Rod Johnson + * @author Juergen Hoeller * @since 2.0 */ @SuppressWarnings("deprecation") public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntityManagerFactoryIntegrationTests { - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Autowired + private AbstractEntityManagerFactoryBean entityManagerFactoryBean; + + + @Test public void testExceptionTranslationWithDialectFoundOnIntroducedEntityManagerInfo() throws Exception { doTestExceptionTranslationWithDialectFound(((EntityManagerFactoryInfo) entityManagerFactory).getJpaDialect()); } - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Test public void testExceptionTranslationWithDialectFoundOnEntityManagerFactoryBean() throws Exception { - AbstractEntityManagerFactoryBean aefb = - (AbstractEntityManagerFactoryBean) applicationContext.getBean("&entityManagerFactory"); - assertNotNull("Dialect must have been set", aefb.getJpaDialect()); - doTestExceptionTranslationWithDialectFound(aefb); + assertNotNull("Dialect must have been set", entityManagerFactoryBean.getJpaDialect()); + doTestExceptionTranslationWithDialectFound(entityManagerFactoryBean); } protected void doTestExceptionTranslationWithDialectFound(PersistenceExceptionTranslator pet) throws Exception { @@ -60,6 +66,7 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit assertSame(in2, dex.getCause()); } + @Test @SuppressWarnings("unchecked") public void testEntityManagerProxyIsProxy() { EntityManager em = createContainerManagedEntityManager(); @@ -74,19 +81,20 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit fail("Close should not work on container managed EM"); } catch (IllegalStateException ex) { - // Ok + // OK } assertTrue(em.isOpen()); } // This would be legal, at least if not actually _starting_ a tx + @Test public void testEntityManagerProxyRejectsProgrammaticTxManagement() { try { createContainerManagedEntityManager().getTransaction(); fail("Should have thrown an IllegalStateException"); } - catch (IllegalStateException e) { - /* expected */ + catch (IllegalStateException ex) { + // expected } } @@ -94,27 +102,31 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit * See comments in spec on EntityManager.joinTransaction(). * We take the view that this is a valid no op. */ + @Test public void testContainerEntityManagerProxyAllowsJoinTransactionInTransaction() { createContainerManagedEntityManager().joinTransaction(); } - @Transactional(propagation = Propagation.NOT_SUPPORTED) + @Test public void testContainerEntityManagerProxyRejectsJoinTransactionWithoutTransaction() { + endTransaction(); + try { createContainerManagedEntityManager().joinTransaction(); fail("Should have thrown a TransactionRequiredException"); } - catch (TransactionRequiredException e) { - /* expected */ + catch (TransactionRequiredException ex) { + // expected } } + @Test public void testInstantiateAndSave() { EntityManager em = createContainerManagedEntityManager(); doInstantiateAndSave(em); } - public void doInstantiateAndSave(EntityManager em) { + protected void doInstantiateAndSave(EntityManager em) { assertEquals("Should be no people from previous transactions", 0, countRowsInTable(em, "person")); Person p = new Person(); @@ -126,6 +138,7 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit assertEquals("1 row must have been inserted", 1, countRowsInTable(em, "person")); } + @Test public void testReuseInNewTransaction() { EntityManager em = createContainerManagedEntityManager(); doInstantiateAndSave(em); @@ -147,6 +160,7 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit deleteFromTables("person"); } + @Test public void testRollbackOccurs() { EntityManager em = createContainerManagedEntityManager(); doInstantiateAndSave(em); @@ -154,6 +168,7 @@ public class ContainerManagedEntityManagerIntegrationTests extends AbstractEntit assertEquals("Tx must have been rolled back", 0, countRowsInTable(em, "person")); } + @Test public void testCommitOccurs() { EntityManager em = createContainerManagedEntityManager(); doInstantiateAndSave(em); diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/eclipselink/EclipseLinkEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/eclipselink/EclipseLinkEntityManagerFactoryIntegrationTests.java index 00744b24142..b01afaa547a 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/eclipselink/EclipseLinkEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/eclipselink/EclipseLinkEntityManagerFactoryIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -17,29 +17,33 @@ package org.springframework.orm.jpa.eclipselink; import org.eclipse.persistence.jpa.JpaEntityManager; +import org.junit.Test; import org.springframework.orm.jpa.AbstractContainerEntityManagerFactoryIntegrationTests; import org.springframework.orm.jpa.EntityManagerFactoryInfo; +import static org.junit.Assert.*; + /** * EclipseLink-specific JPA tests. * * @author Juergen Hoeller */ -@SuppressWarnings("deprecation") public class EclipseLinkEntityManagerFactoryIntegrationTests extends AbstractContainerEntityManagerFactoryIntegrationTests { @Override - protected String[] getConfigPaths() { + protected String[] getConfigLocations() { return ECLIPSELINK_CONFIG_LOCATIONS; } + @Test public void testCanCastNativeEntityManagerFactoryToEclipseLinkEntityManagerFactoryImpl() { EntityManagerFactoryInfo emfi = (EntityManagerFactoryInfo) entityManagerFactory; assertTrue(emfi.getNativeEntityManagerFactory().getClass().getName().endsWith("EntityManagerFactoryImpl")); } + @Test public void testCanCastSharedEntityManagerProxyToEclipseLinkEntityManager() { assertTrue(sharedEntityManager instanceof JpaEntityManager); JpaEntityManager eclipselinkEntityManager = (JpaEntityManager) sharedEntityManager; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java index dcd286f01d0..c9e2af42a4d 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateEntityManagerFactoryIntegrationTests.java @@ -18,31 +18,35 @@ package org.springframework.orm.jpa.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; +import org.junit.Test; import org.springframework.orm.jpa.AbstractContainerEntityManagerFactoryIntegrationTests; import org.springframework.orm.jpa.EntityManagerFactoryInfo; import org.springframework.orm.jpa.EntityManagerProxy; +import static org.junit.Assert.*; + /** * Hibernate-specific JPA tests. * * @author Juergen Hoeller * @author Rod Johnson */ -@SuppressWarnings("deprecation") -public class HibernateEntityManagerFactoryIntegrationTests extends - AbstractContainerEntityManagerFactoryIntegrationTests { +public class HibernateEntityManagerFactoryIntegrationTests extends AbstractContainerEntityManagerFactoryIntegrationTests { @Override - protected String[] getConfigPaths() { + protected String[] getConfigLocations() { return HIBERNATE_CONFIG_LOCATIONS; } + + @Test public void testCanCastNativeEntityManagerFactoryToHibernateEntityManagerFactoryImpl() { EntityManagerFactoryInfo emfi = (EntityManagerFactoryInfo) entityManagerFactory; assertTrue(emfi.getNativeEntityManagerFactory() instanceof SessionFactory); // as of Hibernate 5.2 } + @Test public void testCanCastSharedEntityManagerProxyToHibernateEntityManager() { assertTrue(((EntityManagerProxy) sharedEntityManager).getTargetEntityManager() instanceof Session); // as of Hibernate 5.2 } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java index 7153c70bd68..a30127ef1de 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/hibernate/HibernateMultiEntityManagerFactoryIntegrationTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -19,37 +19,32 @@ package org.springframework.orm.jpa.hibernate; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; +import org.junit.Test; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.jpa.AbstractContainerEntityManagerFactoryIntegrationTests; +import static org.junit.Assert.*; + /** * Hibernate-specific JPA tests with multiple EntityManagerFactory instances. * * @author Juergen Hoeller */ -@SuppressWarnings("deprecation") -public class HibernateMultiEntityManagerFactoryIntegrationTests extends - AbstractContainerEntityManagerFactoryIntegrationTests { - - { - setAutowireMode(AUTOWIRE_BY_NAME); - } +public class HibernateMultiEntityManagerFactoryIntegrationTests extends AbstractContainerEntityManagerFactoryIntegrationTests { + @Autowired private EntityManagerFactory entityManagerFactory2; - public void setEntityManagerFactory2(EntityManagerFactory entityManagerFactory2) { - this.entityManagerFactory2 = entityManagerFactory2; - } - @Override - protected String[] getConfigPaths() { - return new String[] { - "/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml", - "/org/springframework/orm/jpa/memdb.xml", - }; + protected String[] getConfigLocations() { + return new String[] {"/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml", + "/org/springframework/orm/jpa/memdb.xml"}; } + @Test public void testEntityManagerFactory2() { EntityManager em = this.entityManagerFactory2.createEntityManager(); try { 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 3982a8ee1b4..e8b25c1929a 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 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. @@ -16,25 +16,22 @@ package org.springframework.orm.jpa.support; +import org.junit.Test; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.jpa.AbstractEntityManagerFactoryIntegrationTests; import org.springframework.orm.jpa.support.PersistenceInjectionTests.DefaultPublicPersistenceContextSetter; import org.springframework.orm.jpa.support.PersistenceInjectionTests.DefaultPublicPersistenceUnitSetterNamedPerson; +import static org.junit.Assert.*; + /** * @author Rod Johnson * @author Juergen Hoeller * @author Sam Brannen */ -@SuppressWarnings("deprecation") public class PersistenceInjectionIntegrationTests extends AbstractEntityManagerFactoryIntegrationTests { - // Enable support for @Autowired - { - setAutowireMode(AUTOWIRE_NO); - setDependencyCheck(false); - } - @Autowired private DefaultPublicPersistenceContextSetter defaultSetterInjected; @@ -42,10 +39,12 @@ public class PersistenceInjectionIntegrationTests extends AbstractEntityManagerF private DefaultPublicPersistenceUnitSetterNamedPerson namedSetterInjected; + @Test public void testDefaultPersistenceContextSetterInjection() { assertNotNull(defaultSetterInjected.getEntityManager()); } + @Test public void testSetterInjectionOfNamedPersistenceContext() { assertNotNull(namedSetterInjected.getEntityManagerFactory()); } diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractDependencyInjectionSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractDependencyInjectionSpringContextTests.java deleted file mode 100644 index 266a61b8ad4..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/AbstractDependencyInjectionSpringContextTests.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test; - -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.util.Assert; - -/** - * This class is only used within tests in the spring-orm module. - * - *

Convenient superclass for JUnit 3.8 based tests depending on a Spring - * context. The test instance itself is populated by Dependency Injection. - * - *

Supports Setter Dependency Injection: simply express dependencies - * on objects in the test fixture, and they will be satisfied by autowiring - * by type. - * - * @author Rod Johnson - * @author Rob Harrop - * @author Rick Evans - * @author Sam Brannen - * @since 1.1.1 - * @deprecated as of Spring 3.0, in favor of using the listener-based test context framework - * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) - */ -@Deprecated -public abstract class AbstractDependencyInjectionSpringContextTests extends AbstractSingleSpringContextTests { - - /** - * Constant that indicates no autowiring at all. - * @see #setAutowireMode - */ - protected static final int AUTOWIRE_NO = AutowireCapableBeanFactory.AUTOWIRE_NO; - - /** - * Constant that indicates autowiring bean properties by name. - * @see #setAutowireMode - */ - protected static final int AUTOWIRE_BY_NAME = AutowireCapableBeanFactory.AUTOWIRE_BY_NAME; - - /** - * Constant that indicates autowiring bean properties by type. - * @see #setAutowireMode - */ - protected static final int AUTOWIRE_BY_TYPE = AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE; - - private int autowireMode = AUTOWIRE_BY_TYPE; - - private boolean dependencyCheck = true; - - - /** - * Set the autowire mode for test properties set by Dependency Injection. - *

The default is {@link #AUTOWIRE_BY_TYPE}. Can be set to - * {@link #AUTOWIRE_BY_NAME} or {@link #AUTOWIRE_NO} instead. - * @see #AUTOWIRE_BY_TYPE - * @see #AUTOWIRE_BY_NAME - * @see #AUTOWIRE_NO - */ - protected final void setAutowireMode(final int autowireMode) { - this.autowireMode = autowireMode; - } - - /** - * Return the autowire mode for test properties set by Dependency Injection. - */ - protected final int getAutowireMode() { - return this.autowireMode; - } - - /** - * Set whether or not dependency checking should be performed for test - * properties set by Dependency Injection. - *

The default is {@code true}, meaning that tests cannot be run - * unless all properties are populated. - */ - protected final void setDependencyCheck(final boolean dependencyCheck) { - this.dependencyCheck = dependencyCheck; - } - - /** - * Return whether or not dependency checking should be performed for test - * properties set by Dependency Injection. - */ - protected final boolean isDependencyCheck() { - return this.dependencyCheck; - } - - /** - * Prepare this test instance, injecting dependencies into its bean properties. - *

Note: if the {@link ApplicationContext} for this test instance has not - * been configured (e.g., is {@code null}), dependency injection - * will naturally not be performed, but an informational - * message will be written to the log. - * @see #injectDependencies() - */ - @Override - protected void prepareTestInstance() throws Exception { - if (getApplicationContext() == null) { - if (this.logger.isInfoEnabled()) { - this.logger.info("ApplicationContext has not been configured for test [" + getClass().getName() - + "]: dependency injection will NOT be performed."); - } - } - else { - Assert.state(getApplicationContext() != null, - "injectDependencies() called without first configuring an ApplicationContext"); - - getApplicationContext().getBeanFactory().autowireBeanProperties(this, getAutowireMode(), isDependencyCheck()); - } - } - -} diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractSingleSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractSingleSpringContextTests.java deleted file mode 100644 index a022c32cd29..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/AbstractSingleSpringContextTests.java +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test; - -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.AnnotationConfigUtils; -import org.springframework.context.support.GenericApplicationContext; -import org.springframework.core.io.support.ResourcePatternUtils; -import org.springframework.util.ClassUtils; -import org.springframework.util.ResourceUtils; -import org.springframework.util.StringUtils; - -/** - * This class is only used within tests in the spring-orm module. - * - *

Abstract JUnit 3.8 test class that holds and exposes a single Spring - * {@link org.springframework.context.ApplicationContext ApplicationContext}. - * - *

This class will cache contexts based on a context key: normally the - * config locations String array describing the Spring resource descriptors - * making up the context. Unless the {@link #setDirty()} method is called by a - * test, the context will not be reloaded, even across different subclasses of - * this test. This is particularly beneficial if your context is slow to - * construct, for example if you are using Hibernate and the time taken to load - * the mappings is an issue. - * - *

For such standard usage, simply override the {@link #getConfigLocations()} - * method and provide the desired config files. For alternative configuration - * options, see {@link #getConfigPaths()}. - * - *

WARNING: When doing integration tests from within Eclipse, only use - * classpath resource URLs. Else, you may see misleading failures when changing - * context locations. - * - * @author Juergen Hoeller - * @author Rod Johnson - * @author Sam Brannen - * @since 2.0 - * @see #getConfigLocations() - * @see #getApplicationContext() - * @deprecated as of Spring 3.0, in favor of using the listener-based test context framework - * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) - */ -@Deprecated -abstract class AbstractSingleSpringContextTests extends AbstractSpringContextTests { - - private static final String SLASH = "/"; - - /** Application context this test will run against */ - protected ConfigurableApplicationContext applicationContext; - - /** - * This implementation is final. Override {@code onSetUp} for custom behavior. - * @see #onSetUp() - */ - @Override - protected final void setUp() throws Exception { - // lazy load, in case getApplicationContext() has not yet been called. - if (this.applicationContext == null) { - this.applicationContext = getContext(getConfigLocations()); - } - prepareTestInstance(); - onSetUp(); - } - - /** - * Prepare this test instance, for example populating its fields. - * The context has already been loaded at the time of this callback. - *

The default implementation does nothing. - * @throws Exception in case of preparation failure - */ - protected void prepareTestInstance() throws Exception { - } - - /** - * Subclasses can override this method in place of the {@code setUp()} - * method, which is final in this class. - *

The default implementation does nothing. - * @throws Exception simply let any exception propagate - */ - protected void onSetUp() throws Exception { - } - - /** - * This implementation is final. Override {@code onTearDown} for - * custom behavior. - * @see #onTearDown() - */ - @Override - protected final void tearDown() throws Exception { - onTearDown(); - } - - /** - * Subclasses can override this to add custom behavior on teardown. - * @throws Exception simply let any exception propagate - */ - protected void onTearDown() throws Exception { - } - - /** - * Load a Spring ApplicationContext from the given config locations. - *

The default implementation creates a standard - * {@link #createApplicationContext GenericApplicationContext}, allowing - * for customizing the internal bean factory through - * {@link #customizeBeanFactory}. - * @param locations the config locations (as Spring resource locations, - * e.g. full classpath locations or any kind of URL) - * @return the corresponding ApplicationContext instance (potentially cached) - * @throws Exception if context loading failed - * @see #createApplicationContext(String[]) - */ - @Override - protected ConfigurableApplicationContext loadContext(String... locations) throws Exception { - if (this.logger.isInfoEnabled()) { - this.logger.info("Loading context for locations: " + StringUtils.arrayToCommaDelimitedString(locations)); - } - return createApplicationContext(locations); - } - - /** - * Create a Spring {@link ConfigurableApplicationContext} for use by this test. - *

The default implementation creates a standard {@link GenericApplicationContext} - * instance, calls the {@link #prepareApplicationContext} prepareApplicationContext} - * method and the {@link #customizeBeanFactory customizeBeanFactory} method to allow - * for customizing the context and its DefaultListableBeanFactory, populates the - * context from the specified config {@code locations} through the configured - * {@link #createBeanDefinitionReader(GenericApplicationContext) BeanDefinitionReader}, - * and finally {@link ConfigurableApplicationContext#refresh() refreshes} the context. - * @param locations the config locations (as Spring resource locations, - * e.g. full classpath locations or any kind of URL) - * @return the GenericApplicationContext instance - * @see #loadContext(String...) - * @see #customizeBeanFactory(DefaultListableBeanFactory) - * @see #createBeanDefinitionReader(GenericApplicationContext) - */ - private ConfigurableApplicationContext createApplicationContext(String... locations) { - GenericApplicationContext context = new GenericApplicationContext(); - new XmlBeanDefinitionReader(context).loadBeanDefinitions(locations); - AnnotationConfigUtils.registerAnnotationConfigProcessors(context); - context.refresh(); - return context; - } - - /** - * Subclasses can override this method to return the locations of their - * config files. - *

A plain path will be treated as class path location, e.g.: - * "org/springframework/whatever/foo.xml". Note however that you may prefix - * path locations with standard Spring resource prefixes. Therefore, a - * config location path prefixed with "classpath:" with behave the same as a - * plain path, but a config location such as - * "file:/some/path/path/location/appContext.xml" will be treated as a - * filesystem location. - *

The default implementation builds config locations for the config paths - * specified through {@link #getConfigPaths()}. - * @return an array of config locations - * @see #getConfigPaths() - * @see org.springframework.core.io.ResourceLoader#getResource(String) - */ - protected final String[] getConfigLocations() { - String[] paths = getConfigPaths(); - String[] convertedPaths = new String[paths.length]; - for (int i = 0; i < paths.length; i++) { - String path = paths[i]; - if (path.startsWith(SLASH)) { - convertedPaths[i] = ResourceUtils.CLASSPATH_URL_PREFIX + path; - } - else if (!ResourcePatternUtils.isUrl(path)) { - convertedPaths[i] = ResourceUtils.CLASSPATH_URL_PREFIX + SLASH - + StringUtils.cleanPath(ClassUtils.classPackageAsResourcePath(getClass()) + SLASH + path); - } - else { - convertedPaths[i] = StringUtils.cleanPath(path); - } - } - return convertedPaths; - } - - /** - * Subclasses must override this method to return paths to their config - * files, relative to the concrete test class. - *

A plain path, e.g. "context.xml", will be loaded as classpath resource - * from the same package that the concrete test class is defined in. A path - * starting with a slash is treated as fully qualified class path location, - * e.g.: "/org/springframework/whatever/foo.xml". - *

The default implementation returns an empty array. - * @return an array of config locations - * @see java.lang.Class#getResource(String) - */ - protected abstract String[] getConfigPaths(); - - /** - * Return the ApplicationContext that this base class manages; may be - * {@code null}. - */ - protected final ConfigurableApplicationContext getApplicationContext() { - // lazy load, in case setUp() has not yet been called. - if (this.applicationContext == null) { - try { - this.applicationContext = getContext(getConfigLocations()); - } - catch (Exception e) { - // log and continue... - if (this.logger.isDebugEnabled()) { - this.logger.debug("Caught exception while retrieving the ApplicationContext for test [" + - getClass().getName() + "." + getName() + "].", e); - } - } - } - - return this.applicationContext; - } - -} diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractSpringContextTests.java deleted file mode 100644 index d6eefe161d9..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/AbstractSpringContextTests.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2002-2016 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test; - -import java.util.HashMap; -import java.util.Map; - -import junit.framework.TestCase; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.util.Assert; -import org.springframework.util.ObjectUtils; - -/** - * This class is only used within tests in the spring-orm module. - * - *

Superclass for JUnit 3.8 test cases using Spring - * {@link org.springframework.context.ApplicationContext ApplicationContexts}. - * - *

Maintains a static cache of contexts by key. This has significant performance - * benefit if initializing the context would take time. While initializing a - * Spring context itself is very quick, some beans in a context, such as a - * LocalSessionFactoryBean for working with Hibernate, may take some time to - * initialize. Hence it often makes sense to do that initializing once. - * - *

Any ApplicationContext created by this class will be asked to register a JVM - * shutdown hook for itself. Unless the context gets closed early, all context - * instances will be automatically closed on JVM shutdown. This allows for - * freeing external resources held by beans within the context, e.g. temporary - * files. - * - * @author Rod Johnson - * @author Juergen Hoeller - * @author Sam Brannen - * @since 1.1.1 - * @see AbstractSingleSpringContextTests - * @see AbstractDependencyInjectionSpringContextTests - * @see AbstractTransactionalSpringContextTests - * @see AbstractTransactionalDataSourceSpringContextTests - * @deprecated as of Spring 3.0, in favor of using the listener-based test context framework - * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) - */ -@Deprecated -abstract class AbstractSpringContextTests extends TestCase { - - protected final Log logger = LogFactory.getLog(getClass()); - - private static Map contextKeyToContextMap = - new HashMap<>(); - - - /** - * Explicitly add an ApplicationContext instance under a given key. - *

This is not meant to be used by subclasses. It is rather exposed for - * special test suite environments. - * @param locations the context key - * @param context the ApplicationContext instance - */ - public final void addContext(String[] locations, ConfigurableApplicationContext context) { - Assert.notNull(context, "ApplicationContext must not be null"); - contextKeyToContextMap.put(contextKey(locations), context); - } - - /** - * Obtain an ApplicationContext for the given key, potentially cached. - * @param locations the context key; may be {@code null}. - * @return the corresponding ApplicationContext instance (potentially cached), - * or {@code null} if the provided {@code key} is empty - */ - protected final ConfigurableApplicationContext getContext(String... locations) throws Exception { - if (ObjectUtils.isEmpty(locations)) { - return null; - } - String key = contextKey(locations); - ConfigurableApplicationContext ctx = contextKeyToContextMap.get(key); - if (ctx == null) { - ctx = loadContext(locations); - ctx.registerShutdownHook(); - contextKeyToContextMap.put(key, ctx); - } - return ctx; - } - - private final String contextKey(String... locations) { - return ObjectUtils.nullSafeToString(locations); - } - - /** - * Load a new ApplicationContext for the given key. - *

To be implemented by subclasses. - * @param key the context key - * @return the corresponding ApplicationContext instance (new) - */ - protected abstract ConfigurableApplicationContext loadContext(String... locations) throws Exception; - -} diff --git a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalSpringContextTests.java b/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalSpringContextTests.java deleted file mode 100644 index 11d0722deb4..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/AbstractTransactionalSpringContextTests.java +++ /dev/null @@ -1,484 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test; - -import java.lang.reflect.Method; -import java.lang.reflect.Modifier; -import javax.sql.DataSource; - -import org.springframework.core.io.Resource; -import org.springframework.dao.DataAccessException; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionException; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.annotation.AnnotationTransactionAttributeSource; -import org.springframework.transaction.interceptor.TransactionAttributeSource; -import org.springframework.transaction.support.DefaultTransactionDefinition; - -/** - * This class is only used within tests in the spring-orm module. - * - *

Convenient base class for JUnit 3.8 based tests that should occur in a - * transaction, but normally will roll the transaction back on the completion of - * each test. - * - *

This is useful in a range of circumstances, allowing the following benefits: - *

    - *
  • Ability to delete or insert any data in the database, without affecting - * other tests - *
  • Providing a transactional context for any code requiring a transaction - *
  • Ability to write anything to the database without any need to clean up. - *
- * - *

This class is typically very fast, compared to traditional setup/teardown - * scripts. - * - *

If data should be left in the database, call the {@link #setComplete()} - * method in each test. The {@link #setDefaultRollback "defaultRollback"} - * property, which defaults to "true", determines whether transactions will - * complete by default. - * - *

It is even possible to end the transaction early; for example, to verify lazy - * loading behavior of an O/R mapping tool. (This is a valuable away to avoid - * unexpected errors when testing a web UI, for example.) Simply call the - * {@link #endTransaction()} method. Execution will then occur without a - * transactional context. - * - *

The {@link #startNewTransaction()} method may be called after a call to - * {@link #endTransaction()} if you wish to create a new transaction, quite - * independent of the old transaction. The new transaction's default fate will - * be to roll back, unless {@link #setComplete()} is called again during the - * scope of the new transaction. Any number of transactions may be created and - * ended in this way. The final transaction will automatically be rolled back - * when the test case is torn down. - * - *

Transactional behavior requires a single bean in the context implementing the - * {@link PlatformTransactionManager} interface. This will be set by the - * superclass's Dependency Injection mechanism. If using the superclass's Field - * Injection mechanism, the implementation should be named "transactionManager". - * This mechanism allows the use of the - * {@link AbstractDependencyInjectionSpringContextTests} superclass even when - * there is more than one transaction manager in the context. - * - *

This base class can also be used without transaction management, if no - * PlatformTransactionManager bean is found in the context provided. Be - * careful about using this mode, as it allows the potential to permanently - * modify data. This mode is available only if dependency checking is turned off - * in the {@link AbstractDependencyInjectionSpringContextTests} superclass. The - * non-transactional capability is provided to enable use of the same subclass - * in different environments. - * - *

Adds some convenience functionality for JDBC access. Expects a - * {@link javax.sql.DataSource} bean to be defined in the Spring application - * context. - * - *

This class exposes a {@link org.springframework.jdbc.core.JdbcTemplate} - * and provides an easy way to delete from the database in a new transaction. - * - *

Test methods can be annotated with the regular Spring - * {@link org.springframework.transaction.annotation.Transactional @Transactional} - * annotation — for example, to force execution in a read-only transaction - * or to prevent any transaction from being created at all by setting the propagation - * level to {@code NOT_SUPPORTED}. - * - * @author Rod Johnson - * @author Juergen Hoeller - * @author Thomas Risberg - * @author Sam Brannen - * @since 1.1.1 - * @deprecated as of Spring 3.0, in favor of using the listener-based test context framework - * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) - */ -@Deprecated -public abstract class AbstractTransactionalSpringContextTests extends AbstractDependencyInjectionSpringContextTests { - - /** The transaction manager to use */ - protected PlatformTransactionManager transactionManager; - - /** Should we roll back by default? */ - private boolean defaultRollback = true; - - /** Should we commit the current transaction? */ - private boolean complete = false; - - /** Number of transactions started */ - private int transactionsStarted = 0; - - /** - * Transaction definition used by this test class: by default, a plain - * DefaultTransactionDefinition. Subclasses can change this to cause - * different behavior. - */ - protected TransactionDefinition transactionDefinition = new DefaultTransactionDefinition(); - - private final TransactionAttributeSource transactionAttributeSource = new AnnotationTransactionAttributeSource(); - - /** - * TransactionStatus for this test. Typical subclasses won't need to use it. - */ - protected TransactionStatus transactionStatus; - - protected JdbcTemplate jdbcTemplate; - - /** - * Did this test delete any tables? If so, we forbid transaction completion, - * and only allow rollback. - */ - private boolean zappedTables; - - - /** - * Setter: DataSource is provided by Dependency Injection. - */ - public void setDataSource(DataSource dataSource) { - this.jdbcTemplate = new JdbcTemplate(dataSource); - } - - /** - * Specify the transaction manager to use. No transaction management will be - * available if this is not set. Populated through dependency injection by - * the superclass. - *

- * This mode works only if dependency checking is turned off in the - * {@link AbstractDependencyInjectionSpringContextTests} superclass. - */ - public void setTransactionManager(PlatformTransactionManager transactionManager) { - this.transactionManager = transactionManager; - } - - /** - * Subclasses can set this value in their constructor to change the default, - * which is always to roll the transaction back. - */ - protected void setDefaultRollback(final boolean defaultRollback) { - this.defaultRollback = defaultRollback; - } - - /** - * Get the default rollback flag for this test. - * @see #setDefaultRollback(boolean) - * @return The default rollback flag. - */ - protected boolean isDefaultRollback() { - return this.defaultRollback; - } - - /** - * Determine whether or not to roll back transactions for the current test. - *

The default implementation simply delegates to {@link #isDefaultRollback()}. - * Subclasses can override as necessary. - * @return the rollback flag for the current test - */ - protected boolean isRollback() { - boolean rollback = isDefaultRollback(); - if (this.logger.isDebugEnabled()) { - this.logger.debug("Using default rollback [" + rollback + "] for test [" + getName() + "]."); - } - return rollback; - } - - /** - * Call this method in an overridden {@link #runBare()} method to prevent - * transactional execution. - */ - protected void preventTransaction() { - this.transactionDefinition = null; - } - - /** - * Call this method in an overridden {@link #runBare()} method to override - * the transaction attributes that will be used, so that {@link #setUp()} - * and {@link #tearDown()} behavior is modified. - * @param customDefinition the custom transaction definition - */ - protected void setTransactionDefinition(TransactionDefinition customDefinition) { - this.transactionDefinition = customDefinition; - } - - /** - * This implementation creates a transaction before test execution. - *

Override {@link #onSetUpBeforeTransaction()} and/or - * {@link #onSetUpInTransaction()} to add custom set-up behavior for - * transactional execution. Alternatively, override this method for general - * set-up behavior, calling {@code super.onSetUp()} as part of your - * method implementation. - * @throws Exception simply let any exception propagate - * @see #onTearDown() - */ - @Override - protected void onSetUp() throws Exception { - this.complete = !this.isRollback(); - - if (this.transactionManager == null) { - this.logger.info("No transaction manager set: test will NOT run within a transaction"); - } - else if (this.transactionDefinition == null) { - this.logger.info("No transaction definition set: test will NOT run within a transaction"); - } - else { - onSetUpBeforeTransaction(); - startNewTransaction(); - try { - onSetUpInTransaction(); - } - catch (final Exception ex) { - endTransaction(); - throw ex; - } - } - } - - /** - * Subclasses can override this method to perform any setup operations, such - * as populating a database table, before the transaction created by - * this class. Only invoked if there is a transaction: that is, if - * {@link #preventTransaction()} has not been invoked in an overridden - * {@link #runTest()} method. - * @throws Exception simply let any exception propagate - */ - protected void onSetUpBeforeTransaction() throws Exception { - } - - /** - * Subclasses can override this method to perform any setup operations, such - * as populating a database table, within the transaction created by - * this class. - *

NB: Not called if there is no transaction management, due to no - * transaction manager being provided in the context. - *

If any {@link Throwable} is thrown, the transaction that has been started - * prior to the execution of this method will be - * {@link #endTransaction() ended} (or rather an attempt will be made to - * {@link #endTransaction() end it gracefully}); The offending - * {@link Throwable} will then be rethrown. - * @throws Exception simply let any exception propagate - */ - protected void onSetUpInTransaction() throws Exception { - } - - /** - * This implementation ends the transaction after test execution. - *

Override {@link #onTearDownInTransaction()} and/or - * {@link #onTearDownAfterTransaction()} to add custom tear-down behavior - * for transactional execution. Alternatively, override this method for - * general tear-down behavior, calling {@code super.onTearDown()} as - * part of your method implementation. - *

Note that {@link #onTearDownInTransaction()} will only be called if a - * transaction is still active at the time of the test shutdown. In - * particular, it will not be called if the transaction has been - * completed with an explicit {@link #endTransaction()} call before. - * @throws Exception simply let any exception propagate - * @see #onSetUp() - */ - @Override - protected void onTearDown() throws Exception { - // Call onTearDownInTransaction and end transaction if the transaction - // is still active. - if (this.transactionStatus != null && !this.transactionStatus.isCompleted()) { - try { - onTearDownInTransaction(); - } - finally { - endTransaction(); - } - } - - // Call onTearDownAfterTransaction if there was at least one - // transaction, even if it has been completed early through an - // endTransaction() call. - if (this.transactionsStarted > 0) { - onTearDownAfterTransaction(); - } - } - - /** - * Subclasses can override this method to run invariant tests here. The - * transaction is still active at this point, so any changes made in - * the transaction will still be visible. However, there is no need to clean - * up the database, as a rollback will follow automatically. - *

NB: Not called if there is no actual transaction, for example due - * to no transaction manager being provided in the application context. - * @throws Exception simply let any exception propagate - */ - protected void onTearDownInTransaction() throws Exception { - } - - /** - * Subclasses can override this method to perform cleanup after a - * transaction here. At this point, the transaction is not active anymore. - * @throws Exception simply let any exception propagate - */ - protected void onTearDownAfterTransaction() throws Exception { - } - - /** - * Overridden to populate transaction definition from annotations. - */ - @Override - public void runBare() throws Throwable { - final Method testMethod = getTestMethod(); - - TransactionDefinition explicitTransactionDefinition = this.transactionAttributeSource.getTransactionAttribute( - testMethod, getClass()); - if (explicitTransactionDefinition != null) { - this.logger.info("Custom transaction definition [" + explicitTransactionDefinition + "] for test method [" - + getName() + "]."); - setTransactionDefinition(explicitTransactionDefinition); - } - - if (this.transactionDefinition.getPropagationBehavior() == TransactionDefinition.PROPAGATION_NOT_SUPPORTED) { - preventTransaction(); - } - - super.runBare(); - } - - /** - * Get the current test method. - */ - protected Method getTestMethod() { - assertNotNull("TestCase.getName() cannot be null", getName()); - Method testMethod = null; - try { - // Use same algorithm as JUnit itself to retrieve the test method - // about to be executed (the method name is returned by getName). It - // has to be public so we can retrieve it. - testMethod = getClass().getMethod(getName(), (Class[]) null); - } - catch (NoSuchMethodException ex) { - fail("Method '" + getName() + "' not found"); - } - if (!Modifier.isPublic(testMethod.getModifiers())) { - fail("Method '" + getName() + "' should be public"); - } - return testMethod; - } - - /** - * Cause the transaction to commit for this test method, even if the test - * method is configured to {@link #isRollback() rollback}. - * @throws IllegalStateException if the operation cannot be set to complete - * as no transaction manager was provided - */ - protected void setComplete() { - if (this.transactionManager == null) { - throw new IllegalStateException("No transaction manager set"); - } - if (this.zappedTables) { - throw new IllegalStateException("Cannot set complete after deleting tables"); - } - this.complete = true; - } - - /** - * Immediately force a commit or rollback of the transaction, according to - * the {@code complete} and {@link #isRollback() rollback} flags. - *

Can be used to explicitly let the transaction end early, for example to - * check whether lazy associations of persistent objects work outside of a - * transaction (that is, have been initialized properly). - * @see #setComplete() - */ - protected void endTransaction() { - final boolean commit = this.complete || !isRollback(); - if (this.transactionStatus != null) { - try { - if (commit) { - this.transactionManager.commit(this.transactionStatus); - this.logger.debug("Committed transaction after execution of test [" + getName() + "]."); - } - else { - this.transactionManager.rollback(this.transactionStatus); - this.logger.debug("Rolled back transaction after execution of test [" + getName() + "]."); - } - } - finally { - this.transactionStatus = null; - } - } - } - - /** - * Start a new transaction. Only call this method if - * {@link #endTransaction()} has been called. {@link #setComplete()} can be - * used again in the new transaction. The fate of the new transaction, by - * default, will be the usual rollback. - * @throws TransactionException if starting the transaction failed - */ - protected void startNewTransaction() throws TransactionException { - if (this.transactionStatus != null) { - throw new IllegalStateException("Cannot start new transaction without ending existing transaction: " - + "Invoke endTransaction() before startNewTransaction()"); - } - if (this.transactionManager == null) { - throw new IllegalStateException("No transaction manager set"); - } - - this.transactionStatus = this.transactionManager.getTransaction(this.transactionDefinition); - ++this.transactionsStarted; - this.complete = !this.isRollback(); - - if (this.logger.isDebugEnabled()) { - this.logger.debug("Began transaction (" + this.transactionsStarted + "): transaction manager [" - + this.transactionManager + "]; rollback [" + this.isRollback() + "]."); - } - } - - /** - * Convenient method to delete all rows from these tables. - * Calling this method will make avoidance of rollback by calling - * {@code setComplete()} impossible. - * @see #setComplete - */ - 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 " + name); - } - } - this.zappedTables = true; - } - - /** - * Count the rows in the given table - * @param tableName table name to count rows in - * @return the number of rows in the table - */ - protected int countRowsInTable(String tableName) { - return this.jdbcTemplate.queryForObject("SELECT COUNT(0) FROM " + tableName, Integer.class); - } - - /** - * Execute the given SQL script. - *

Use with caution outside of a transaction! - *

The script will normally be loaded by classpath. - *

Do not use this method to execute DDL if you expect rollback. - * @param sqlResourcePath the Spring resource path for the SQL script - * @param continueOnError whether or not to continue without throwing an - * exception in the event of an error - * @throws DataAccessException if there is an error executing a statement - * @see ResourceDatabasePopulator - * @see #setSqlScriptEncoding - */ - protected void executeSqlScript(String sqlResourcePath, boolean continueOnError) throws DataAccessException { - Resource resource = this.applicationContext.getResource(sqlResourcePath); - new ResourceDatabasePopulator(continueOnError, false, null, resource).execute(jdbcTemplate.getDataSource()); - } - -} diff --git a/spring-orm/src/test/java/org/springframework/test/jpa/AbstractJpaTests.java b/spring-orm/src/test/java/org/springframework/test/jpa/AbstractJpaTests.java deleted file mode 100644 index a688b70a1f6..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/jpa/AbstractJpaTests.java +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright 2002-2016 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test.jpa; - -import java.lang.instrument.ClassFileTransformer; -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.EntityManagerFactory; - -import junit.framework.TestCase; - -import org.springframework.beans.BeanUtils; -import org.springframework.beans.BeansException; -import org.springframework.beans.factory.config.BeanPostProcessor; -import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessorAdapter; -import org.springframework.beans.factory.support.BeanDefinitionRegistry; -import org.springframework.beans.factory.support.DefaultListableBeanFactory; -import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.support.GenericApplicationContext; -import org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver; -import org.springframework.instrument.classloading.LoadTimeWeaver; -import org.springframework.instrument.classloading.ResourceOverridingShadowingClassLoader; -import org.springframework.instrument.classloading.ShadowingClassLoader; -import org.springframework.orm.jpa.ExtendedEntityManagerCreator; -import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; -import org.springframework.orm.jpa.SharedEntityManagerCreator; -import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; -import org.springframework.test.AbstractTransactionalSpringContextTests; -import org.springframework.util.ReflectionUtils; -import org.springframework.util.StringUtils; - -/** - * This class is only used within tests in the spring-orm module. - * - *

Convenient support class for JPA-related tests. Offers the same contract as - * AbstractTransactionalDataSourceSpringContextTests and equally good performance, - * even when performing the instrumentation required by the JPA specification. - * - *

Exposes an EntityManagerFactory and a shared EntityManager. - * Requires an EntityManagerFactory to be injected, plus the DataSource and - * JpaTransactionManager through the superclass. - * - *

When using Xerces, make sure a post 2.0.2 version is available on the classpath - * to avoid a critical - * bug - * that leads to StackOverflow. Maven users are likely to encounter this problem since - * 2.0.2 is used by default. - * - *

A workaround is to explicitly specify the Xerces version inside the Maven POM: - *

- * <dependency>
- *   <groupId>xerces</groupId>
- *     <artifactId>xercesImpl</artifactId>
- *   <version>2.8.1</version>
- * </dependency>
- * 
- * - * @author Rod Johnson - * @author Rob Harrop - * @author Juergen Hoeller - * @since 2.0 - * @deprecated as of Spring 3.0, in favor of using the listener-based test context framework - * ({@link org.springframework.test.context.junit38.AbstractJUnit38SpringContextTests}) - */ -@Deprecated -public abstract class AbstractJpaTests extends AbstractTransactionalSpringContextTests { - - private static final String DEFAULT_ORM_XML_LOCATION = "META-INF/orm.xml"; - - /** - * Map from String defining unique combination of config locations, to ApplicationContext. - * Values are intentionally not strongly typed, to avoid potential class cast exceptions - * through use between different class loaders. - */ - private static Map contextCache = new HashMap<>(); - - private static Map classLoaderCache = new HashMap<>(); - - protected EntityManagerFactory entityManagerFactory; - - /** - * If this instance is in a shadow loader, this variable - * will contain the parent instance of the subclass. - * The class will not be the same as the class of the - * shadow instance, as it was loaded by a different class loader, - * but it can be invoked reflectively. The shadowParent - * and the shadow loader can communicate reflectively - * but not through direct invocation. - */ - private Object shadowParent; - - /** - * Subclasses can use this in test cases. - * It will participate in any current transaction. - */ - protected EntityManager sharedEntityManager; - - - public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) { - this.entityManagerFactory = entityManagerFactory; - this.sharedEntityManager = SharedEntityManagerCreator.createSharedEntityManager(this.entityManagerFactory); - } - - /** - * Create an EntityManager that will always automatically enlist itself in current - * transactions, in contrast to an EntityManager returned by - * {@code EntityManagerFactory.createEntityManager()} - * (which requires an explicit {@code joinTransaction()} call). - */ - protected EntityManager createContainerManagedEntityManager() { - return ExtendedEntityManagerCreator.createContainerManagedEntityManager(this.entityManagerFactory); - } - - /** - * Subclasses should override this method if they wish to disable shadow class loading. - *

The default implementation deactivates shadow class loading if Spring's - * InstrumentationSavingAgent has been configured on VM startup. - */ - protected boolean shouldUseShadowLoader() { - return !InstrumentationLoadTimeWeaver.isInstrumentationAvailable(); - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public void runBare() throws Throwable { - if (!shouldUseShadowLoader()) { - super.runBare(); - return; - } - - String combinationOfContextLocationsForThisTestClass = cacheKeys(); - ClassLoader classLoaderForThisTestClass = getClass().getClassLoader(); - // save the TCCL - ClassLoader initialClassLoader = Thread.currentThread().getContextClassLoader(); - - if (this.shadowParent != null) { - Thread.currentThread().setContextClassLoader(classLoaderForThisTestClass); - super.runBare(); - } - - else { - ShadowingClassLoader shadowingClassLoader = (ShadowingClassLoader) classLoaderCache.get(combinationOfContextLocationsForThisTestClass); - - if (shadowingClassLoader == null) { - shadowingClassLoader = (ShadowingClassLoader) createShadowingClassLoader(classLoaderForThisTestClass); - classLoaderCache.put(combinationOfContextLocationsForThisTestClass, shadowingClassLoader); - } - try { - Thread.currentThread().setContextClassLoader(shadowingClassLoader); - String[] configLocations = getConfigLocations(); - - // Do not strongly type, to avoid ClassCastException. - Object cachedContext = contextCache.get(combinationOfContextLocationsForThisTestClass); - - if (cachedContext == null) { - - // Create the LoadTimeWeaver. - Class shadowingLoadTimeWeaverClass = shadowingClassLoader.loadClass(ShadowingLoadTimeWeaver.class.getName()); - Constructor constructor = shadowingLoadTimeWeaverClass.getConstructor(ClassLoader.class); - constructor.setAccessible(true); - Object ltw = constructor.newInstance(shadowingClassLoader); - - // Create the BeanFactory. - Class beanFactoryClass = shadowingClassLoader.loadClass(DefaultListableBeanFactory.class.getName()); - Object beanFactory = BeanUtils.instantiateClass(beanFactoryClass); - - // Create the BeanDefinitionReader. - Class beanDefinitionReaderClass = shadowingClassLoader.loadClass(XmlBeanDefinitionReader.class.getName()); - Class beanDefinitionRegistryClass = shadowingClassLoader.loadClass(BeanDefinitionRegistry.class.getName()); - Object reader = beanDefinitionReaderClass.getConstructor(beanDefinitionRegistryClass).newInstance(beanFactory); - - // Load the bean definitions into the BeanFactory. - Method loadBeanDefinitions = beanDefinitionReaderClass.getMethod("loadBeanDefinitions", String[].class); - loadBeanDefinitions.invoke(reader, new Object[] {configLocations}); - - // Create LoadTimeWeaver-injecting BeanPostProcessor. - Class loadTimeWeaverInjectingBeanPostProcessorClass = shadowingClassLoader.loadClass(LoadTimeWeaverInjectingBeanPostProcessor.class.getName()); - Class loadTimeWeaverClass = shadowingClassLoader.loadClass(LoadTimeWeaver.class.getName()); - Constructor bppConstructor = loadTimeWeaverInjectingBeanPostProcessorClass.getConstructor(loadTimeWeaverClass); - bppConstructor.setAccessible(true); - Object beanPostProcessor = bppConstructor.newInstance(ltw); - - // Add LoadTimeWeaver-injecting BeanPostProcessor. - Class beanPostProcessorClass = shadowingClassLoader.loadClass(BeanPostProcessor.class.getName()); - Method addBeanPostProcessor = beanFactoryClass.getMethod("addBeanPostProcessor", beanPostProcessorClass); - addBeanPostProcessor.invoke(beanFactory, beanPostProcessor); - - // Create the GenericApplicationContext. - Class genericApplicationContextClass = shadowingClassLoader.loadClass(GenericApplicationContext.class.getName()); - Class defaultListableBeanFactoryClass = shadowingClassLoader.loadClass(DefaultListableBeanFactory.class.getName()); - cachedContext = genericApplicationContextClass.getConstructor(defaultListableBeanFactoryClass).newInstance(beanFactory); - - // Invoke the context's "refresh" method. - genericApplicationContextClass.getMethod("refresh").invoke(cachedContext); - - // Store the context reference in the cache. - contextCache.put(combinationOfContextLocationsForThisTestClass, cachedContext); - } - // create the shadowed test - Class shadowedTestClass = shadowingClassLoader.loadClass(getClass().getName()); - - // So long as JUnit is excluded from shadowing we - // can minimize reflective invocation here - TestCase shadowedTestCase = (TestCase) BeanUtils.instantiateClass(shadowedTestClass); - - /* shadowParent = this */ - Class thisShadowedClass = shadowingClassLoader.loadClass(AbstractJpaTests.class.getName()); - Field shadowed = thisShadowedClass.getDeclaredField("shadowParent"); - shadowed.setAccessible(true); - shadowed.set(shadowedTestCase, this); - - /* AbstractSpringContextTests.addContext(Object, ApplicationContext) */ - Class applicationContextClass = shadowingClassLoader.loadClass(ConfigurableApplicationContext.class.getName()); - Method addContextMethod = shadowedTestClass.getMethod("addContext", String[].class, applicationContextClass); - ReflectionUtils.makeAccessible(addContextMethod); - addContextMethod.invoke(shadowedTestCase, configLocations, cachedContext); - - // Invoke tests on shadowed test case - shadowedTestCase.setName(getName()); - shadowedTestCase.runBare(); - } - catch (InvocationTargetException ex) { - // Unwrap this for better exception reporting - // when running tests - throw ex.getTargetException(); - } - finally { - Thread.currentThread().setContextClassLoader(initialClassLoader); - } - } - } - - protected String cacheKeys() { - return StringUtils.arrayToCommaDelimitedString(getConfigLocations()); - } - - /** - * NB: This method must not have a return type of ShadowingClassLoader as that would cause that - * class to be loaded eagerly when this test case loads, creating verify errors at runtime. - */ - protected ClassLoader createShadowingClassLoader(ClassLoader classLoader) { - OrmXmlOverridingShadowingClassLoader orxl = new OrmXmlOverridingShadowingClassLoader(classLoader, - getActualOrmXmlLocation()); - customizeResourceOverridingShadowingClassLoader(orxl); - return orxl; - } - - /** - * Customize the shadowing class loader. - * @param shadowingClassLoader this parameter is actually of type - * ResourceOverridingShadowingClassLoader, and can safely to be cast to - * that type. However, the signature must not be of that type as that - * would cause the present class loader to load that type. - */ - protected void customizeResourceOverridingShadowingClassLoader(ClassLoader shadowingClassLoader) { - // empty - } - - /** - * Subclasses can override this to return the real location path for - * orm.xml or null if they do not wish to find any orm.xml - * @return orm.xml path or null to hide any such file - */ - protected String getActualOrmXmlLocation() { - return DEFAULT_ORM_XML_LOCATION; - } - - - private static class LoadTimeWeaverInjectingBeanPostProcessor extends InstantiationAwareBeanPostProcessorAdapter { - - private final LoadTimeWeaver ltw; - - @SuppressWarnings("unused") - public LoadTimeWeaverInjectingBeanPostProcessor(LoadTimeWeaver ltw) { - this.ltw = ltw; - } - - @Override - public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { - if (bean instanceof LocalContainerEntityManagerFactoryBean) { - ((LocalContainerEntityManagerFactoryBean) bean).setLoadTimeWeaver(this.ltw); - } - if (bean instanceof DefaultPersistenceUnitManager) { - ((DefaultPersistenceUnitManager) bean).setLoadTimeWeaver(this.ltw); - } - return bean; - } - } - - - private static class ShadowingLoadTimeWeaver implements LoadTimeWeaver { - - private final ClassLoader shadowingClassLoader; - - @SuppressWarnings("unused") - public ShadowingLoadTimeWeaver(ClassLoader shadowingClassLoader) { - this.shadowingClassLoader = shadowingClassLoader; - } - - @Override - public void addTransformer(ClassFileTransformer transformer) { - try { - Method addClassFileTransformer = - this.shadowingClassLoader.getClass().getMethod("addTransformer", ClassFileTransformer.class); - addClassFileTransformer.setAccessible(true); - addClassFileTransformer.invoke(this.shadowingClassLoader, transformer); - } - catch (Exception ex) { - throw new RuntimeException(ex); - } - } - - @Override - public ClassLoader getInstrumentableClassLoader() { - return this.shadowingClassLoader; - } - - @Override - public ClassLoader getThrowawayClassLoader() { - // Be sure to copy the same resource overrides and same class file transformers: - // We want the throwaway class loader to behave like the instrumentable class loader. - ResourceOverridingShadowingClassLoader roscl = - new ResourceOverridingShadowingClassLoader(getClass().getClassLoader()); - if (this.shadowingClassLoader instanceof ShadowingClassLoader) { - roscl.copyTransformers((ShadowingClassLoader) this.shadowingClassLoader); - } - if (this.shadowingClassLoader instanceof ResourceOverridingShadowingClassLoader) { - roscl.copyOverrides((ResourceOverridingShadowingClassLoader) this.shadowingClassLoader); - } - return roscl; - } - } - -} diff --git a/spring-orm/src/test/java/org/springframework/test/jpa/OrmXmlOverridingShadowingClassLoader.java b/spring-orm/src/test/java/org/springframework/test/jpa/OrmXmlOverridingShadowingClassLoader.java deleted file mode 100644 index 9cf1ded10a8..00000000000 --- a/spring-orm/src/test/java/org/springframework/test/jpa/OrmXmlOverridingShadowingClassLoader.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2002-2012 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. - * You may obtain a copy of the License at - * - * http://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.springframework.test.jpa; - -import org.springframework.instrument.classloading.ResourceOverridingShadowingClassLoader; - -/** - * Subclass of ShadowingClassLoader that overrides attempts to - * locate {@code orm.xml}. - * - *

This class must not be an inner class of AbstractJpaTests - * to avoid it being loaded until first used. - * - * @author Rod Johnson - * @author Adrian Colyer - * @author Juergen Hoeller - * @since 2.0 - */ -class OrmXmlOverridingShadowingClassLoader extends ResourceOverridingShadowingClassLoader { - - /** - * Default location of the {@code orm.xml} file in the class path: - * "META-INF/orm.xml" - */ - public static final String DEFAULT_ORM_XML_LOCATION = "META-INF/orm.xml"; - - - public OrmXmlOverridingShadowingClassLoader(ClassLoader loader, String realOrmXmlLocation) { - super(loader); - - // Automatically exclude classes from these well-known persistence providers. - // Do NOT exclude Hibernate classes -- - // this causes class casts due to use of CGLIB by Hibernate. - // Same goes for OpenJPA which will not enhance the domain classes. - excludePackage("oracle.toplink.essentials"); - excludePackage("junit"); - - override(DEFAULT_ORM_XML_LOCATION, realOrmXmlLocation); - } - -} diff --git a/spring-orm/src/test/resources/org/springframework/beans/factory/xml/child.xml b/spring-orm/src/test/resources/org/springframework/beans/factory/xml/child.xml deleted file mode 100644 index 44ca56ef3ad..00000000000 --- a/spring-orm/src/test/resources/org/springframework/beans/factory/xml/child.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - override - - - - - override - - - - - override - - - - - prototypeOverridesInheritedSingleton - - - - - prototype-override - - - - - prototype-override - - - - - overrideParentBean - - - - - - - myname - - - - - diff --git a/spring-orm/src/test/resources/org/springframework/beans/factory/xml/test.xml b/spring-orm/src/test/resources/org/springframework/beans/factory/xml/test.xml deleted file mode 100644 index 71faa7e27e5..00000000000 --- a/spring-orm/src/test/resources/org/springframework/beans/factory/xml/test.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - I have no properties and I'm happy without them. - - - - - - aliased - - - - - - - - aliased - - - - - - aliased - - - - - - - - - - - - - - Rod - 31 - - - - - - Roderick - - - - - Kerry - 34 - - - - - - Kathy - 28 - - - - - typeMismatch - 34x - - - - - - - - true - - - - true - - - - - - - - false - - - - - - - - - - - - - - - - - - - - - - - listenerVeto - 66 - - - - - - this is a ]]> - - - diff --git a/spring-orm/src/test/resources/org/springframework/orm/hibernate3/filterDefinitions.xml b/spring-orm/src/test/resources/org/springframework/orm/hibernate3/filterDefinitions.xml deleted file mode 100644 index 96b19990ac4..00000000000 --- a/spring-orm/src/test/resources/org/springframework/orm/hibernate3/filterDefinitions.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - string - long - - - - - - - - integer - - - - - - - - diff --git a/spring-orm/src/test/resources/org/springframework/orm/hibernate3/typeDefinitions.xml b/spring-orm/src/test/resources/org/springframework/orm/hibernate3/typeDefinitions.xml deleted file mode 100644 index bd12f319b7f..00000000000 --- a/spring-orm/src/test/resources/org/springframework/orm/hibernate3/typeDefinitions.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - value1 - othervalue - - - - - - - - - myvalue - - - - - - - - diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/eclipselink/eclipselink-manager.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/eclipselink/eclipselink-manager.xml index a2e4f06ab81..ecc5a2b6747 100644 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/eclipselink/eclipselink-manager.xml +++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/eclipselink/eclipselink-manager.xml @@ -17,6 +17,11 @@ + + + false + + diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml index 8d49befa0de..0f626d29547 100644 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml +++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager-multi.xml @@ -1,7 +1,11 @@ - + - + diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager.xml index ea7ce16c84b..53870603f79 100644 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager.xml +++ b/spring-orm/src/test/resources/org/springframework/orm/jpa/hibernate/hibernate-manager.xml @@ -1,13 +1,7 @@ - + - - - + @@ -22,7 +16,6 @@ org.hibernate.cache.HashtableCacheProvider - diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager-aspectj-weaving.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager-aspectj-weaving.xml deleted file mode 100644 index 20206d0a57b..00000000000 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager-aspectj-weaving.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager.xml b/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager.xml deleted file mode 100644 index 2db5444076f..00000000000 --- a/spring-orm/src/test/resources/org/springframework/orm/jpa/openjpa/openjpa-manager.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/src/test/java/org/springframework/context/annotation/ltw/ComponentScanningWithLTWTests.java b/src/test/java/org/springframework/context/annotation/ltw/ComponentScanningWithLTWTests.java deleted file mode 100644 index f33b3a0a6aa..00000000000 --- a/src/test/java/org/springframework/context/annotation/ltw/ComponentScanningWithLTWTests.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2002-2015 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. - * You may obtain a copy of the License at - * - * http://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.springframework.context.annotation.ltw; - -/** - * Test to ensure that component scanning works with load-time weaver. - * See SPR-3873 for more details. - * - * @author Ramnivas Laddad - */ -@SuppressWarnings("deprecation") -public class ComponentScanningWithLTWTests extends org.springframework.test.jpa.AbstractJpaTests { - - { - setDependencyCheck(false); - } - - @Override - protected String[] getConfigPaths() { - return new String[] { "ComponentScanningWithLTWTests.xml" }; - } - - public void testLoading() { - // do nothing as successful loading is the test - } - -}