HHH-10907 - Fix connection leak problem in hibernate-core tests
This commit is contained in:
parent
2246e94ded
commit
da9c6e160d
|
@ -6,20 +6,14 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.jpa.test.cdi;
|
package org.hibernate.jpa.test.cdi;
|
||||||
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
|
||||||
import org.hibernate.HibernateException;
|
|
||||||
import org.hibernate.bytecode.spi.ByteCodeHelper;
|
|
||||||
|
|
||||||
import org.junit.Rule;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
import org.hibernate.testing.junit4.ClassLoadingIsolater;
|
import org.hibernate.testing.junit4.ClassLoadingIsolater;
|
||||||
import org.hibernate.testing.junit4.ExtraAssertions;
|
import org.junit.Rule;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
@ -71,7 +65,15 @@ public class NoCdiAvailableTest extends BaseUnitTestCase {
|
||||||
"org.hibernate.jpa.test.cdi.NoCdiAvailableTestDelegate"
|
"org.hibernate.jpa.test.cdi.NoCdiAvailableTestDelegate"
|
||||||
);
|
);
|
||||||
Method mainMethod = delegateClass.getMethod( "passingNoBeanManager" );
|
Method mainMethod = delegateClass.getMethod( "passingNoBeanManager" );
|
||||||
mainMethod.invoke( null );
|
EntityManagerFactory entityManagerFactory = null;
|
||||||
|
try {
|
||||||
|
entityManagerFactory = (EntityManagerFactory) mainMethod.invoke( null );
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
if (entityManagerFactory != null ) {
|
||||||
|
entityManagerFactory.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -80,12 +82,18 @@ public class NoCdiAvailableTest extends BaseUnitTestCase {
|
||||||
"org.hibernate.jpa.test.cdi.NoCdiAvailableTestDelegate"
|
"org.hibernate.jpa.test.cdi.NoCdiAvailableTestDelegate"
|
||||||
);
|
);
|
||||||
Method mainMethod = delegateClass.getMethod( "passingBeanManager" );
|
Method mainMethod = delegateClass.getMethod( "passingBeanManager" );
|
||||||
|
EntityManagerFactory entityManagerFactory = null;
|
||||||
try {
|
try {
|
||||||
mainMethod.invoke( null );
|
entityManagerFactory = (EntityManagerFactory) mainMethod.invoke( null );
|
||||||
fail( "Expecting failure from missing CDI classes" );
|
fail( "Expecting failure from missing CDI classes" );
|
||||||
}
|
}
|
||||||
catch (InvocationTargetException expected) {
|
catch (InvocationTargetException expected) {
|
||||||
// hard to assert specific exception types due to classloader trickery
|
// hard to assert specific exception types due to classloader trickery
|
||||||
}
|
}
|
||||||
|
finally {
|
||||||
|
if (entityManagerFactory != null ) {
|
||||||
|
entityManagerFactory.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ public class CollectionAsBasicTest extends BaseUnitTestCase {
|
||||||
public void testCollectionAsBasic() {
|
public void testCollectionAsBasic() {
|
||||||
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
|
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
|
||||||
try {
|
try {
|
||||||
Metadata metadata = new MetadataSources().addAnnotatedClass( Post.class )
|
Metadata metadata = new MetadataSources(ssr).addAnnotatedClass( Post.class )
|
||||||
.getMetadataBuilder().applyBasicType( new DelimitedStringsType() )
|
.getMetadataBuilder().applyBasicType( new DelimitedStringsType() )
|
||||||
.build();
|
.build();
|
||||||
PersistentClass postBinding = metadata.getEntityBinding( Post.class.getName() );
|
PersistentClass postBinding = metadata.getEntityBinding( Post.class.getName() );
|
||||||
|
|
|
@ -6,24 +6,34 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
|
package org.hibernate.test.annotations.collectionelement.deepcollectionelements;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.boot.registry.internal.StandardServiceRegistryImpl;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
|
||||||
import org.hibernate.testing.FailureExpected;
|
import org.hibernate.testing.FailureExpected;
|
||||||
import org.hibernate.testing.ServiceRegistryBuilder;
|
import org.hibernate.testing.ServiceRegistryBuilder;
|
||||||
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Emmanuel Bernard
|
* @author Emmanuel Bernard
|
||||||
*/
|
*/
|
||||||
@FailureExpected( jiraKey = "HHH-3157" )
|
@FailureExpected( jiraKey = "HHH-3157" )
|
||||||
public class DeepCollectionElementTest extends BaseUnitTestCase {
|
public class DeepCollectionElementTest extends BaseUnitTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInitialization() throws Exception {
|
public void testInitialization() throws Exception {
|
||||||
Configuration configuration = new Configuration();
|
Configuration configuration = new Configuration();
|
||||||
configuration.addAnnotatedClass( A.class );
|
configuration.addAnnotatedClass( A.class );
|
||||||
configuration.addAnnotatedClass( B.class );
|
configuration.addAnnotatedClass( B.class );
|
||||||
configuration.addAnnotatedClass( C.class );
|
configuration.addAnnotatedClass( C.class );
|
||||||
configuration.buildSessionFactory( ServiceRegistryBuilder.buildServiceRegistry( configuration.getProperties() ) ).close();
|
StandardServiceRegistryImpl serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( configuration.getProperties() );
|
||||||
|
try {
|
||||||
|
SessionFactory sessionFactory = configuration.buildSessionFactory( serviceRegistry );
|
||||||
|
sessionFactory.close();
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
serviceRegistry.destroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,11 +10,10 @@ import javax.transaction.SystemException;
|
||||||
|
|
||||||
import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper;
|
import org.hibernate.engine.transaction.internal.jta.JtaStatusHelper;
|
||||||
|
|
||||||
|
import org.hibernate.testing.AfterClassOnce;
|
||||||
import org.hibernate.testing.jdbc.leak.ConnectionLeakUtil;
|
import org.hibernate.testing.jdbc.leak.ConnectionLeakUtil;
|
||||||
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
|
import org.hibernate.testing.jta.TestingJtaPlatformImpl;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.AfterClass;
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
import org.junit.rules.TestRule;
|
import org.junit.rules.TestRule;
|
||||||
import org.junit.rules.Timeout;
|
import org.junit.rules.Timeout;
|
||||||
|
@ -34,21 +33,21 @@ public abstract class BaseUnitTestCase {
|
||||||
private static boolean enableConnectionLeakDetection = Boolean.TRUE.toString()
|
private static boolean enableConnectionLeakDetection = Boolean.TRUE.toString()
|
||||||
.equals( System.getenv( "HIBERNATE_CONNECTION_LEAK_DETECTION" ) );
|
.equals( System.getenv( "HIBERNATE_CONNECTION_LEAK_DETECTION" ) );
|
||||||
|
|
||||||
private static ConnectionLeakUtil connectionLeakUtil;
|
private ConnectionLeakUtil connectionLeakUtil;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public TestRule globalTimeout = new Timeout( 30 * 60 * 1000 ); // no test should run longer than 30 minutes
|
public TestRule globalTimeout = new Timeout( 30 * 60 * 1000 ); // no test should run longer than 30 minutes
|
||||||
|
|
||||||
@BeforeClass
|
public BaseUnitTestCase() {
|
||||||
public static void initConnectionLeakUtility() {
|
|
||||||
if ( enableConnectionLeakDetection ) {
|
if ( enableConnectionLeakDetection ) {
|
||||||
connectionLeakUtil = new ConnectionLeakUtil();
|
connectionLeakUtil = new ConnectionLeakUtil();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterClass
|
@AfterClassOnce
|
||||||
public static void assertNoLeaks() {
|
public void assertNoLeaks() {
|
||||||
if ( enableConnectionLeakDetection ) {
|
if ( enableConnectionLeakDetection ) {
|
||||||
|
log.info( "Assert no leaks!" );
|
||||||
connectionLeakUtil.assertNoLeaks();
|
connectionLeakUtil.assertNoLeaks();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue