Fix connection leaks by properly closing service registries

This commit is contained in:
Christian Beikov 2021-09-09 15:53:14 +02:00
parent 77c1370e45
commit 6314395edf
65 changed files with 1214 additions and 1073 deletions

View File

@ -763,7 +763,14 @@ public class Configuration {
public SessionFactory buildSessionFactory() throws HibernateException { public SessionFactory buildSessionFactory() throws HibernateException {
log.debug( "Building session factory using internal StandardServiceRegistryBuilder" ); log.debug( "Building session factory using internal StandardServiceRegistryBuilder" );
standardServiceRegistryBuilder.applySettings( properties ); standardServiceRegistryBuilder.applySettings( properties );
return buildSessionFactory( standardServiceRegistryBuilder.build() ); StandardServiceRegistry serviceRegistry = standardServiceRegistryBuilder.build();
try {
return buildSessionFactory( serviceRegistry );
}
catch (Throwable t) {
serviceRegistry.close();
throw t;
}
} }

View File

@ -223,80 +223,88 @@ public class EntityManagerFactoryBuilderImpl implements EntityManagerFactoryBuil
providedClassLoader, providedClassLoader,
providedClassLoaderService providedClassLoaderService
); );
try {
// merge configuration sources and build the "standard" service registry
final StandardServiceRegistryBuilder ssrBuilder = getStandardServiceRegistryBuilder( bsr );
// merge configuration sources and build the "standard" service registry final MergedSettings mergedSettings = mergeSettings( persistenceUnit, integrationSettings, ssrBuilder );
final StandardServiceRegistryBuilder ssrBuilder = getStandardServiceRegistryBuilder( bsr );
final MergedSettings mergedSettings = mergeSettings( persistenceUnit, integrationSettings, ssrBuilder ); // flush before completion validation
if ( "true".equals( mergedSettings.configurationValues.get( Environment.FLUSH_BEFORE_COMPLETION ) ) ) {
LOG.definingFlushBeforeCompletionIgnoredInHem( Environment.FLUSH_BEFORE_COMPLETION );
mergedSettings.configurationValues.put( Environment.FLUSH_BEFORE_COMPLETION, "false" );
}
// flush before completion validation // keep the merged config values for phase-2
if ( "true".equals( mergedSettings.configurationValues.get( Environment.FLUSH_BEFORE_COMPLETION ) ) ) { this.configurationValues = mergedSettings.getConfigurationValues();
LOG.definingFlushBeforeCompletionIgnoredInHem( Environment.FLUSH_BEFORE_COMPLETION );
mergedSettings.configurationValues.put( Environment.FLUSH_BEFORE_COMPLETION, "false" );
}
// keep the merged config values for phase-2 // Build the "standard" service registry
this.configurationValues = mergedSettings.getConfigurationValues(); ssrBuilder.applySettings( configurationValues );
// Build the "standard" service registry this.standardServiceRegistry = ssrBuilder.build();
ssrBuilder.applySettings( configurationValues );
this.standardServiceRegistry = ssrBuilder.build(); configureIdentifierGenerators( standardServiceRegistry );
configureIdentifierGenerators( standardServiceRegistry ); final MetadataSources metadataSources = new MetadataSources( bsr );
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder(
standardServiceRegistry );
List<ConverterDescriptor> attributeConverterDefinitions = applyMappingResources( metadataSources );
final MetadataSources metadataSources = new MetadataSources( bsr ); applyMetamodelBuilderSettings( mergedSettings, attributeConverterDefinitions );
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder( standardServiceRegistry );
List<ConverterDescriptor> attributeConverterDefinitions = applyMappingResources( metadataSources );
applyMetamodelBuilderSettings( mergedSettings, attributeConverterDefinitions ); applyMetadataBuilderContributor();
applyMetadataBuilderContributor(); // todo : would be nice to have MetadataBuilder still do the handling of CfgXmlAccessService here
// another option is to immediately handle them here (probably in mergeSettings?) as we encounter them...
// todo : would be nice to have MetadataBuilder still do the handling of CfgXmlAccessService here final CfgXmlAccessService cfgXmlAccessService = standardServiceRegistry.getService( CfgXmlAccessService.class );
// another option is to immediately handle them here (probably in mergeSettings?) as we encounter them... if ( cfgXmlAccessService.getAggregatedConfig() != null ) {
final CfgXmlAccessService cfgXmlAccessService = standardServiceRegistry.getService( CfgXmlAccessService.class ); if ( cfgXmlAccessService.getAggregatedConfig().getMappingReferences() != null ) {
if ( cfgXmlAccessService.getAggregatedConfig() != null ) { for ( MappingReference mappingReference : cfgXmlAccessService.getAggregatedConfig()
if ( cfgXmlAccessService.getAggregatedConfig().getMappingReferences() != null ) { .getMappingReferences() ) {
for ( MappingReference mappingReference : cfgXmlAccessService.getAggregatedConfig().getMappingReferences() ) { mappingReference.apply( metadataSources );
mappingReference.apply( metadataSources ); }
} }
} }
}
this.managedResources = MetadataBuildingProcess.prepare( this.managedResources = MetadataBuildingProcess.prepare(
metadataSources, metadataSources,
metamodelBuilder.getBootstrapContext() metamodelBuilder.getBootstrapContext()
);
final Object validatorFactory = configurationValues.get( org.hibernate.cfg.AvailableSettings.JPA_VALIDATION_FACTORY );
if ( validatorFactory == null ) {
withValidatorFactory( configurationValues.get( org.hibernate.cfg.AvailableSettings.JAKARTA_JPA_VALIDATION_FACTORY ) );
}
else {
withValidatorFactory( validatorFactory );
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// push back class transformation to the environment; for the time being this only has any effect in EE
// container situations, calling back into PersistenceUnitInfo#addClassTransformer
final boolean dirtyTrackingEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_DIRTY_TRACKING );
final boolean lazyInitializationEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_LAZY_INITIALIZATION );
final boolean associationManagementEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_ASSOCIATION_MANAGEMENT );
if ( dirtyTrackingEnabled || lazyInitializationEnabled || associationManagementEnabled ) {
EnhancementContext enhancementContext = getEnhancementContext(
dirtyTrackingEnabled,
lazyInitializationEnabled,
associationManagementEnabled
); );
persistenceUnit.pushClassTransformer( enhancementContext ); final Object validatorFactory = configurationValues.get( org.hibernate.cfg.AvailableSettings.JPA_VALIDATION_FACTORY );
} if ( validatorFactory == null ) {
withValidatorFactory( configurationValues.get( org.hibernate.cfg.AvailableSettings.JAKARTA_JPA_VALIDATION_FACTORY ) );
}
else {
withValidatorFactory( validatorFactory );
}
// for the time being we want to revoke access to the temp ClassLoader if one was passed // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
metamodelBuilder.applyTempClassLoader( null ); // push back class transformation to the environment; for the time being this only has any effect in EE
// container situations, calling back into PersistenceUnitInfo#addClassTransformer
final boolean dirtyTrackingEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_DIRTY_TRACKING );
final boolean lazyInitializationEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_LAZY_INITIALIZATION );
final boolean associationManagementEnabled = readBooleanConfigurationValue( AvailableSettings.ENHANCER_ENABLE_ASSOCIATION_MANAGEMENT );
if ( dirtyTrackingEnabled || lazyInitializationEnabled || associationManagementEnabled ) {
EnhancementContext enhancementContext = getEnhancementContext(
dirtyTrackingEnabled,
lazyInitializationEnabled,
associationManagementEnabled
);
persistenceUnit.pushClassTransformer( enhancementContext );
}
// for the time being we want to revoke access to the temp ClassLoader if one was passed
metamodelBuilder.applyTempClassLoader( null );
}
catch (Throwable t) {
bsr.close();
cleanup();
throw t;
}
} }
/** /**

View File

@ -37,17 +37,17 @@ public class ConfigurationTest {
Configuration cfg = new Configuration(); Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" ); cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf ); assertNotNull( sf );
Session s = sf.openSession(); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
Query q = s.createQuery( "from Boat" ); Query q = s.createQuery( "from Boat" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
q = s.createQuery( "from Plane" ); q = s.createQuery( "from Plane" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
@Test @Test
@ -93,24 +93,24 @@ public class ConfigurationTest {
cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" ); cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
cfg.addAnnotatedClass( Boat.class ); cfg.addAnnotatedClass( Boat.class );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf ); assertNotNull( sf );
Session s = sf.openSession(); Session s = sf.openSession();
s.getTransaction().begin(); s.getTransaction().begin();
Boat boat = new Boat(); Boat boat = new Boat();
boat.setSize( 12 ); boat.setSize( 12 );
boat.setWeight( 34 ); boat.setWeight( 34 );
s.persist( boat ); s.persist( boat );
s.getTransaction().commit(); s.getTransaction().commit();
s.clear(); s.clear();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
boat = (Boat) s.get( Boat.class, boat.getId() ); boat = (Boat) s.get( Boat.class, boat.getId() );
assertTrue( 34 != boat.getWeight(), "Annotation has precedence" ); assertTrue( 34 != boat.getWeight(), "Annotation has precedence" );
s.delete( boat ); s.delete( boat );
//s.getTransaction().commit(); //s.getTransaction().commit();
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
@Test @Test
@ -120,23 +120,23 @@ public class ConfigurationTest {
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( Configuration.ARTEFACT_PROCESSING_ORDER, "class, hbm" ); cfg.setProperty( Configuration.ARTEFACT_PROCESSING_ORDER, "class, hbm" );
cfg.addAnnotatedClass( Boat.class ); cfg.addAnnotatedClass( Boat.class );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf ); assertNotNull( sf );
Session s = sf.openSession(); Session s = sf.openSession();
s.getTransaction().begin(); s.getTransaction().begin();
Boat boat = new Boat(); Boat boat = new Boat();
boat.setSize( 12 ); boat.setSize( 12 );
boat.setWeight( 34 ); boat.setWeight( 34 );
s.persist( boat ); s.persist( boat );
s.getTransaction().commit(); s.getTransaction().commit();
s.clear(); s.clear();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
boat = (Boat) s.get( Boat.class, boat.getId() ); boat = (Boat) s.get( Boat.class, boat.getId() );
assertTrue( 34 == boat.getWeight(), "Annotation has precedence" ); assertTrue( 34 == boat.getWeight(), "Annotation has precedence" );
s.delete( boat ); s.delete( boat );
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
@Test @Test
@ -145,17 +145,17 @@ public class ConfigurationTest {
cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" ); cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" );
cfg.addClass( Ferry.class ); cfg.addClass( Ferry.class );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf ); assertNotNull( sf );
Session s = sf.openSession(); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
Query q = s.createQuery( "from Ferry" ); Query q = s.createQuery( "from Ferry" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
q = s.createQuery( "from Plane" ); q = s.createQuery( "from Plane" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
@Test @Test
@ -164,16 +164,16 @@ public class ConfigurationTest {
cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" ); cfg.configure( "org/hibernate/orm/test/annotations/hibernate.cfg.xml" );
cfg.addAnnotatedClass( Port.class ); cfg.addAnnotatedClass( Port.class );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf ); assertNotNull( sf );
Session s = sf.openSession(); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
Query q = s.createQuery( "from Boat" ); Query q = s.createQuery( "from Boat" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
q = s.createQuery( "from Port" ); q = s.createQuery( "from Port" );
assertEquals( 0, q.list().size() ); assertEquals( 0, q.list().size() );
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
} }

View File

@ -46,6 +46,7 @@ public class SafeMappingTest {
if ( serviceRegistry != null ) { if ( serviceRegistry != null ) {
ServiceRegistryBuilder.destroy( serviceRegistry ); ServiceRegistryBuilder.destroy( serviceRegistry );
} }
cfg.getStandardServiceRegistryBuilder().getBootstrapServiceRegistry().close();
} }
} }
} }

View File

@ -61,6 +61,7 @@ public class SecuredBindingTest {
if ( serviceRegistry != null ) { if ( serviceRegistry != null ) {
ServiceRegistryBuilder.destroy( serviceRegistry ); ServiceRegistryBuilder.destroy( serviceRegistry );
} }
ac.getStandardServiceRegistryBuilder().getBootstrapServiceRegistry().close();
} }
} }
} }

View File

@ -15,6 +15,8 @@ import org.jboss.logging.Logger;
import org.hibernate.MappingException; import org.hibernate.MappingException;
import org.hibernate.SessionFactory; import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.Environment; import org.hibernate.cfg.Environment;
import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistry;
@ -88,11 +90,11 @@ public class BackquoteTest {
@Test @Test
@TestForIssue(jiraKey = "HHH-4647") @TestForIssue(jiraKey = "HHH-4647")
public void testInvalidReferenceToQuotedTableName() { public void testInvalidReferenceToQuotedTableName() {
try { try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
Configuration config = new Configuration(); Configuration config = new Configuration( serviceRegistry );
config.addAnnotatedClass( Printer.class ); config.addAnnotatedClass( Printer.class );
config.addAnnotatedClass( PrinterCable.class ); config.addAnnotatedClass( PrinterCable.class );
sessionFactory = config.buildSessionFactory( serviceRegistry ); sessionFactory = config.buildSessionFactory( this.serviceRegistry );
fail( "expected MappingException to be thrown" ); fail( "expected MappingException to be thrown" );
} }
//we WANT MappingException to be thrown //we WANT MappingException to be thrown

View File

@ -8,6 +8,8 @@
//$Id$ //$Id$
package org.hibernate.orm.test.annotations.configuration; package org.hibernate.orm.test.annotations.configuration;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Configuration;
import org.junit.Assert; import org.junit.Assert;
@ -19,8 +21,8 @@ import org.junit.Test;
public class ConfigurationTest { public class ConfigurationTest {
@Test @Test
public void testMixPackageAndResourceOrdering() throws Exception { public void testMixPackageAndResourceOrdering() throws Exception {
try { try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
Configuration config = new Configuration(); Configuration config = new Configuration( serviceRegistry );
config.addResource( "org/hibernate/orm/test/annotations/configuration/orm.xml" ); config.addResource( "org/hibernate/orm/test/annotations/configuration/orm.xml" );
config.addPackage( "org.hibernate.orm/test.annotations.configuration" ); config.addPackage( "org.hibernate.orm/test.annotations.configuration" );
} }

View File

@ -2,6 +2,7 @@ package org.hibernate.orm.test.annotations.embeddables.collection;
import org.hibernate.AnnotationException; import org.hibernate.AnnotationException;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
@ -17,11 +18,8 @@ import static org.junit.Assert.fail;
public abstract class AbstractEmbeddableWithManyToManyTest { public abstract class AbstractEmbeddableWithManyToManyTest {
@Test @Test
public void test() { public void test() {
try { try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build();
BootstrapServiceRegistryBuilder bootstrapServiceRegistryBuilder = new BootstrapServiceRegistryBuilder(); StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( serviceRegistry ).build()) {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(
bootstrapServiceRegistryBuilder.build() );
StandardServiceRegistry ssr = ssrb.build();
MetadataSources metadataSources = new MetadataSources( ssr ); MetadataSources metadataSources = new MetadataSources( ssr );
addResources( metadataSources ); addResources( metadataSources );
addAnnotatedClasses(metadataSources); addAnnotatedClasses(metadataSources);

View File

@ -55,19 +55,19 @@ public class FetchProfileTest extends BaseUnitTestCase {
config.addAnnotatedClass( Order.class ); config.addAnnotatedClass( Order.class );
config.addAnnotatedClass( SupportTickets.class ); config.addAnnotatedClass( SupportTickets.class );
config.addAnnotatedClass( Country.class ); config.addAnnotatedClass( Country.class );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory( try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry serviceRegistry
); )) {
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "customer-with-orders" ) sessionImpl.containsFetchProfileDefinition( "customer-with-orders" )
); );
assertFalse( assertFalse(
"package info should not be parsed", "package info should not be parsed",
sessionImpl.containsFetchProfileDefinition( "package-profile-1" ) sessionImpl.containsFetchProfileDefinition( "package-profile-1" )
); );
sessionImpl.close(); }
} }
@Test @Test
@ -146,15 +146,15 @@ public class FetchProfileTest extends BaseUnitTestCase {
.getContextClassLoader() .getContextClassLoader()
.getResourceAsStream( "org/hibernate/orm/test/annotations/fetchprofile/mappings.hbm.xml" ); .getResourceAsStream( "org/hibernate/orm/test/annotations/fetchprofile/mappings.hbm.xml" );
config.addInputStream( is ); config.addInputStream( is );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory( try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry serviceRegistry
); )) {
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "orders-profile" ) sessionImpl.containsFetchProfileDefinition( "orders-profile" )
); );
sessionImpl.close(); }
// now the same with no xml // now the same with no xml
final MetadataSources metadataSources = new MetadataSources() final MetadataSources metadataSources = new MetadataSources()
@ -185,18 +185,18 @@ public class FetchProfileTest extends BaseUnitTestCase {
config.addAnnotatedClass( SupportTickets.class ); config.addAnnotatedClass( SupportTickets.class );
config.addAnnotatedClass( Country.class ); config.addAnnotatedClass( Country.class );
config.addPackage( Customer.class.getPackage().getName() ); config.addPackage( Customer.class.getPackage().getName() );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory( try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry serviceRegistry
); )) {
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "package-profile-1" ) sessionImpl.containsFetchProfileDefinition( "package-profile-1" )
); );
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "package-profile-2" ) sessionImpl.containsFetchProfileDefinition( "package-profile-2" )
); );
sessionImpl.close(); }
} }
} }

View File

@ -35,19 +35,19 @@ public class MappedByFetchProfileUnitTest extends BaseUnitTestCase {
Configuration config = new Configuration(); Configuration config = new Configuration();
config.addAnnotatedClass( Customer6.class ); config.addAnnotatedClass( Customer6.class );
config.addAnnotatedClass( Address.class ); config.addAnnotatedClass( Address.class );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory( try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry serviceRegistry
); )) {
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "address-with-customer" ) sessionImpl.containsFetchProfileDefinition( "address-with-customer" )
); );
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "customer-with-address" ) sessionImpl.containsFetchProfileDefinition( "customer-with-address" )
); );
sessionImpl.close(); }
} }
@Test @Test
@ -56,19 +56,19 @@ public class MappedByFetchProfileUnitTest extends BaseUnitTestCase {
config.addAnnotatedClass( Customer6.class ); config.addAnnotatedClass( Customer6.class );
config.addAnnotatedClass( Address.class ); config.addAnnotatedClass( Address.class );
config.addPackage( Address.class.getPackage().getName() ); config.addPackage( Address.class.getPackage().getName() );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory( try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry serviceRegistry
); )) {
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "mappedBy-package-profile-1" ) sessionImpl.containsFetchProfileDefinition( "mappedBy-package-profile-1" )
); );
assertTrue( assertTrue(
"fetch profile not parsed properly", "fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "mappedBy-package-profile-2" ) sessionImpl.containsFetchProfileDefinition( "mappedBy-package-profile-2" )
); );
sessionImpl.close(); }
} }
} }

View File

@ -18,6 +18,8 @@ import org.hibernate.annotations.JoinColumnOrFormula;
import org.hibernate.annotations.JoinFormula; import org.hibernate.annotations.JoinFormula;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.boot.registry.StandardServiceRegistry; import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
@ -50,15 +52,17 @@ public class JoinColumnOrFormulaTest extends BaseUnitTestCase {
@TestForIssue( jiraKey = "HHH-9897" ) @TestForIssue( jiraKey = "HHH-9897" )
@FailureExpected( jiraKey = "HHH-9897" ) @FailureExpected( jiraKey = "HHH-9897" )
public void testUseOfJoinColumnOrFormula() { public void testUseOfJoinColumnOrFormula() {
Metadata metadata = new MetadataSources() try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
.addAnnotatedClass( A.class ) Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( D.class ) .addAnnotatedClass( A.class )
.buildMetadata(); .addAnnotatedClass( D.class )
.buildMetadata();
// Binding to the mapping model works after the simple change for HHH-9897 // Binding to the mapping model works after the simple change for HHH-9897
// But building the SessionFactory fails in the collection persister trying to // But building the SessionFactory fails in the collection persister trying to
// use the formula (it expects Columns too) // use the formula (it expects Columns too)
metadata.buildSessionFactory().close(); metadata.buildSessionFactory().close();
}
} }
@Entity( name = "A" ) @Entity( name = "A" )

View File

@ -62,7 +62,7 @@ public class EntityInheritanceAttributeOverrideTest extends EntityManagerFactory
@Test @Test
public void test() { public void test() {
produceEntityManagerFactory(); produceEntityManagerFactory().close();
} }
@Entity(name = "AbstractEntity") @Entity(name = "AbstractEntity")

View File

@ -21,9 +21,7 @@ public class MappedSuperClassIdPropertyBasicAttributeOverrideTest {
@Test @Test
public void test() { public void test() {
try { try (StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder();
StandardServiceRegistry ssr = ssrb.build();
MetadataSources metadataSources = new MetadataSources( ssr ); MetadataSources metadataSources = new MetadataSources( ssr );
metadataSources.addAnnotatedClasses( MappedSuperClassWithUuidAsBasic.class ); metadataSources.addAnnotatedClasses( MappedSuperClassWithUuidAsBasic.class );

View File

@ -15,6 +15,8 @@ import org.hibernate.orm.test.internal.util.xml.XMLMappingHelper;
import org.hibernate.testing.boot.BootstrapContextImpl; import org.hibernate.testing.boot.BootstrapContextImpl;
import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import javax.persistence.*; import javax.persistence.*;
@ -29,19 +31,32 @@ import static org.junit.Assert.*;
*/ */
@TestForIssue(jiraKey = "HHH-14529") @TestForIssue(jiraKey = "HHH-14529")
public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase { public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
private BootstrapContextImpl bootstrapContext;
@Before
public void init() {
bootstrapContext = new BootstrapContextImpl();
}
@After
public void destroy() {
bootstrapContext.close();
}
@Test @Test
public void testMappedSuperclassAnnotations() throws Exception { public void testMappedSuperclassAnnotations() throws Exception {
XMLContext context = buildContext( XMLContext context = buildContext(
"org/hibernate/orm/test/annotations/reflection/metadata-complete.xml" "org/hibernate/orm/test/annotations/reflection/metadata-complete.xml"
); );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Organization.class, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Organization.class, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( MappedSuperclass.class ) ); assertTrue( reader.isAnnotationPresent( MappedSuperclass.class ) );
} }
@Test @Test
public void testEntityRelatedAnnotations() throws Exception { public void testEntityRelatedAnnotations() throws Exception {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Entity.class ) ); assertNotNull( reader.getAnnotation( Entity.class ) );
assertEquals( assertEquals(
"Default value in xml entity should not override @Entity.name", "JavaAdministration", "Default value in xml entity should not override @Entity.name", "JavaAdministration",
@ -75,7 +90,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
assertEquals( "wrong tble name", "tablehilo", reader.getAnnotation( TableGenerator.class ).table() ); assertEquals( "wrong tble name", "tablehilo", reader.getAnnotation( TableGenerator.class ).table() );
assertEquals( "no schema overriding", "myschema", reader.getAnnotation( TableGenerator.class ).schema() ); assertEquals( "no schema overriding", "myschema", reader.getAnnotation( TableGenerator.class ).schema() );
reader = new JPAXMLOverriddenAnnotationReader( Match.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( Match.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Table.class ) ); assertNotNull( reader.getAnnotation( Table.class ) );
assertEquals( assertEquals(
"Java annotation not taken into account", "matchtable", reader.getAnnotation( Table.class ).name() "Java annotation not taken into account", "matchtable", reader.getAnnotation( Table.class ).name()
@ -123,10 +138,10 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
assertNotNull( reader.getAnnotation( ExcludeSuperclassListeners.class ) ); assertNotNull( reader.getAnnotation( ExcludeSuperclassListeners.class ) );
assertNotNull( reader.getAnnotation( ExcludeDefaultListeners.class ) ); assertNotNull( reader.getAnnotation( ExcludeDefaultListeners.class ) );
reader = new JPAXMLOverriddenAnnotationReader( Competition.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( Competition.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( MappedSuperclass.class ) ); assertNotNull( reader.getAnnotation( MappedSuperclass.class ) );
reader = new JPAXMLOverriddenAnnotationReader( TennisMatch.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( TennisMatch.class, context, bootstrapContext );
assertNull( "Mutualize PKJC into PKJCs", reader.getAnnotation( PrimaryKeyJoinColumn.class ) ); assertNull( "Mutualize PKJC into PKJCs", reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) ); assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
assertEquals( assertEquals(
@ -153,7 +168,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
); );
reader = new JPAXMLOverriddenAnnotationReader( SocialSecurityPhysicalAccount.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( SocialSecurityPhysicalAccount.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( IdClass.class ) ); assertNotNull( reader.getAnnotation( IdClass.class ) );
assertEquals( "id-class not used", SocialSecurityNumber.class, reader.getAnnotation( IdClass.class ).value() ); assertEquals( "id-class not used", SocialSecurityNumber.class, reader.getAnnotation( IdClass.class ).value() );
assertEquals( assertEquals(
@ -174,7 +189,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
XMLContext context = buildContext( XMLContext context = buildContext(
"org/hibernate/orm/test/annotations/reflection/metadata-complete.xml" "org/hibernate/orm/test/annotations/reflection/metadata-complete.xml"
); );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Entity.class ) ); assertNotNull( reader.getAnnotation( Entity.class ) );
assertEquals( assertEquals(
"Metadata complete should ignore java annotations", "", reader.getAnnotation( Entity.class ).name() "Metadata complete should ignore java annotations", "", reader.getAnnotation( Entity.class ).name()
@ -183,7 +198,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() ); assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() ); assertEquals( "Default schema not overriden", "myschema", reader.getAnnotation( Table.class ).schema() );
reader = new JPAXMLOverriddenAnnotationReader( Match.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( Match.class, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Table.class ) ); assertNotNull( reader.getAnnotation( Table.class ) );
assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() ); assertEquals( "@Table should not be used", "", reader.getAnnotation( Table.class ).name() );
assertEquals( "Overriding not taken into account", "myschema", reader.getAnnotation( Table.class ).schema() ); assertEquals( "Overriding not taken into account", "myschema", reader.getAnnotation( Table.class ).schema() );
@ -194,14 +209,14 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
assertNull( reader.getAnnotation( NamedQueries.class ) ); assertNull( reader.getAnnotation( NamedQueries.class ) );
assertNull( reader.getAnnotation( NamedNativeQueries.class ) ); assertNull( reader.getAnnotation( NamedNativeQueries.class ) );
reader = new JPAXMLOverriddenAnnotationReader( TennisMatch.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( TennisMatch.class, context, bootstrapContext );
assertNull( reader.getAnnotation( PrimaryKeyJoinColumn.class ) ); assertNull( reader.getAnnotation( PrimaryKeyJoinColumn.class ) );
assertNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) ); assertNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
reader = new JPAXMLOverriddenAnnotationReader( Competition.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( Competition.class, context, bootstrapContext );
assertNull( reader.getAnnotation( MappedSuperclass.class ) ); assertNull( reader.getAnnotation( MappedSuperclass.class ) );
reader = new JPAXMLOverriddenAnnotationReader( SocialSecurityMoralAccount.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( SocialSecurityMoralAccount.class, context, bootstrapContext );
assertNull( reader.getAnnotation( IdClass.class ) ); assertNull( reader.getAnnotation( IdClass.class ) );
assertNull( reader.getAnnotation( DiscriminatorValue.class ) ); assertNull( reader.getAnnotation( DiscriminatorValue.class ) );
assertNull( reader.getAnnotation( DiscriminatorColumn.class ) ); assertNull( reader.getAnnotation( DiscriminatorColumn.class ) );
@ -213,11 +228,11 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
public void testIdRelatedAnnotations() throws Exception { public void testIdRelatedAnnotations() throws Exception {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Method method = Administration.class.getDeclaredMethod( "getId" ); Method method = Administration.class.getDeclaredMethod( "getId" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertNull( reader.getAnnotation( Id.class ) ); assertNull( reader.getAnnotation( Id.class ) );
assertNull( reader.getAnnotation( Column.class ) ); assertNull( reader.getAnnotation( Column.class ) );
Field field = Administration.class.getDeclaredField( "id" ); Field field = Administration.class.getDeclaredField( "id" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Id.class ) ); assertNotNull( reader.getAnnotation( Id.class ) );
assertNotNull( reader.getAnnotation( GeneratedValue.class ) ); assertNotNull( reader.getAnnotation( GeneratedValue.class ) );
assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class ).strategy() ); assertEquals( GenerationType.SEQUENCE, reader.getAnnotation( GeneratedValue.class ).strategy() );
@ -234,23 +249,23 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
"org/hibernate/orm/test/annotations/reflection/metadata-complete.xml" "org/hibernate/orm/test/annotations/reflection/metadata-complete.xml"
); );
method = Administration.class.getDeclaredMethod( "getId" ); method = Administration.class.getDeclaredMethod( "getId" );
reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertNotNull( assertNotNull(
"Default access type when not defined in metadata complete should be property", "Default access type when not defined in metadata complete should be property",
reader.getAnnotation( Id.class ) reader.getAnnotation( Id.class )
); );
field = Administration.class.getDeclaredField( "id" ); field = Administration.class.getDeclaredField( "id" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNull( assertNull(
"Default access type when not defined in metadata complete should be property", "Default access type when not defined in metadata complete should be property",
reader.getAnnotation( Id.class ) reader.getAnnotation( Id.class )
); );
method = BusTrip.class.getDeclaredMethod( "getId" ); method = BusTrip.class.getDeclaredMethod( "getId" );
reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertNull( reader.getAnnotation( EmbeddedId.class ) ); assertNull( reader.getAnnotation( EmbeddedId.class ) );
field = BusTrip.class.getDeclaredField( "id" ); field = BusTrip.class.getDeclaredField( "id" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( EmbeddedId.class ) ); assertNotNull( reader.getAnnotation( EmbeddedId.class ) );
assertNotNull( reader.getAnnotation( AttributeOverrides.class ) ); assertNotNull( reader.getAnnotation( AttributeOverrides.class ) );
assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length ); assertEquals( 1, reader.getAnnotation( AttributeOverrides.class ).value().length );
@ -262,22 +277,22 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
"org/hibernate/orm/test/annotations/reflection/metadata-complete.xml" "org/hibernate/orm/test/annotations/reflection/metadata-complete.xml"
); );
Field field = BusTrip.class.getDeclaredField( "status" ); Field field = BusTrip.class.getDeclaredField( "status" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Enumerated.class ) ); assertNotNull( reader.getAnnotation( Enumerated.class ) );
assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() ); assertEquals( EnumType.STRING, reader.getAnnotation( Enumerated.class ).value() );
assertEquals( false, reader.getAnnotation( Basic.class ).optional() ); assertEquals( false, reader.getAnnotation( Basic.class ).optional() );
field = BusTrip.class.getDeclaredField( "serial" ); field = BusTrip.class.getDeclaredField( "serial" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Lob.class ) ); assertNotNull( reader.getAnnotation( Lob.class ) );
assertEquals( "serialbytes", reader.getAnnotation( Columns.class ).columns()[0].name() ); assertEquals( "serialbytes", reader.getAnnotation( Columns.class ).columns()[0].name() );
field = BusTrip.class.getDeclaredField( "terminusTime" ); field = BusTrip.class.getDeclaredField( "terminusTime" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Temporal.class ) ); assertNotNull( reader.getAnnotation( Temporal.class ) );
assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value() ); assertEquals( TemporalType.TIMESTAMP, reader.getAnnotation( Temporal.class ).value() );
assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() ); assertEquals( FetchType.LAZY, reader.getAnnotation( Basic.class ).fetch() );
field = BusTripPk.class.getDeclaredField( "busDriver" ); field = BusTripPk.class.getDeclaredField( "busDriver" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( Basic.class ) ); assertTrue( reader.isAnnotationPresent( Basic.class ) );
} }
@ -285,7 +300,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
public void testVersionRelatedAnnotations() throws Exception { public void testVersionRelatedAnnotations() throws Exception {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Method method = Administration.class.getDeclaredMethod( "getVersion" ); Method method = Administration.class.getDeclaredMethod( "getVersion" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Version.class ) ); assertNotNull( reader.getAnnotation( Version.class ) );
Field field = Match.class.getDeclaredField( "version" ); Field field = Match.class.getDeclaredField( "version" );
@ -297,12 +312,12 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Field field = Administration.class.getDeclaredField( "transientField" ); Field field = Administration.class.getDeclaredField( "transientField" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Transient.class ) ); assertNotNull( reader.getAnnotation( Transient.class ) );
assertNull( reader.getAnnotation( Basic.class ) ); assertNull( reader.getAnnotation( Basic.class ) );
field = Match.class.getDeclaredField( "playerASSN" ); field = Match.class.getDeclaredField( "playerASSN" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( Embedded.class ) ); assertNotNull( reader.getAnnotation( Embedded.class ) );
} }
@ -311,7 +326,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Field field = Administration.class.getDeclaredField( "defaultBusTrip" ); Field field = Administration.class.getDeclaredField( "defaultBusTrip" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( OneToOne.class ) ); assertNotNull( reader.getAnnotation( OneToOne.class ) );
assertNull( reader.getAnnotation( JoinColumns.class ) ); assertNull( reader.getAnnotation( JoinColumns.class ) );
assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) ); assertNotNull( reader.getAnnotation( PrimaryKeyJoinColumns.class ) );
@ -324,7 +339,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
"org/hibernate/orm/test/annotations/reflection/metadata-complete.xml" "org/hibernate/orm/test/annotations/reflection/metadata-complete.xml"
); );
field = BusTrip.class.getDeclaredField( "players" ); field = BusTrip.class.getDeclaredField( "players" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( OneToMany.class ) ); assertNotNull( reader.getAnnotation( OneToMany.class ) );
assertNotNull( reader.getAnnotation( JoinColumns.class ) ); assertNotNull( reader.getAnnotation( JoinColumns.class ) );
assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length ); assertEquals( 2, reader.getAnnotation( JoinColumns.class ).value().length );
@ -333,7 +348,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
assertEquals( "name", reader.getAnnotation( MapKey.class ).name() ); assertEquals( "name", reader.getAnnotation( MapKey.class ).name() );
field = BusTrip.class.getDeclaredField( "roads" ); field = BusTrip.class.getDeclaredField( "roads" );
reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( ManyToMany.class ) ); assertNotNull( reader.getAnnotation( ManyToMany.class ) );
assertNotNull( reader.getAnnotation( JoinTable.class ) ); assertNotNull( reader.getAnnotation( JoinTable.class ) );
assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() ); assertEquals( "bus_road", reader.getAnnotation( JoinTable.class ).name() );
@ -350,7 +365,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Field field = Company.class.getDeclaredField( "organizations" ); Field field = Company.class.getDeclaredField( "organizations" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( field, context, bootstrapContext );
assertNotNull( reader.getAnnotation( ElementCollection.class ) ); assertNotNull( reader.getAnnotation( ElementCollection.class ) );
assertNotNull( reader.getAnnotation( Converts.class ) ); assertNotNull( reader.getAnnotation( Converts.class ) );
assertNotNull( reader.getAnnotation( Converts.class ).value() ); assertNotNull( reader.getAnnotation( Converts.class ).value() );
@ -363,20 +378,20 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" ); XMLContext context = buildContext( "org/hibernate/orm/test/annotations/reflection/orm.xml" );
Method method = Administration.class.getDeclaredMethod( "calculate" ); Method method = Administration.class.getDeclaredMethod( "calculate" );
JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); JPAXMLOverriddenAnnotationReader reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( PrePersist.class ) ); assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( Administration.class, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( EntityListeners.class ) ); assertTrue( reader.isAnnotationPresent( EntityListeners.class ) );
assertEquals( 1, reader.getAnnotation( EntityListeners.class ).value().length ); assertEquals( 1, reader.getAnnotation( EntityListeners.class ).value().length );
assertEquals( LogListener.class, reader.getAnnotation( EntityListeners.class ).value()[0] ); assertEquals( LogListener.class, reader.getAnnotation( EntityListeners.class ).value()[0] );
method = LogListener.class.getDeclaredMethod( "noLog", Object.class ); method = LogListener.class.getDeclaredMethod( "noLog", Object.class );
reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( PostLoad.class ) ); assertTrue( reader.isAnnotationPresent( PostLoad.class ) );
method = LogListener.class.getDeclaredMethod( "log", Object.class ); method = LogListener.class.getDeclaredMethod( "log", Object.class );
reader = new JPAXMLOverriddenAnnotationReader( method, context, BootstrapContextImpl.INSTANCE ); reader = new JPAXMLOverriddenAnnotationReader( method, context, bootstrapContext );
assertTrue( reader.isAnnotationPresent( PrePersist.class ) ); assertTrue( reader.isAnnotationPresent( PrePersist.class ) );
assertFalse( reader.isAnnotationPresent( PostPersist.class ) ); assertFalse( reader.isAnnotationPresent( PostPersist.class ) );
@ -387,7 +402,7 @@ public class JPAXMLOverriddenAnnotationReaderTest extends BaseUnitTestCase {
private XMLContext buildContext(String ormfile) throws IOException { private XMLContext buildContext(String ormfile) throws IOException {
XMLMappingHelper xmlHelper = new XMLMappingHelper(); XMLMappingHelper xmlHelper = new XMLMappingHelper();
JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings( ormfile ); JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings( ormfile );
XMLContext context = new XMLContext( BootstrapContextImpl.INSTANCE ); XMLContext context = new XMLContext( bootstrapContext );
context.addDocument( mappings ); context.addDocument( mappings );
return context; return context;
} }

View File

@ -12,6 +12,8 @@ import org.hibernate.orm.test.internal.util.xml.XMLMappingHelper;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.boot.BootstrapContextImpl; import org.hibernate.testing.boot.BootstrapContextImpl;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
/** /**
@ -19,10 +21,23 @@ import org.junit.jupiter.api.Test;
*/ */
@TestForIssue(jiraKey = "HHH-14529") @TestForIssue(jiraKey = "HHH-14529")
public class XMLContextTest { public class XMLContextTest {
private BootstrapContextImpl bootstrapContext;
@BeforeEach
public void init() {
bootstrapContext = new BootstrapContextImpl();
}
@AfterEach
public void destroy() {
bootstrapContext.close();
}
@Test @Test
public void testAll() throws Exception { public void testAll() throws Exception {
XMLMappingHelper xmlHelper = new XMLMappingHelper(); XMLMappingHelper xmlHelper = new XMLMappingHelper();
final XMLContext context = new XMLContext( BootstrapContextImpl.INSTANCE ); final XMLContext context = new XMLContext( bootstrapContext );
JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings( JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings(
"org/hibernate/orm/test/annotations/reflection/orm.xml" ); "org/hibernate/orm/test/annotations/reflection/orm.xml" );

View File

@ -18,6 +18,9 @@ import org.hibernate.orm.test.internal.util.xml.XMLMappingHelper;
import org.hibernate.testing.boot.BootstrapContextImpl; import org.hibernate.testing.boot.BootstrapContextImpl;
import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.After;
import org.junit.Before;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
@ -31,9 +34,21 @@ public abstract class Ejb3XmlTestCase extends BaseUnitTestCase {
protected JPAXMLOverriddenAnnotationReader reader; protected JPAXMLOverriddenAnnotationReader reader;
private BootstrapContextImpl bootstrapContext;
protected Ejb3XmlTestCase() { protected Ejb3XmlTestCase() {
} }
@Before
public void init() {
bootstrapContext = new BootstrapContextImpl();
}
@After
public void destroy() {
bootstrapContext.close();
}
protected void assertAnnotationPresent(Class<? extends Annotation> annotationType) { protected void assertAnnotationPresent(Class<? extends Annotation> annotationType) {
assertTrue( assertTrue(
"Expected annotation " + annotationType.getSimpleName() + " was not present", "Expected annotation " + annotationType.getSimpleName() + " was not present",
@ -52,7 +67,7 @@ public abstract class Ejb3XmlTestCase extends BaseUnitTestCase {
throws Exception { throws Exception {
AnnotatedElement el = getAnnotatedElement( entityClass, fieldName ); AnnotatedElement el = getAnnotatedElement( entityClass, fieldName );
XMLContext xmlContext = getContext( ormResourceName ); XMLContext xmlContext = getContext( ormResourceName );
return new JPAXMLOverriddenAnnotationReader( el, xmlContext, BootstrapContextImpl.INSTANCE ); return new JPAXMLOverriddenAnnotationReader( el, xmlContext, bootstrapContext );
} }
protected AnnotatedElement getAnnotatedElement(Class<?> entityClass, String fieldName) throws Exception { protected AnnotatedElement getAnnotatedElement(Class<?> entityClass, String fieldName) throws Exception {
@ -68,7 +83,7 @@ public abstract class Ejb3XmlTestCase extends BaseUnitTestCase {
protected XMLContext getContext(InputStream is, String resourceName) throws Exception { protected XMLContext getContext(InputStream is, String resourceName) throws Exception {
XMLMappingHelper xmlHelper = new XMLMappingHelper(); XMLMappingHelper xmlHelper = new XMLMappingHelper();
JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings( is, resourceName ); JaxbEntityMappings mappings = xmlHelper.readOrmXmlMappings( is, resourceName );
XMLContext context = new XMLContext( BootstrapContextImpl.INSTANCE ); XMLContext context = new XMLContext( bootstrapContext );
context.addDocument( mappings ); context.addDocument( mappings );
return context; return context;
} }

View File

@ -8,6 +8,7 @@ package org.hibernate.orm.test.annotations.xml.ejb3;
import org.hibernate.InvalidMappingException; import org.hibernate.InvalidMappingException;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder; import org.hibernate.boot.registry.BootstrapServiceRegistryBuilder;
import org.hibernate.internal.util.xml.UnsupportedOrmXsdVersionException; import org.hibernate.internal.util.xml.UnsupportedOrmXsdVersionException;
@ -21,9 +22,8 @@ import static org.junit.Assert.fail;
public class NonExistentOrmVersionTest extends BaseUnitTestCase { public class NonExistentOrmVersionTest extends BaseUnitTestCase {
@Test @Test
public void testNonExistentOrmVersion() { public void testNonExistentOrmVersion() {
try { try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
BootstrapServiceRegistryBuilder builder = new BootstrapServiceRegistryBuilder(); new MetadataSources( serviceRegistry )
new MetadataSources( builder.build() )
.addResource( "org/hibernate/orm/test/annotations/xml/ejb3/orm5.xml" ) .addResource( "org/hibernate/orm/test/annotations/xml/ejb3/orm5.xml" )
.buildMetadata(); .buildMetadata();
fail( "Expecting failure due to unsupported xsd version" ); fail( "Expecting failure due to unsupported xsd version" );

View File

@ -32,7 +32,8 @@ public class XmlBindingChecker {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
jaxbMarshaller.marshal( hbmMapping, bos ); jaxbMarshaller.marshal( hbmMapping, bos );
ByteArrayInputStream is = new ByteArrayInputStream( bos.toByteArray() ); ByteArrayInputStream is = new ByteArrayInputStream( bos.toByteArray() );
ServiceRegistry sr = new StandardServiceRegistryBuilder().build(); try (ServiceRegistry sr = new StandardServiceRegistryBuilder().build()) {
new XmlMappingBinderAccess( sr ).bind( is ); new XmlMappingBinderAccess( sr ).bind( is );
}
} }
} }

View File

@ -54,21 +54,20 @@ public class NonRootEntityWithCacheAnnotationTest {
settings.put( Environment.CACHE_REGION_FACTORY, CachingRegionFactory.class.getName() ); settings.put( Environment.CACHE_REGION_FACTORY, CachingRegionFactory.class.getName() );
settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE ); settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder() try (ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
.applySettings( settings ) .applySettings( settings )
.build(); .build()) {
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" ); Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" );
Metadata metadata = new MetadataSources( serviceRegistry ) Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( ABase.class ) .addAnnotatedClass( ABase.class )
.addAnnotatedClass( AEntity.class ) .addAnnotatedClass( AEntity.class )
.buildMetadata(); .buildMetadata();
assertTrue( triggerable.wasTriggered() ); assertTrue( triggerable.wasTriggered() );
assertFalse( metadata.getEntityBinding( AEntity.class.getName() ).isCached() ); assertFalse( metadata.getEntityBinding( AEntity.class.getName() ).isCached() );
}
serviceRegistry.destroy();
} }
@Entity @Entity

View File

@ -53,23 +53,22 @@ public class NonRootEntityWithCacheableAnnotationTest {
settings.put( AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY, "read-write" ); settings.put( AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY, "read-write" );
settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE ); settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder() try (ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
.applySettings( settings ) .applySettings( settings )
.build(); .build()) {
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" ); Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" );
Metadata metadata = new MetadataSources( serviceRegistry ) Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( ABase.class ) .addAnnotatedClass( ABase.class )
.addAnnotatedClass( AEntity.class ) .addAnnotatedClass( AEntity.class )
.buildMetadata(); .buildMetadata();
assertFalse( metadata.getEntityBinding( ABase.class.getName() ).isCached() ); assertFalse( metadata.getEntityBinding( ABase.class.getName() ).isCached() );
assertTrue( metadata.getEntityBinding( AEntity.class.getName() ).isCached() ); assertTrue( metadata.getEntityBinding( AEntity.class.getName() ).isCached() );
assertFalse( triggerable.wasTriggered() ); assertFalse( triggerable.wasTriggered() );
}
serviceRegistry.destroy();
} }
@Entity @Entity

View File

@ -32,75 +32,75 @@ import static org.hamcrest.MatcherAssert.assertThat;
public class SingleRegisteredProviderTest extends BaseUnitTestCase { public class SingleRegisteredProviderTest extends BaseUnitTestCase {
@Test @Test
public void testCachingExplicitlyDisabled() { public void testCachingExplicitlyDisabled() {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder() try (final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "false" ) .applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "false" )
.build(); .build()) {
assertThat( registry.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
assertThat( registry.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) ); }
} }
@Test @Test
public void testCachingImplicitlyEnabledRegistered() { public void testCachingImplicitlyEnabledRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder() try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build(); .build()) {
final Collection<Class<? extends RegionFactory>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
final Collection<Class<? extends RegionFactory>> implementors = bsr assertThat( implementors.size(), equalTo( 1 ) );
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
assertThat( implementors.size(), equalTo( 1 ) ); final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr )
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "" )
.build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ) assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "" ) }
.build();
assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
} }
@Test @Test
public void testCachingImplicitlyEnabledNoRegistered() { public void testCachingImplicitlyEnabledNoRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder() try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build(); .build()) {
final Collection<Class<? extends RegionFactory>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
final Collection<Class<? extends RegionFactory>> implementors = bsr assertThat( implementors.size(), equalTo( 1 ) );
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
assertThat( implementors.size(), equalTo( 1 ) ); bsr.getService( StrategySelector.class ).unRegisterStrategyImplementor(
RegionFactory.class,
implementors.iterator().next()
);
bsr.getService( StrategySelector.class ).unRegisterStrategyImplementor( final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr )
RegionFactory.class, .applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "" )
implementors.iterator().next() .build();
);
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ) assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "" ) }
.build();
assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
} }
@Test @Test
public void testConnectionsRegistered() { public void testConnectionsRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder() try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build(); .build()) {
final Collection<Class<? extends ConnectionProvider>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( ConnectionProvider.class );
final Collection<Class<? extends ConnectionProvider>> implementors = bsr assertThat( implementors.size(), equalTo( 0 ) );
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( ConnectionProvider.class );
assertThat( implementors.size(), equalTo( 0 ) ); bsr.getService( StrategySelector.class ).registerStrategyImplementor(
ConnectionProvider.class,
"testing",
DriverManagerConnectionProviderImpl.class
);
bsr.getService( StrategySelector.class ).registerStrategyImplementor( final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ).build();
ConnectionProvider.class,
"testing",
DriverManagerConnectionProviderImpl.class
);
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ).build(); final ConnectionProvider configuredProvider = ssr.getService( ConnectionProvider.class );
final ConnectionProvider configuredProvider = ssr.getService( ConnectionProvider.class ); assertThat( configuredProvider, instanceOf( DriverManagerConnectionProviderImpl.class ) );
}
assertThat( configuredProvider, instanceOf( DriverManagerConnectionProviderImpl.class ) );
} }
} }

View File

@ -35,22 +35,23 @@ public class CacheKeyImplementationHashCodeTest {
@Test @Test
@TestForIssue( jiraKey = "HHH-12746") @TestForIssue( jiraKey = "HHH-12746")
public void test() { public void test() {
ServiceRegistryImplementor serviceRegistry = ( try (ServiceRegistryImplementor serviceRegistry = (
ServiceRegistryImplementor) new StandardServiceRegistryBuilder().build(); ServiceRegistryImplementor) new StandardServiceRegistryBuilder().build()) {
MetadataSources ms = new MetadataSources( serviceRegistry ); MetadataSources ms = new MetadataSources( serviceRegistry );
ms.addAnnotatedClass( AnEntity.class ).addAnnotatedClass( AnotherEntity.class ); ms.addAnnotatedClass( AnEntity.class ).addAnnotatedClass( AnotherEntity.class );
Metadata metadata = ms.buildMetadata(); Metadata metadata = ms.buildMetadata();
final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder(); final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) sfb.build(); SessionFactoryImplementor sessionFactory = (SessionFactoryImplementor) sfb.build();
CacheKeyImplementation anEntityCacheKey = createCacheKeyImplementation( CacheKeyImplementation anEntityCacheKey = createCacheKeyImplementation(
1, sessionFactory.getMetamodel().entityPersister( AnEntity.class ), sessionFactory 1, sessionFactory.getMetamodel().entityPersister( AnEntity.class ), sessionFactory
); );
CacheKeyImplementation anotherEntityCacheKey = createCacheKeyImplementation( CacheKeyImplementation anotherEntityCacheKey = createCacheKeyImplementation(
1, sessionFactory.getMetamodel().entityPersister( AnotherEntity.class ), sessionFactory 1, sessionFactory.getMetamodel().entityPersister( AnotherEntity.class ), sessionFactory
); );
assertFalse( anEntityCacheKey.equals( anotherEntityCacheKey ) ); assertFalse( anEntityCacheKey.equals( anotherEntityCacheKey ) );
}
} }
private CacheKeyImplementation createCacheKeyImplementation( private CacheKeyImplementation createCacheKeyImplementation(

View File

@ -42,14 +42,13 @@ public class DelayedMixedAccessTest implements BeanContainer.LifecycleOptions {
@Test @Test
public void testDelayedMixedAccess() { public void testDelayedMixedAccess() {
try ( final SeContainer cdiContainer = Helper.createSeContainer() ) { try ( final SeContainer cdiContainer = Helper.createSeContainer();
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build(); final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build();
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ) final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr )
.applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP ) .applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP )
.applySetting( AvailableSettings.CDI_BEAN_MANAGER, cdiContainer.getBeanManager() ) .applySetting( AvailableSettings.CDI_BEAN_MANAGER, cdiContainer.getBeanManager() )
.applySetting( AvailableSettings.DELAY_CDI_ACCESS, "true" ) .applySetting( AvailableSettings.DELAY_CDI_ACCESS, "true" )
.build(); .build() ) {
final BeanContainer beanContainer = CdiBeanContainerBuilder.fromBeanManagerReference( final BeanContainer beanContainer = CdiBeanContainerBuilder.fromBeanManagerReference(
cdiContainer.getBeanManager(), cdiContainer.getBeanManager(),

View File

@ -46,42 +46,45 @@ public class ExtendedMixedAccessTest implements BeanContainer.LifecycleOptions {
} }
private void doTest(TestingExtendedBeanManager extendedBeanManager) { private void doTest(TestingExtendedBeanManager extendedBeanManager) {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP ) .applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP )
.applySetting( AvailableSettings.CDI_BEAN_MANAGER, extendedBeanManager ) .applySetting( AvailableSettings.CDI_BEAN_MANAGER, extendedBeanManager )
.build(); .build()) {
final BeanContainer beanContainer = ssr.getService( ManagedBeanRegistry.class ).getBeanContainer();
final BeanContainer beanContainer = ssr.getService( ManagedBeanRegistry.class ).getBeanContainer(); assertThat( beanContainer, instanceOf( CdiBeanContainerExtendedAccessImpl.class ) );
assertThat( beanContainer, instanceOf( CdiBeanContainerExtendedAccessImpl.class ) ); try (final SeContainer cdiContainer = Helper.createSeContainer()) {
final BeanManager beanManager = cdiContainer.getBeanManager();
extendedBeanManager.notifyListenerReady( beanManager );
try ( final SeContainer cdiContainer = Helper.createSeContainer() ) { assertThat(
final BeanManager beanManager = cdiContainer.getBeanManager(); beanManager,
extendedBeanManager.notifyListenerReady( beanManager ); sameInstance( ( (CdiBeanContainerExtendedAccessImpl) beanContainer ).getUsableBeanManager() )
);
assertThat( beanManager, sameInstance( ( (CdiBeanContainerExtendedAccessImpl) beanContainer ).getUsableBeanManager() ) ); final ContainedBean<HostedBean> hostedBean = beanContainer.getBean(
HostedBean.class,
this,
FallbackBeanInstanceProducer.INSTANCE
);
final ContainedBean<HostedBean> hostedBean = beanContainer.getBean( assertThat( hostedBean, notNullValue() );
HostedBean.class, assertThat( hostedBean.getBeanInstance(), notNullValue() );
this,
FallbackBeanInstanceProducer.INSTANCE
);
assertThat( hostedBean, notNullValue() ); assertThat( hostedBean.getBeanInstance().getInjectedHostedBean(), notNullValue() );
assertThat( hostedBean.getBeanInstance(), notNullValue() );
assertThat( hostedBean.getBeanInstance().getInjectedHostedBean(), notNullValue() ); final ContainedBean<NonHostedBean> nonHostedBean = beanContainer.getBean(
NonHostedBean.class,
this,
FallbackBeanInstanceProducer.INSTANCE
);
final ContainedBean<NonHostedBean> nonHostedBean = beanContainer.getBean( assertThat( nonHostedBean, notNullValue() );
NonHostedBean.class, assertThat( nonHostedBean.getBeanInstance(), notNullValue() );
this,
FallbackBeanInstanceProducer.INSTANCE
);
assertThat( nonHostedBean, notNullValue() ); extendedBeanManager.notifyListenerShuttingDown( beanManager );
assertThat( nonHostedBean.getBeanInstance(), notNullValue() ); }
extendedBeanManager.notifyListenerShuttingDown( beanManager );
} }
} }

View File

@ -44,8 +44,8 @@ public class ImmediateMixedAccessTests implements BeanContainer.LifecycleOptions
@Test @Test
public void testImmediateMixedAccess() { public void testImmediateMixedAccess() {
try ( final SeContainer cdiContainer = Helper.createSeContainer() ) { try ( final SeContainer cdiContainer = Helper.createSeContainer();
BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build(); BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder().build() ) {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr ) final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder( bsr )
.applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP ) .applySetting( AvailableSettings.HBM2DDL_AUTO, Action.CREATE_DROP )

View File

@ -13,6 +13,7 @@ import javax.persistence.Id;
import javax.persistence.PrimaryKeyJoinColumn; import javax.persistence.PrimaryKeyJoinColumn;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.AnnotationBinder; import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.internal.CoreMessageLogger; import org.hibernate.internal.CoreMessageLogger;
@ -38,15 +39,19 @@ public class AnnotationBinderTest {
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000137" ); Triggerable triggerable = logInspection.watchForLogMessages( "HHH000137" );
StandardServiceRegistryBuilder srb = new StandardServiceRegistryBuilder(); try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( srb.build() ) Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( InvalidPrimaryKeyJoinColumnAnnotationEntity.class ) .addAnnotatedClass( InvalidPrimaryKeyJoinColumnAnnotationEntity.class )
.buildMetadata(); .buildMetadata();
assertTrue( "Expected warning HHH00137 but it wasn't triggered", triggerable.wasTriggered() ); assertTrue( "Expected warning HHH00137 but it wasn't triggered", triggerable.wasTriggered() );
assertTrue( "Expected invalid class name in warning HHH00137 message but it does not apper to be present; got " + triggerable.triggerMessage(), assertTrue(
triggerable.triggerMessage().matches( ".*\\b\\Q" + InvalidPrimaryKeyJoinColumnAnnotationEntity.class.getName() + "\\E\\b.*" ) ); "Expected invalid class name in warning HHH00137 message but it does not apper to be present; got " + triggerable.triggerMessage(),
triggerable.triggerMessage()
.matches( ".*\\b\\Q" + InvalidPrimaryKeyJoinColumnAnnotationEntity.class.getName() + "\\E\\b.*" )
);
}
} }
@Entity @Entity

View File

@ -31,16 +31,17 @@ public class MultipleBagFetchTest {
@Test @Test
public void testEntityWithMultipleJoinFetchedBags() { public void testEntityWithMultipleJoinFetchedBags() {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build(); try (StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( standardRegistry ) Metadata metadata = new MetadataSources( standardRegistry )
.addAnnotatedClass( Post.class ) .addAnnotatedClass( Post.class )
.addAnnotatedClass( PostComment.class ) .addAnnotatedClass( PostComment.class )
.addAnnotatedClass( Tag.class ) .addAnnotatedClass( Tag.class )
.getMetadataBuilder() .getMetadataBuilder()
.build(); .build();
// make sure that this model does not cause a MultipleBagFetchException // make sure that this model does not cause a MultipleBagFetchException
metadata.buildSessionFactory(); metadata.buildSessionFactory().close();
}
} }
@Entity(name = "Post") @Entity(name = "Post")

View File

@ -23,6 +23,7 @@ import org.hibernate.engine.jdbc.dialect.spi.DialectResolver;
import org.hibernate.orm.test.dialect.TestingDialects; import org.hibernate.orm.test.dialect.TestingDialects;
import org.hibernate.service.spi.ServiceRegistryImplementor; import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.testing.junit4.BaseUnitTestCase; import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
@ -51,6 +52,13 @@ public class DialectFactoryTest extends BaseUnitTestCase {
dialectFactory.injectServices( (ServiceRegistryImplementor) registry ); dialectFactory.injectServices( (ServiceRegistryImplementor) registry );
} }
@After
public void destroy() {
if ( registry != null ) {
registry.close();
}
}
@Test @Test
public void testExplicitShortNameUse() { public void testExplicitShortNameUse() {
final Map<String, String> configValues = new HashMap<String, String>(); final Map<String, String> configValues = new HashMap<String, String>();

View File

@ -19,6 +19,7 @@ import javax.persistence.ManyToOne;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.Table; import org.hibernate.mapping.Table;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
@ -35,16 +36,18 @@ public class HHH14230 {
@Test @Test
public void test() { public void test() {
Metadata metadata = new MetadataSources(new StandardServiceRegistryBuilder().build()) try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
.addAnnotatedClass(TestEntity.class).buildMetadata(); Metadata metadata = new MetadataSources( serviceRegistry )
Table table = StreamSupport.stream(metadata.getDatabase().getNamespaces().spliterator(), false) .addAnnotatedClass( TestEntity.class ).buildMetadata();
.flatMap(namespace -> namespace.getTables().stream()) Table table = StreamSupport.stream( metadata.getDatabase().getNamespaces().spliterator(), false )
.filter(t -> t.getName().equals(TABLE_NAME)).findFirst().orElse(null); .flatMap( namespace -> namespace.getTables().stream() )
assertNotNull(table); .filter( t -> t.getName().equals( TABLE_NAME ) ).findFirst().orElse( null );
assertEquals(1, table.getForeignKeys().size()); assertNotNull( table );
assertEquals( 1, table.getForeignKeys().size() );
// ClassCastException before HHH-14230 // ClassCastException before HHH-14230
assertTrue(table.getForeignKeys().keySet().iterator().next().toString().contains(JOIN_COLUMN_NAME)); assertTrue( table.getForeignKeys().keySet().iterator().next().toString().contains( JOIN_COLUMN_NAME ) );
}
} }
@Entity @Entity

View File

@ -46,10 +46,11 @@ public class DefaultConstraintModeTest extends BaseUnitTestCase {
} }
private void testForeignKeyCreation(boolean created) { private void testForeignKeyCreation(boolean created) {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() try (StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting(Environment.HBM2DDL_DEFAULT_CONSTRAINT_MODE, created ? "CONSTRAINT" : "NO_CONSTRAINT").build(); .applySetting(Environment.HBM2DDL_DEFAULT_CONSTRAINT_MODE, created ? "CONSTRAINT" : "NO_CONSTRAINT").build()) {
Metadata metadata = new MetadataSources(ssr).addAnnotatedClass(TestEntity.class).buildMetadata(); Metadata metadata = new MetadataSources( ssr ).addAnnotatedClass( TestEntity.class ).buildMetadata();
assertThat(findTable(metadata, TABLE_NAME).getForeignKeys().isEmpty(), is(!created)); assertThat( findTable( metadata, TABLE_NAME ).getForeignKeys().isEmpty(), is( !created ) );
}
} }
private static Table findTable(Metadata metadata, String tableName) { private static Table findTable(Metadata metadata, String tableName) {

View File

@ -26,6 +26,7 @@ import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction; import org.hibernate.annotations.OnDeleteAction;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.Table; import org.hibernate.mapping.Table;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
@ -44,11 +45,13 @@ public class OneToManyBidirectionalForeignKeyTest {
@Test @Test
public void testForeignKeyShouldNotBeCreated() { public void testForeignKeyShouldNotBeCreated() {
Metadata metadata = new MetadataSources(new StandardServiceRegistryBuilder().build()) try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
.addAnnotatedClass(PlainTreeEntity.class).addAnnotatedClass(TreeEntityWithOnDelete.class) Metadata metadata = new MetadataSources( serviceRegistry )
.buildMetadata(); .addAnnotatedClass( PlainTreeEntity.class ).addAnnotatedClass( TreeEntityWithOnDelete.class )
assertTrue(findTable(metadata, TABLE_NAME_PLAIN).getForeignKeys().isEmpty()); .buildMetadata();
assertFalse(findTable(metadata, TABLE_NAME_WITH_ON_DELETE).getForeignKeys().isEmpty()); assertTrue( findTable( metadata, TABLE_NAME_PLAIN ).getForeignKeys().isEmpty() );
assertFalse( findTable( metadata, TABLE_NAME_WITH_ON_DELETE ).getForeignKeys().isEmpty() );
}
} }
private static Table findTable(Metadata metadata, String tableName) { private static Table findTable(Metadata metadata, String tableName) {

View File

@ -4,6 +4,7 @@ import java.io.StringReader;
import org.hibernate.boot.Metadata; import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.engine.jdbc.ReaderInputStream; import org.hibernate.engine.jdbc.ReaderInputStream;
import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.PersistentClass;
@ -28,14 +29,16 @@ public class ClassCommentTest {
public void testClassComment() { public void testClassComment() {
StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder() StandardServiceRegistryBuilder serviceRegistryBuilder = new StandardServiceRegistryBuilder()
.applySetting("hibernate.dialect", "org.hibernate.dialect.HSQLDialect"); .applySetting("hibernate.dialect", "org.hibernate.dialect.HSQLDialect");
MetadataSources metadataSources = new MetadataSources(serviceRegistryBuilder.build()); try (StandardServiceRegistry serviceRegistry = serviceRegistryBuilder.build()) {
metadataSources.addInputStream(new ReaderInputStream(new StringReader(CLASS_COMMENT_HBM_XML))); MetadataSources metadataSources = new MetadataSources( serviceRegistry );
Metadata metadata = metadataSources.buildMetadata(); metadataSources.addInputStream( new ReaderInputStream( new StringReader( CLASS_COMMENT_HBM_XML ) ) );
PersistentClass pc = metadata.getEntityBinding("org.hibernate.test.hbm.Foo"); Metadata metadata = metadataSources.buildMetadata();
Assert.assertNotNull(pc); PersistentClass pc = metadata.getEntityBinding( "org.hibernate.test.hbm.Foo" );
Table table = pc.getTable(); Assert.assertNotNull( pc );
Assert.assertNotNull(table); Table table = pc.getTable();
Assert.assertEquals("This is class 'Foo' with property 'bar'.", table.getComment()); Assert.assertNotNull( table );
Assert.assertEquals( "This is class 'Foo' with property 'bar'.", table.getComment() );
}
} }
} }

View File

@ -55,11 +55,9 @@ public class SequenceStyleConfigUnitTest {
*/ */
@Test @Test
public void testDefaultedSequenceBackedConfiguration() { public void testDefaultedSequenceBackedConfiguration() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
SequenceStyleGenerator generator = new SequenceStyleGenerator(); SequenceStyleGenerator generator = new SequenceStyleGenerator();
generator.configure( StandardBasicTypes.LONG, props, serviceRegistry ); generator.configure( StandardBasicTypes.LONG, props, serviceRegistry );
@ -77,9 +75,6 @@ public class SequenceStyleConfigUnitTest {
assertEquals( "ID_SEQ", databaseStructure.getName() ); assertEquals( "ID_SEQ", databaseStructure.getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
private Properties buildGeneratorPropertiesBase(StandardServiceRegistry serviceRegistry) { private Properties buildGeneratorPropertiesBase(StandardServiceRegistry serviceRegistry) {
@ -100,11 +95,9 @@ public class SequenceStyleConfigUnitTest {
*/ */
@Test @Test
public void testDefaultedTableBackedConfiguration() { public void testDefaultedTableBackedConfiguration() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
SequenceStyleGenerator generator = new SequenceStyleGenerator(); SequenceStyleGenerator generator = new SequenceStyleGenerator();
generator.configure( StandardBasicTypes.LONG, props, serviceRegistry ); generator.configure( StandardBasicTypes.LONG, props, serviceRegistry );
@ -122,9 +115,6 @@ public class SequenceStyleConfigUnitTest {
assertEquals( "ID_SEQ", databaseStructure.getName() ); assertEquals( "ID_SEQ", databaseStructure.getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
/** /**
@ -135,11 +125,9 @@ public class SequenceStyleConfigUnitTest {
@Test @Test
public void testDefaultOptimizerBasedOnIncrementBackedBySequence() { public void testDefaultOptimizerBasedOnIncrementBackedBySequence() {
// for dialects which do not support pooled sequences, we default to pooled+table // for dialects which do not support pooled sequences, we default to pooled+table
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" ); props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -154,16 +142,11 @@ public class SequenceStyleConfigUnitTest {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() ); assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() ); assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
// for dialects which do support pooled sequences, we default to pooled+sequence // for dialects which do support pooled sequences, we default to pooled+sequence
serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" ); props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -177,9 +160,6 @@ public class SequenceStyleConfigUnitTest {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() ); assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() ); assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
/** /**
@ -189,11 +169,9 @@ public class SequenceStyleConfigUnitTest {
*/ */
@Test @Test
public void testDefaultOptimizerBasedOnIncrementBackedByTable() { public void testDefaultOptimizerBasedOnIncrementBackedByTable() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" ); props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -207,9 +185,6 @@ public class SequenceStyleConfigUnitTest {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() ); assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() ); assertEquals( "ID_SEQ", generator.getDatabaseStructure().getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
/** /**
@ -217,11 +192,9 @@ public class SequenceStyleConfigUnitTest {
*/ */
@Test @Test
public void testForceTableUse() { public void testForceTableUse() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.FORCE_TBL_PARAM, "true" ); props.setProperty( SequenceStyleGenerator.FORCE_TBL_PARAM, "true" );
@ -240,9 +213,6 @@ public class SequenceStyleConfigUnitTest {
assertEquals( "ID_SEQ", databaseStructure.getName() ); assertEquals( "ID_SEQ", databaseStructure.getName() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
/** /**
@ -250,12 +220,10 @@ public class SequenceStyleConfigUnitTest {
*/ */
@Test @Test
public void testExplicitOptimizerWithExplicitIncrementSize() { public void testExplicitOptimizerWithExplicitIncrementSize() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build();
// optimizer=none w/ increment > 1 => should honor optimizer // optimizer=none w/ increment > 1 => should honor optimizer
try { try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.OPT_PARAM, StandardOptimizerDescriptor.NONE.getExternalName() ); props.setProperty( SequenceStyleGenerator.OPT_PARAM, StandardOptimizerDescriptor.NONE.getExternalName() );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" ); props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" );
@ -300,18 +268,13 @@ public class SequenceStyleConfigUnitTest {
assertEquals( 20, generator.getOptimizer().getIncrementSize() ); assertEquals( 20, generator.getOptimizer().getIncrementSize() );
assertEquals( 20, generator.getDatabaseStructure().getIncrementSize() ); assertEquals( 20, generator.getDatabaseStructure().getIncrementSize() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
@Test @Test
public void testPreferredPooledOptimizerSetting() { public void testPreferredPooledOptimizerSetting() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() ) .applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() )
.build(); .build()) {
try {
Properties props = buildGeneratorPropertiesBase( serviceRegistry ); Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" ); props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" );
SequenceStyleGenerator generator = new SequenceStyleGenerator(); SequenceStyleGenerator generator = new SequenceStyleGenerator();
@ -340,9 +303,6 @@ public class SequenceStyleConfigUnitTest {
assertClassAssignability( SequenceStructure.class, generator.getDatabaseStructure().getClass() ); assertClassAssignability( SequenceStructure.class, generator.getDatabaseStructure().getClass() );
assertClassAssignability( PooledLoThreadLocalOptimizer.class, generator.getOptimizer().getClass() ); assertClassAssignability( PooledLoThreadLocalOptimizer.class, generator.getOptimizer().getClass() );
} }
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
} }
public static class TableDialect extends Dialect { public static class TableDialect extends Dialect {

View File

@ -55,148 +55,143 @@ import static org.junit.Assert.assertThat;
public class AutoGenerationTypeTests { public class AutoGenerationTypeTests {
@Test @Test
public void testAutoDefaults() { public void testAutoDefaults() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final StandardServiceRegistry ssr = ssrb.build(); final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final Metadata metadata = new MetadataSources( ssr ) final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
.addAnnotatedClass( Entity1.class ) generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final PersistentClass entityBinding = metadata.getEntityBinding( Entity1.class.getName() );
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr ); final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final SequenceStyleGenerator entityIdGenerator = (SequenceStyleGenerator) idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final PersistentClass entityBinding = metadata.getEntityBinding( Entity1.class.getName() ); final DatabaseStructure database1Structure = entityIdGenerator.getDatabaseStructure();
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final SequenceStyleGenerator entityIdGenerator = (SequenceStyleGenerator) idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final DatabaseStructure database1Structure = entityIdGenerator.getDatabaseStructure(); // implicit name : `${entity-name}_seq`
assertThat( database1Structure.getName(), equalToIgnoringCase( "tbl_1_SEQ" ) );
// implicit name : `${entity-name}_seq` assertThat( database1Structure.getIncrementSize(), is( 50 ) );
assertThat( database1Structure.getName(), equalToIgnoringCase( "tbl_1_SEQ" ) ); }
assertThat( database1Structure.getIncrementSize(), is( 50 ) );
} }
@Test @Test
public void testAutoGeneratedValueGenerator() { public void testAutoGeneratedValueGenerator() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final StandardServiceRegistry ssr = ssrb.build(); final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final Metadata metadata = new MetadataSources( ssr ) final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
.addAnnotatedClass( Entity1.class ) generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final PersistentClass entityBinding = metadata.getEntityBinding( Entity2.class.getName() );
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr ); final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final SequenceStyleGenerator idGenerator = (SequenceStyleGenerator) idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final PersistentClass entityBinding = metadata.getEntityBinding( Entity2.class.getName() ); final DatabaseStructure database2Structure = idGenerator.getDatabaseStructure();
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final SequenceStyleGenerator idGenerator = (SequenceStyleGenerator) idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final DatabaseStructure database2Structure = idGenerator.getDatabaseStructure(); // GeneratedValue#generator value
assertThat( database2Structure.getName(), equalToIgnoringCase( "id_seq" ) );
// GeneratedValue#generator value assertThat( database2Structure.getIncrementSize(), is( 50 ) );
assertThat( database2Structure.getName(), equalToIgnoringCase( "id_seq" ) ); }
assertThat( database2Structure.getIncrementSize(), is( 50 ) );
} }
@Test @Test
public void testCollectionId() { public void testCollectionId() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final StandardServiceRegistry ssr = ssrb.build(); final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final Metadata metadata = new MetadataSources( ssr ) final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
.addAnnotatedClass( Entity1.class ) generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
.addAnnotatedClass( Entity2.class )
.buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final PersistentClass entity1Binding = metadata.getEntityBinding( Entity1.class.getName() );
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
final PersistentClass entity1Binding = metadata.getEntityBinding( Entity1.class.getName() ); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Entity1#theTwos collection-id - implicit `${collection_table}_seq`
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ final Property theTwos = entity1Binding.getProperty( "theTwos" );
// Entity1#theTwos collection-id - implicit `${collection_table}_seq` final IdentifierBag idBagMapping = (IdentifierBag) theTwos.getValue();
final KeyValue collectionIdMapping = idBagMapping.getIdentifier();
final SequenceStyleGenerator collectionIdGenerator = (SequenceStyleGenerator) collectionIdMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
null
);
final Property theTwos = entity1Binding.getProperty( "theTwos" ); final DatabaseStructure idBagIdGeneratorDbStructure = collectionIdGenerator.getDatabaseStructure();
final IdentifierBag idBagMapping = (IdentifierBag) theTwos.getValue();
final KeyValue collectionIdMapping = idBagMapping.getIdentifier();
final SequenceStyleGenerator collectionIdGenerator = (SequenceStyleGenerator) collectionIdMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
null
);
final DatabaseStructure idBagIdGeneratorDbStructure = collectionIdGenerator.getDatabaseStructure(); assertThat( idBagIdGeneratorDbStructure.getName(), equalToIgnoringCase( "tbl_2_seq" ) );
assertThat( idBagIdGeneratorDbStructure.getIncrementSize(), is( 50 ) );
assertThat( idBagIdGeneratorDbStructure.getName(), equalToIgnoringCase( "tbl_2_seq" ) ); }
assertThat( idBagIdGeneratorDbStructure.getIncrementSize(), is( 50 ) );
} }
@Test @Test
public void testUuid() { public void testUuid() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final StandardServiceRegistry ssr = ssrb.build(); final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity4.class )
.buildMetadata();
final Metadata metadata = new MetadataSources( ssr ) final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
.addAnnotatedClass( Entity4.class ) generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
.buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final PersistentClass entityBinding = metadata.getEntityBinding( Entity4.class.getName() );
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr ); final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final IdentifierGenerator idGenerator = idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final PersistentClass entityBinding = metadata.getEntityBinding( Entity4.class.getName() ); assertThat( idGenerator, instanceOf( UUIDGenerator.class ) );
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier(); }
final IdentifierGenerator idGenerator = idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
assertThat( idGenerator, instanceOf( UUIDGenerator.class ) );
} }
@Test @Test
public void testIncrement() { public void testIncrement() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final StandardServiceRegistry ssr = ssrb.build(); final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity3.class )
.buildMetadata();
final Metadata metadata = new MetadataSources( ssr ) final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
.addAnnotatedClass( Entity3.class ) generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
.buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final PersistentClass entityBinding = metadata.getEntityBinding( Entity3.class.getName() );
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr ); final KeyValue idMapping = entityBinding.getRootClass().getIdentifier();
final IdentifierGenerator idGenerator = idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
final PersistentClass entityBinding = metadata.getEntityBinding( Entity3.class.getName() ); assertThat( idGenerator, instanceOf( IncrementGenerator.class ) );
final KeyValue idMapping = entityBinding.getRootClass().getIdentifier(); }
final IdentifierGenerator idGenerator = idMapping.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding.getRootClass()
);
assertThat( idGenerator, instanceOf( IncrementGenerator.class ) );
} }
@Entity( name = "Entity1" ) @Entity( name = "Entity1" )

View File

@ -67,38 +67,45 @@ public class UserDefinedGeneratorsTests {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder(); final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder();
ssrb.applySetting( AvailableSettings.BEAN_CONTAINER, beanContainer ); ssrb.applySetting( AvailableSettings.BEAN_CONTAINER, beanContainer );
final StandardServiceRegistry ssr = ssrb.build(); try (final StandardServiceRegistry ssr = ssrb.build()) {
final Metadata metadata = new MetadataSources( ssr ) final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class ) .addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class ) .addAnnotatedClass( Entity2.class )
.buildMetadata(); .buildMetadata();
final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory(); final DefaultIdentifierGeneratorFactory generatorFactory = new DefaultIdentifierGeneratorFactory();
generatorFactory.injectServices( (ServiceRegistryImplementor) ssr ); generatorFactory.injectServices( (ServiceRegistryImplementor) ssr );
final PersistentClass entityBinding1 = metadata.getEntityBinding( Entity1.class.getName() ); final PersistentClass entityBinding1 = metadata.getEntityBinding( Entity1.class.getName() );
final PersistentClass entityBinding2 = metadata.getEntityBinding( Entity2.class.getName() ); final PersistentClass entityBinding2 = metadata.getEntityBinding( Entity2.class.getName() );
final IdentifierGenerator generator1 = entityBinding1.getRootClass().getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator1 = entityBinding1.getRootClass()
generatorFactory, .getIdentifier()
new H2Dialect(), .createIdentifierGenerator(
"", generatorFactory,
"", new H2Dialect(),
entityBinding1.getRootClass() "",
); "",
final IdentifierGenerator generator2 = entityBinding2.getRootClass().getIdentifier().createIdentifierGenerator( entityBinding1.getRootClass()
generatorFactory, );
new H2Dialect(), final IdentifierGenerator generator2 = entityBinding2.getRootClass()
"", .getIdentifier()
"", .createIdentifierGenerator(
entityBinding2.getRootClass() generatorFactory,
); new H2Dialect(),
"",
"",
entityBinding2.getRootClass()
);
then( beanContainer ).should( times( 2 ) ).getBean( same( TestIdentifierGenerator.class ), any( LifecycleOptions.class ), then( beanContainer ).should( times( 2 ) ).getBean( same( TestIdentifierGenerator.class ),
same( FallbackBeanInstanceProducer.INSTANCE ) ); any( LifecycleOptions.class ),
same( FallbackBeanInstanceProducer.INSTANCE )
);
assertThat( generator1, is( instanceOf( TestIdentifierGenerator.class ) ) ); assertThat( generator1, is( instanceOf( TestIdentifierGenerator.class ) ) );
assertThat( generator2, is( instanceOf( TestIdentifierGenerator.class ) ) ); assertThat( generator2, is( instanceOf( TestIdentifierGenerator.class ) ) );
assertThat( generator1 == generator2, is( false ) ); // should not be same instance assertThat( generator1 == generator2, is( false ) ); // should not be same instance
}
} }

View File

@ -29,6 +29,6 @@ public class NoCdiAvailableTestDelegate {
new HibernatePersistenceProvider().createContainerEntityManagerFactory( new HibernatePersistenceProvider().createContainerEntityManagerFactory(
new PersistenceUnitInfoAdapter(), new PersistenceUnitInfoAdapter(),
Collections.singletonMap( AvailableSettings.CDI_BEAN_MANAGER, new Object() ) Collections.singletonMap( AvailableSettings.CDI_BEAN_MANAGER, new Object() )
); ).close();
} }
} }

View File

@ -49,229 +49,251 @@ import static org.junit.Assert.assertTrue;
public class GeneratedValueTests extends BaseUnitTestCase { public class GeneratedValueTests extends BaseUnitTestCase {
@Test @Test
public void baseline() { public void baseline() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitGeneratorEntity.class ) .addAnnotatedClass( ExplicitGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, generator ); final SequenceStyleGenerator sequenceStyleGenerator = assertTyping(
SequenceStyleGenerator.class,
generator
);
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_real_db_sequence" ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_real_db_sequence" ) );
// all the JPA defaults since they were not defined // all the JPA defaults since they were not defined
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) );
}
} }
@Test @Test
public void testImplicitSequenceGenerator() { public void testImplicitSequenceGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder() try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, "false" ) .applySetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, "false" )
.build(); .build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class ) .addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, generator ); final SequenceStyleGenerator sequenceStyleGenerator = assertTyping(
SequenceStyleGenerator.class,
generator
);
// PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME == false indicates that the legacy // PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME == false indicates that the legacy
// default (hibernate_sequence) should be used // default (hibernate_sequence) should be used
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) );
// the JPA defaults since they were not defined // the JPA defaults since they were not defined
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) );
}
} }
@Test @Test
public void testImplicitSequenceGeneratorGeneratorName() { public void testImplicitSequenceGeneratorGeneratorName() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class ) .addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitSequenceGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, generator ); final SequenceStyleGenerator sequenceStyleGenerator = assertTyping(
SequenceStyleGenerator.class,
generator
);
// PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME == true (the default) indicates that the generator-name // PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME == true (the default) indicates that the generator-name
// should be used as the default instead. // should be used as the default instead.
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) );
// the JPA defaults since they were not defined // the JPA defaults since they were not defined
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) ); assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) );
}
} }
@Test @Test
public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() { public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
// this should be the default behavior // this should be the default behavior
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitSequenceGeneratorImplicitNameEntity.class ) .addAnnotatedClass( ExplicitSequenceGeneratorImplicitNameEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitSequenceGeneratorImplicitNameEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding(
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( ExplicitSequenceGeneratorImplicitNameEntity.class.getName() );
bootModel.getIdentifierGeneratorFactory(), final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
ssr.getService( JdbcEnvironment.class ).getDialect(), bootModel.getIdentifierGeneratorFactory(),
null, ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
(RootClass) entityMapping null,
); (RootClass) entityMapping
);
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, generator ); final SequenceStyleGenerator sequenceStyleGenerator = assertTyping(
// all the JPA defaults since they were not defined SequenceStyleGenerator.class,
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) ); generator
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) ); );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) ); // all the JPA defaults since they were not defined
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) );
final Sequence sequence = bootModel.getDatabase() final Sequence sequence = bootModel.getDatabase()
.getDefaultNamespace() .getDefaultNamespace()
.locateSequence( Identifier.toIdentifier( "my_db_sequence" ) ); .locateSequence( Identifier.toIdentifier( "my_db_sequence" ) );
assertThat( sequence, notNullValue() ); assertThat( sequence, notNullValue() );
assertThat( sequence.getName().getSequenceName().getText(), is( "my_db_sequence" ) ); assertThat( sequence.getName().getSequenceName().getText(), is( "my_db_sequence" ) );
assertThat( sequence.getInitialValue(), is( 100 ) ); assertThat( sequence.getInitialValue(), is( 100 ) );
assertThat( sequence.getIncrementSize(), is( 500 ) ); assertThat( sequence.getIncrementSize(), is( 500 ) );
final String[] sqlCreateStrings = new H2Dialect().getSequenceExporter().getSqlCreateStrings( final String[] sqlCreateStrings = new H2Dialect().getSequenceExporter().getSqlCreateStrings(
sequence, sequence,
bootModel bootModel
); );
assertThat( sqlCreateStrings.length, is(1) ); assertThat( sqlCreateStrings.length, is( 1 ) );
final String cmd = sqlCreateStrings[0].toLowerCase(); final String cmd = sqlCreateStrings[0].toLowerCase();
assertTrue( cmd.startsWith( "create sequence my_db_sequence start with 100 increment by 500" ) ); assertTrue( cmd.startsWith( "create sequence my_db_sequence start with 100 increment by 500" ) );
}
} }
@Test @Test
public void testImplicitTableGenerator() { public void testImplicitTableGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitTableGeneratorEntity.class ) .addAnnotatedClass( ImplicitTableGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitTableGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitTableGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator ); final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator );
assertThat( tableGenerator.getTableName(), is( "my_id_table" ) ); assertThat( tableGenerator.getTableName(), is( "my_id_table" ) );
// all the JPA defaults since they were not defined // all the JPA defaults since they were not defined
assertThat( tableGenerator.getInitialValue(), is( 1 ) ); assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 50 ) ); assertThat( tableGenerator.getIncrementSize(), is( 50 ) );
}
} }
@Test @Test
public void testExplicitTableGeneratorImplicitName() { public void testExplicitTableGeneratorImplicitName() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitTableGeneratorImplicitNameEntity.class ) .addAnnotatedClass( ExplicitTableGeneratorImplicitNameEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorImplicitNameEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorImplicitNameEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator ); final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator );
assertThat( tableGenerator.getTableName(), is( "my_id_table" ) ); assertThat( tableGenerator.getTableName(), is( "my_id_table" ) );
// - note : currently initialValue=1 in mapping is shows up here as 2 // - note : currently initialValue=1 in mapping is shows up here as 2
assertThat( tableGenerator.getInitialValue(), is( 1 ) ); assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 25 ) ); assertThat( tableGenerator.getIncrementSize(), is( 25 ) );
}
} }
@Test @Test
public void testExplicitTableGenerator() { public void testExplicitTableGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitTableGeneratorEntity.class ) .addAnnotatedClass( ExplicitTableGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitTableGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator ); final TableGenerator tableGenerator = assertTyping( TableGenerator.class, generator );
assertThat( tableGenerator.getTableName(), is( "my_real_id_table" ) ); assertThat( tableGenerator.getTableName(), is( "my_real_id_table" ) );
// all the JPA defaults since they were not defined // all the JPA defaults since they were not defined
// - note : currently initialValue=1 in mapping is shows up here // - note : currently initialValue=1 in mapping is shows up here
// as 2 // as 2
// assertThat( tableGenerator.getInitialValue(), is( 1 ) ); // assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 25 ) ); assertThat( tableGenerator.getIncrementSize(), is( 25 ) );
}
} }
@Test @Test
public void testExplicitIncrementGenerator() { public void testExplicitIncrementGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitIncrementGeneratorEntity.class ) .addAnnotatedClass( ExplicitIncrementGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitIncrementGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitIncrementGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
assertTyping( IncrementGenerator.class, generator ); assertTyping( IncrementGenerator.class, generator );
}
} }
@Test @Test
public void testImplicitIncrementGenerator() { public void testImplicitIncrementGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr ) final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitIncrementGeneratorEntity.class ) .addAnnotatedClass( ImplicitIncrementGeneratorEntity.class )
.buildMetadata(); .buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitIncrementGeneratorEntity.class.getName() ); final PersistentClass entityMapping = bootModel.getEntityBinding( ImplicitIncrementGeneratorEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator( final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(), bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(), ssr.getService( JdbcEnvironment.class ).getDialect(),
null, null,
null, null,
(RootClass) entityMapping (RootClass) entityMapping
); );
assertTyping( IncrementGenerator.class, generator ); assertTyping( IncrementGenerator.class, generator );
}
} }
@Entity @Entity

View File

@ -19,6 +19,7 @@ import javax.persistence.Version;
import org.hibernate.Hibernate; import org.hibernate.Hibernate;
import org.hibernate.boot.MetadataSources; import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.AvailableSettings; import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SessionFactoryImplementor;
@ -140,15 +141,20 @@ public class CachingWithSecondaryTablesTests extends BaseUnitTestCase {
settings.put( AvailableSettings.JPA_CACHING_COMPLIANCE, "true" ); settings.put( AvailableSettings.JPA_CACHING_COMPLIANCE, "true" );
} }
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder() final StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySettings( settings ); .applySettings( settings )
.build();
return (SessionFactoryImplementor) new MetadataSources( ssrb.build() ) try {
.addAnnotatedClass( Person.class ) return (SessionFactoryImplementor) new MetadataSources( serviceRegistry )
.addAnnotatedClass( VersionedPerson.class) .addAnnotatedClass( Person.class )
.buildMetadata() .addAnnotatedClass( VersionedPerson.class )
.buildSessionFactory(); .buildMetadata()
.buildSessionFactory();
}
catch (Throwable t) {
serviceRegistry.close();
throw t;
}
} }
@After @After

View File

@ -33,22 +33,25 @@ public class ConfigurationObjectSettingTest {
public void testContainerBootstrapSharedCacheMode() { public void testContainerBootstrapSharedCacheMode() {
// first, via the integration vars // first, via the integration vars
PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter(); PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter();
EntityManagerFactoryBuilderImpl builder = null;
{ {
// as object // as object
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty, empty,
Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE ) Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
); );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) ); assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
} }
builder.cancel();
{ {
// as string // as string
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty, empty,
Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE.name() ) Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE.name() )
); );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) ); assertEquals( SharedCacheMode.DISABLE_SELECTIVE.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
} }
builder.cancel();
// next, via the PUI // next, via the PUI
PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() { PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() {
@ -58,43 +61,48 @@ public class ConfigurationObjectSettingTest {
} }
}; };
{ {
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter, adapter,
null null
); );
assertEquals( SharedCacheMode.ENABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) ); assertEquals( SharedCacheMode.ENABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
} }
builder.cancel();
// via both, integration vars should take precedence // via both, integration vars should take precedence
{ {
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter, adapter,
Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE ) Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
); );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) ); assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
} }
builder.cancel();
} }
@Test @Test
public void testContainerBootstrapValidationMode() { public void testContainerBootstrapValidationMode() {
// first, via the integration vars // first, via the integration vars
PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter(); PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter();
EntityManagerFactoryBuilderImpl builder = null;
{ {
// as object // as object
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty, empty,
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK ) Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK )
); );
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) ); assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
} }
builder.cancel();
{ {
// as string // as string
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty, empty,
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK.name() ) Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK.name() )
); );
assertEquals( ValidationMode.CALLBACK.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) ); assertEquals( ValidationMode.CALLBACK.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
} }
builder.cancel();
// next, via the PUI // next, via the PUI
PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() { PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() {
@ -104,21 +112,23 @@ public class ConfigurationObjectSettingTest {
} }
}; };
{ {
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter, adapter,
null null
); );
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) ); assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
} }
builder.cancel();
// via both, integration vars should take precedence // via both, integration vars should take precedence
{ {
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder( builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter, adapter,
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.NONE ) Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.NONE )
); );
assertEquals( ValidationMode.NONE, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) ); assertEquals( ValidationMode.NONE, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
} }
builder.cancel();
} }
@Test @Test
@ -129,7 +139,7 @@ public class ConfigurationObjectSettingTest {
Bootstrap.getEntityManagerFactoryBuilder( Bootstrap.getEntityManagerFactoryBuilder(
adapter, adapter,
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_FACTORY, token ) Collections.singletonMap( AvailableSettings.JPA_VALIDATION_FACTORY, token )
); ).cancel();
fail( "Was expecting error as token did not implement ValidatorFactory" ); fail( "Was expecting error as token did not implement ValidatorFactory" );
} }
catch ( HibernateException e ) { catch ( HibernateException e ) {

View File

@ -23,6 +23,7 @@ import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -63,6 +64,13 @@ public class SchemaCreateDropUtf8WithoutHbm2DdlCharsetNameTest {
); );
} }
@AfterEach
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test @Test
@TestForIssue(jiraKey = "HHH-10972") @TestForIssue(jiraKey = "HHH-10972")
public void testEncoding() throws Exception { public void testEncoding() throws Exception {

View File

@ -29,6 +29,7 @@ import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -60,6 +61,13 @@ public class SchemaDatabaseFileGenerationFailureTest {
); );
} }
@AfterEach
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test @Test
@TestForIssue(jiraKey = "HHH-12192") @TestForIssue(jiraKey = "HHH-12192")
public void testErrorMessageContainsTheFailingDDLCommand() { public void testErrorMessageContainsTheFailingDDLCommand() {

View File

@ -27,6 +27,7 @@ import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -52,6 +53,13 @@ public class SchemaScriptFileGenerationFailureTest {
); );
} }
@AfterEach
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test @Test
@TestForIssue(jiraKey = "HHH-12192") @TestForIssue(jiraKey = "HHH-12192")
public void testErrorMessageContainsTheFailingDDLCommand() { public void testErrorMessageContainsTheFailingDDLCommand() {

View File

@ -25,6 +25,7 @@ import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest; import org.hibernate.testing.orm.junit.EntityManagerFactoryBasedFunctionalTest;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -52,6 +53,13 @@ public class SchemaScriptFileGenerationTest {
); );
} }
@AfterEach
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test @Test
@TestForIssue(jiraKey = "10601") @TestForIssue(jiraKey = "10601")
public void testGenerateSchemaDoesNotProduceTheSameStatementTwice() throws Exception { public void testGenerateSchemaDoesNotProduceTheSameStatementTwice() throws Exception {

View File

@ -109,25 +109,27 @@ public class AttributeConverterTest extends BaseUnitTestCase {
@Test @Test
public void testBasicOperation() { public void testBasicOperation() {
final BasicValue basicValue = new BasicValue( new MetadataBuildingContextTestingImpl() ); try ( StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
basicValue.setJpaAttributeConverterDescriptor( final BasicValue basicValue = new BasicValue( new MetadataBuildingContextTestingImpl( serviceRegistry ) );
new InstanceBasedConverterDescriptor( basicValue.setJpaAttributeConverterDescriptor(
new StringClobConverter(), new InstanceBasedConverterDescriptor(
new ClassmateContext() new StringClobConverter(),
) new ClassmateContext()
); )
basicValue.setTypeUsingReflection( IrrelevantEntity.class.getName(), "name" ); );
basicValue.setTypeUsingReflection( IrrelevantEntity.class.getName(), "name" );
final Type type = basicValue.getType(); final Type type = basicValue.getType();
assertNotNull( type ); assertNotNull( type );
assertThat( type, instanceOf( AttributeConverterTypeAdapter.class ) ); assertThat( type, instanceOf( AttributeConverterTypeAdapter.class ) );
final AttributeConverterTypeAdapter typeAdapter = (AttributeConverterTypeAdapter) type; final AttributeConverterTypeAdapter typeAdapter = (AttributeConverterTypeAdapter) type;
assertThat( typeAdapter.getDomainJtd().getJavaTypeClass(), equalTo( String.class ) ); assertThat( typeAdapter.getDomainJtd().getJavaTypeClass(), equalTo( String.class ) );
final JdbcTypeDescriptor jdbcTypeDescriptor = typeAdapter.getJdbcTypeDescriptor(); final JdbcTypeDescriptor jdbcTypeDescriptor = typeAdapter.getJdbcTypeDescriptor();
assertThat( jdbcTypeDescriptor.getJdbcTypeCode(), is( Types.CLOB ) ); assertThat( jdbcTypeDescriptor.getJdbcTypeCode(), is( Types.CLOB ) );
}
} }
@Test @Test
@ -253,9 +255,7 @@ public class AttributeConverterTest extends BaseUnitTestCase {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" ); cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
session.beginTransaction(); session.beginTransaction();
session.save( new Tester4( 1L, "steve", 200 ) ); session.save( new Tester4( 1L, "steve", 200 ) );
@ -285,9 +285,6 @@ public class AttributeConverterTest extends BaseUnitTestCase {
session.getTransaction().commit(); session.getTransaction().commit();
session.close(); session.close();
} }
finally {
sf.close();
}
} }
@Test @Test
@ -328,9 +325,7 @@ public class AttributeConverterTest extends BaseUnitTestCase {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" ); cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
session.beginTransaction(); session.beginTransaction();
session.save( new IrrelevantInstantEntity( 1L ) ); session.save( new IrrelevantInstantEntity( 1L ) );
@ -351,9 +346,6 @@ public class AttributeConverterTest extends BaseUnitTestCase {
session.getTransaction().commit(); session.getTransaction().commit();
session.close(); session.close();
} }
finally {
sf.close();
}
} }
@Test @Test
@ -365,9 +357,7 @@ public class AttributeConverterTest extends BaseUnitTestCase {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" ); cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
session.beginTransaction(); session.beginTransaction();
session.save( new Tester4( 1L, "George", 150, ConvertibleEnum.DEFAULT ) ); session.save( new Tester4( 1L, "George", 150, ConvertibleEnum.DEFAULT ) );
@ -397,9 +387,6 @@ public class AttributeConverterTest extends BaseUnitTestCase {
session.getTransaction().commit(); session.getTransaction().commit();
session.close(); session.close();
} }
finally {
sf.close();
}
} }
@Test @Test

View File

@ -47,13 +47,18 @@ public class AttributeConverterOnSuperclassTest extends BaseUnitTestCase {
@Test @Test
public void testAttributeConverterOnSuperclass() { public void testAttributeConverterOnSuperclass() {
final BootstrapContextImpl bootstrapContext = BootstrapContextImpl.INSTANCE; final BootstrapContextImpl bootstrapContext = new BootstrapContextImpl();
final ClassBasedConverterDescriptor converterDescriptor = new ClassBasedConverterDescriptor( try {
StringIntegerConverterSubclass.class, final ClassBasedConverterDescriptor converterDescriptor = new ClassBasedConverterDescriptor(
bootstrapContext.getClassmateContext() StringIntegerConverterSubclass.class,
); bootstrapContext.getClassmateContext()
);
assertEquals( String.class, converterDescriptor.getDomainValueResolvedType().getErasedType() ); assertEquals( String.class, converterDescriptor.getDomainValueResolvedType().getErasedType() );
}
finally {
bootstrapContext.close();
}
} }
public interface StringLongAttributeConverter extends AttributeConverter<String, Long> { public interface StringLongAttributeConverter extends AttributeConverter<String, Long> {

View File

@ -75,8 +75,7 @@ public class SchemaUpdateSchemaNameTest extends BaseUnitTestCase {
.applySettings( cfg.getProperties() ) .applySettings( cfg.getProperties() )
.build(); .build();
SessionFactory sf = cfg.buildSessionFactory( ssr ); try (SessionFactory sf = cfg.buildSessionFactory();) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
try { try {
session.getTransaction().begin(); session.getTransaction().begin();
@ -93,9 +92,6 @@ public class SchemaUpdateSchemaNameTest extends BaseUnitTestCase {
session.close(); session.close();
} }
} }
finally {
sf.close();
}
} }
finally { finally {
StandardServiceRegistryBuilder.destroy( ssr ); StandardServiceRegistryBuilder.destroy( ssr );
@ -112,8 +108,7 @@ public class SchemaUpdateSchemaNameTest extends BaseUnitTestCase {
cfg.getStandardServiceRegistryBuilder().getAggregatedCfgXml() ) cfg.getStandardServiceRegistryBuilder().getAggregatedCfgXml() )
.applySettings( cfg.getProperties() ) .applySettings( cfg.getProperties() )
.build(); .build();
SessionFactory sf = cfg.buildSessionFactory( ssr ); try (SessionFactory sf = cfg.buildSessionFactory( ssr )) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
try { try {
session.getTransaction().begin(); session.getTransaction().begin();
@ -130,9 +125,6 @@ public class SchemaUpdateSchemaNameTest extends BaseUnitTestCase {
session.close(); session.close();
} }
} }
finally {
sf.close();
}
} }
finally { finally {
StandardServiceRegistryBuilder.destroy( ssr ); StandardServiceRegistryBuilder.destroy( ssr );

View File

@ -31,13 +31,13 @@ public class InheritanceSchemaUpdateTest extends BaseUnitTestCase {
public void testBidirectionalOneToManyReferencingRootEntity() throws Exception { public void testBidirectionalOneToManyReferencingRootEntity() throws Exception {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build(); StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Step.class )
.addAnnotatedClass( GroupStep.class )
.buildMetadata();
metadata.validate();
try { try {
MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Step.class )
.addAnnotatedClass( GroupStep.class )
.buildMetadata();
metadata.validate();
try { try {
new SchemaUpdate().execute( EnumSet.of( TargetType.DATABASE ), metadata ); new SchemaUpdate().execute( EnumSet.of( TargetType.DATABASE ), metadata );
} }

View File

@ -36,27 +36,27 @@ public class SessionFactorySerializationTest extends BaseUnitTestCase {
Configuration cfg = new Configuration() Configuration cfg = new Configuration()
.setProperty( AvailableSettings.SESSION_FACTORY_NAME, NAME ) .setProperty( AvailableSettings.SESSION_FACTORY_NAME, NAME )
.setProperty( AvailableSettings.SESSION_FACTORY_NAME_IS_JNDI, "false" ); // default is true .setProperty( AvailableSettings.SESSION_FACTORY_NAME_IS_JNDI, "false" ); // default is true
SessionFactory factory = cfg.buildSessionFactory(); try (SessionFactory factory = cfg.buildSessionFactory()) {
// we need to do some tricking here so that Hibernate thinks the deserialization happens in a // we need to do some tricking here so that Hibernate thinks the deserialization happens in a
// different VM // different VM
String uuid = ( (SessionFactoryImplementor) factory ).getUuid(); String uuid = ( (SessionFactoryImplementor) factory ).getUuid();
// deregister under this uuid... // deregister under this uuid...
SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, NAME, false, null ); SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, NAME, false, null );
// and then register under a different uuid... // and then register under a different uuid...
SessionFactoryRegistry.INSTANCE.addSessionFactory( SessionFactoryRegistry.INSTANCE.addSessionFactory(
"some-other-uuid", "some-other-uuid",
NAME, NAME,
false, false,
(SessionFactoryImplementor) factory, (SessionFactoryImplementor) factory,
null null
); );
SessionFactory factory2 = (SessionFactory) SerializationHelper.clone( factory ); SessionFactory factory2 = (SessionFactory) SerializationHelper.clone( factory );
assertSame( factory, factory2 ); assertSame( factory, factory2 );
SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", NAME, false, null ); SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", NAME, false, null );
factory.close(); }
assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() ); assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() );
} }
@ -67,31 +67,31 @@ public class SessionFactorySerializationTest extends BaseUnitTestCase {
// here, the test should fail based just on attempted uuid resolution // here, the test should fail based just on attempted uuid resolution
Configuration cfg = new Configuration() Configuration cfg = new Configuration()
.setProperty( AvailableSettings.SESSION_FACTORY_NAME_IS_JNDI, "false" ); // default is true .setProperty( AvailableSettings.SESSION_FACTORY_NAME_IS_JNDI, "false" ); // default is true
SessionFactory factory = cfg.buildSessionFactory(); try (SessionFactory factory = cfg.buildSessionFactory()) {
// we need to do some tricking here so that Hibernate thinks the deserialization happens in a // we need to do some tricking here so that Hibernate thinks the deserialization happens in a
// different VM // different VM
String uuid = ( (SessionFactoryImplementor) factory ).getUuid(); String uuid = ( (SessionFactoryImplementor) factory ).getUuid();
// deregister under this uuid... // deregister under this uuid...
SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, null, false, null ); SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, null, false, null );
// and then register under a different uuid... // and then register under a different uuid...
SessionFactoryRegistry.INSTANCE.addSessionFactory( SessionFactoryRegistry.INSTANCE.addSessionFactory(
"some-other-uuid", "some-other-uuid",
null, null,
false, false,
(SessionFactoryImplementor) factory, (SessionFactoryImplementor) factory,
null null
); );
try { try {
SerializationHelper.clone( factory ); SerializationHelper.clone( factory );
fail( "Expecting an error" ); fail( "Expecting an error" );
}
catch (SerializationException expected) {
}
SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", null, false, null );
} }
catch ( SerializationException expected ) {
}
SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", null, false, null );
factory.close();
assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() ); assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() );
} }

View File

@ -18,6 +18,8 @@ import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor; import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.Startable; import org.hibernate.service.spi.Startable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
@ -28,9 +30,18 @@ import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
public class ServiceRegistryTest { public class ServiceRegistryTest {
private final ServiceRegistry registry = buildRegistry(); private ServiceRegistry registry;
private final static int NUMBER_OF_THREADS = 100; private final static int NUMBER_OF_THREADS = 100;
private StandardServiceRegistryBuilder standardServiceRegistryBuilder;
@Before
public void init() {
registry = buildRegistry();
}
@After
public void destroy() {
registry.close();
}
@Test @Test
@TestForIssue(jiraKey = "HHH-10427") @TestForIssue(jiraKey = "HHH-10427")
@ -49,9 +60,6 @@ public class ServiceRegistryTest {
} }
} }
standardServiceRegistryBuilder.destroy( registry );
} }
@Test @Test
@ -85,8 +93,7 @@ public class ServiceRegistryTest {
} }
private ServiceRegistry buildRegistry() { private ServiceRegistry buildRegistry() {
standardServiceRegistryBuilder = new StandardServiceRegistryBuilder(); return new StandardServiceRegistryBuilder().addInitiator( new SlowServiceInitiator() )
return standardServiceRegistryBuilder.addInitiator( new SlowServiceInitiator() )
.addInitiator( new NullServiceInitiator() ) .addInitiator( new NullServiceInitiator() )
.build(); .build();
} }

View File

@ -30,9 +30,9 @@ public class ServiceRegistryClosingCascadeTest extends BaseUnitTestCase {
StandardServiceRegistry sr = new StandardServiceRegistryBuilder(bsr).build(); StandardServiceRegistry sr = new StandardServiceRegistryBuilder(bsr).build();
assertTrue( ( (BootstrapServiceRegistryImpl) bsr ).isActive() ); assertTrue( ( (BootstrapServiceRegistryImpl) bsr ).isActive() );
Configuration config = new Configuration(); Configuration config = new Configuration();
SessionFactory sf = config.buildSessionFactory( sr ); try (SessionFactory sf = config.buildSessionFactory( sr )) {
sf.close(); }
assertFalse( ( (BootstrapServiceRegistryImpl) bsr ).isActive() ); assertFalse( ( (BootstrapServiceRegistryImpl) bsr ).isActive() );
} }
} }

View File

@ -24,8 +24,8 @@ public class SubclassProxyInterfaceTest {
final Configuration cfg = new Configuration() final Configuration cfg = new Configuration()
.setProperty( Environment.DIALECT, H2Dialect.class.getName() ) .setProperty( Environment.DIALECT, H2Dialect.class.getName() )
.addClass( Person.class ); .addClass( Person.class );
ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( cfg.getProperties() ); try (ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( cfg.getProperties() )) {
cfg.buildSessionFactory( serviceRegistry ).close(); cfg.buildSessionFactory( serviceRegistry ).close();
ServiceRegistryBuilder.destroy( serviceRegistry ); }
} }
} }

View File

@ -53,11 +53,16 @@ public class DropSchemaDuringJtaTxnTest extends BaseUnitTestCase {
settings.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" ); settings.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" );
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings( settings ).build(); final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings( settings ).build();
try {
return new MetadataSources( ssr ) return new MetadataSources( ssr )
.addAnnotatedClass( TestEntity.class ) .addAnnotatedClass( TestEntity.class )
.buildMetadata() .buildMetadata()
.buildSessionFactory(); .buildSessionFactory();
}
catch (Throwable t) {
ssr.close();
throw t;
}
} }

View File

@ -37,11 +37,9 @@ public class EmbeddableIntegratorTest extends BaseUnitTestCase {
*/ */
@Test @Test
public void testWithoutIntegrator() { public void testWithoutIntegrator() {
SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class ) try (SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
.setProperty( "hibernate.hbm2ddl.auto", "create-drop" ) .setProperty( "hibernate.hbm2ddl.auto", "create-drop" )
.buildSessionFactory(); .buildSessionFactory()) {
try {
Session sess = sf.openSession(); Session sess = sf.openSession();
try { try {
sess.getTransaction().begin(); sess.getTransaction().begin();
@ -62,20 +60,14 @@ public class EmbeddableIntegratorTest extends BaseUnitTestCase {
} }
sess.close(); sess.close();
} }
finally {
sf.close();
}
} }
@Test @Test
public void testWithTypeContributor() { public void testWithTypeContributor() {
SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class ) try (SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
.registerTypeContributor( new InvestorTypeContributor() ) .registerTypeContributor( new InvestorTypeContributor() )
.setProperty( "hibernate.hbm2ddl.auto", "create-drop" ) .setProperty( "hibernate.hbm2ddl.auto", "create-drop" )
.buildSessionFactory(); .buildSessionFactory(); Session sess = sf.openSession()) {
Session sess = sf.openSession();
try {
sess.getTransaction().begin(); sess.getTransaction().begin();
Investor myInv = getInvestor(); Investor myInv = getInvestor();
myInv.setId( 2L ); myInv.setId( 2L );
@ -86,13 +78,6 @@ public class EmbeddableIntegratorTest extends BaseUnitTestCase {
Investor inv = (Investor) sess.get( Investor.class, 2L ); Investor inv = (Investor) sess.get( Investor.class, 2L );
assertEquals( new BigDecimal( "100" ), inv.getInvestments().get( 0 ).getAmount().getAmount() ); assertEquals( new BigDecimal( "100" ), inv.getInvestments().get( 0 ).getAmount().getAmount() );
}catch (Exception e){
sess.getTransaction().rollback();
throw e;
}
finally {
sess.close();
sf.close();
} }
} }

View File

@ -64,21 +64,23 @@ public class ValueVisitorTest extends BaseUnitTestCase {
final RootClass rootClass = new RootClass( metadataBuildingContext ); final RootClass rootClass = new RootClass( metadataBuildingContext );
ValueVisitor vv = new ValueVisitorValidator(); ValueVisitor vv = new ValueVisitorValidator();
MetadataBuildingContextTestingImpl metadataBuildingContext = new MetadataBuildingContextTestingImpl(); try ( StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
new Any( metadataBuildingContext, tbl ).accept( vv ); MetadataBuildingContextTestingImpl metadataBuildingContext = new MetadataBuildingContextTestingImpl( serviceRegistry );
new Array( metadataBuildingContext, rootClass ).accept( vv ); new Any( metadataBuildingContext, tbl ).accept( vv );
new Bag( metadataBuildingContext, rootClass ).accept( vv ); new Array( metadataBuildingContext, rootClass ).accept( vv );
new Component( metadataBuildingContext, rootClass ).accept( vv ); new Bag( metadataBuildingContext, rootClass ).accept( vv );
new DependantValue( metadataBuildingContext, tbl, null ).accept( vv ); new Component( metadataBuildingContext, rootClass ).accept( vv );
new IdentifierBag( metadataBuildingContext, rootClass ).accept( vv ); new DependantValue( metadataBuildingContext, tbl, null ).accept( vv );
new List( metadataBuildingContext, rootClass ).accept( vv ); new IdentifierBag( metadataBuildingContext, rootClass ).accept( vv );
new ManyToOne( metadataBuildingContext, tbl ).accept( vv ); new List( metadataBuildingContext, rootClass ).accept( vv );
new Map( metadataBuildingContext, rootClass ).accept( vv ); new ManyToOne( metadataBuildingContext, tbl ).accept( vv );
new OneToMany( metadataBuildingContext, rootClass ).accept( vv ); new Map( metadataBuildingContext, rootClass ).accept( vv );
new OneToOne( metadataBuildingContext, tbl, rootClass ).accept( vv ); new OneToMany( metadataBuildingContext, rootClass ).accept( vv );
new PrimitiveArray( metadataBuildingContext, rootClass ).accept( vv ); new OneToOne( metadataBuildingContext, tbl, rootClass ).accept( vv );
new Set( metadataBuildingContext, rootClass ).accept( vv ); new PrimitiveArray( metadataBuildingContext, rootClass ).accept( vv );
new BasicValue( metadataBuildingContext ).accept( vv ); new Set( metadataBuildingContext, rootClass ).accept( vv );
new BasicValue( metadataBuildingContext ).accept( vv );
}
} }
static public class ValueVisitorValidator implements ValueVisitor { static public class ValueVisitorValidator implements ValueVisitor {

View File

@ -68,48 +68,54 @@ public class DiscriminatorMultiTenancyTest extends BaseUnitTestCase {
.applySettings(settings) .applySettings(settings)
.build(); .build();
MetadataSources ms = new MetadataSources(serviceRegistry); try {
ms.addAnnotatedClass(Customer.class); MetadataSources ms = new MetadataSources( serviceRegistry );
ms.addAnnotatedClass( Customer.class );
Metadata metadata = ms.buildMetadata(); Metadata metadata = ms.buildMetadata();
final PersistentClass customerMapping = metadata.getEntityBinding( Customer.class.getName() ); final PersistentClass customerMapping = metadata.getEntityBinding( Customer.class.getName() );
customerMapping.setCached( true ); customerMapping.setCached( true );
((RootClass) customerMapping ).setCacheConcurrencyStrategy( "read-write"); ( (RootClass) customerMapping ).setCacheConcurrencyStrategy( "read-write" );
HibernateSchemaManagementTool tool = new HibernateSchemaManagementTool(); HibernateSchemaManagementTool tool = new HibernateSchemaManagementTool();
tool.injectServices(serviceRegistry); tool.injectServices( serviceRegistry );
connectionProvider = ConnectionProviderBuilder.buildConnectionProvider(); connectionProvider = ConnectionProviderBuilder.buildConnectionProvider();
final GenerationTargetToDatabase target = new GenerationTargetToDatabase( final GenerationTargetToDatabase target = new GenerationTargetToDatabase(
new DdlTransactionIsolatorTestingImpl( new DdlTransactionIsolatorTestingImpl(
serviceRegistry, serviceRegistry,
connectionProvider connectionProvider
) )
); );
new SchemaDropperImpl(serviceRegistry).doDrop( new SchemaDropperImpl( serviceRegistry ).doDrop(
metadata, metadata,
serviceRegistry, serviceRegistry,
settings, settings,
true, true,
target target
); );
new SchemaCreatorImpl(serviceRegistry).doCreation( new SchemaCreatorImpl( serviceRegistry ).doCreation(
metadata, metadata,
serviceRegistry, serviceRegistry,
settings, settings,
true, true,
target target
); );
target.release(); target.release();
final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder(); final SessionFactoryBuilder sfb = metadata.getSessionFactoryBuilder();
sessionFactory = (SessionFactoryImplementor) sfb.build(); sessionFactory = (SessionFactoryImplementor) sfb.build();
currentTenantResolver.setHibernateBooted(); currentTenantResolver.setHibernateBooted();
}
catch (Throwable t) {
serviceRegistry.close();
throw t;
}
} }
@After @After

View File

@ -127,8 +127,7 @@ public class StoredProcedureResultSetMappingTest extends BaseUnitTestCase {
.addAnnotatedClass( Employee.class ) .addAnnotatedClass( Employee.class )
.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ); .setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.addAuxiliaryDatabaseObject( new ProcedureDefinition() ); cfg.addAuxiliaryDatabaseObject( new ProcedureDefinition() );
SessionFactory sf = cfg.buildSessionFactory(); try (SessionFactory sf = cfg.buildSessionFactory()) {
try {
Session session = sf.openSession(); Session session = sf.openSession();
session.beginTransaction(); session.beginTransaction();
@ -141,8 +140,5 @@ public class StoredProcedureResultSetMappingTest extends BaseUnitTestCase {
session.getTransaction().commit(); session.getTransaction().commit();
session.close(); session.close();
} }
finally {
sf.close();
}
} }
} }

View File

@ -145,91 +145,91 @@ public class StatsTest extends BaseUnitTestCase {
@Test @Test
public void testQueryStatGathering() { public void testQueryStatGathering() {
SessionFactory sf = buildBaseConfiguration() try (SessionFactory sf = buildBaseConfiguration()
.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" ) .setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" )
.buildSessionFactory(); .buildSessionFactory()) {
Session s = sf.openSession(); Session s = sf.openSession();
Transaction tx = s.beginTransaction(); Transaction tx = s.beginTransaction();
fillDb(s); fillDb( s );
tx.commit(); tx.commit();
s.close(); s.close();
s = sf.openSession(); s = sf.openSession();
tx = s.beginTransaction(); tx = s.beginTransaction();
final String continents = "from Continent"; final String continents = "from Continent";
int results = s.createQuery( continents ).list().size(); int results = s.createQuery( continents ).list().size();
QueryStatistics continentStats = sf.getStatistics().getQueryStatistics( continents ); QueryStatistics continentStats = sf.getStatistics().getQueryStatistics( continents );
assertNotNull( "stats were null", continentStats ); assertNotNull( "stats were null", continentStats );
assertEquals( "unexpected execution count", 1, continentStats.getExecutionCount() ); assertEquals( "unexpected execution count", 1, continentStats.getExecutionCount() );
assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() ); assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() );
long maxTime = continentStats.getExecutionMaxTime(); long maxTime = continentStats.getExecutionMaxTime();
assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() ); assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() );
// assertEquals( continents, stats.getQueryExecutionMaxTimeQueryString() ); // assertEquals( continents, stats.getQueryExecutionMaxTimeQueryString() );
Iterator itr = s.createQuery( continents ).list().iterator(); Iterator itr = s.createQuery( continents ).list().iterator();
// iterate() should increment the execution count // iterate() should increment the execution count
assertEquals( "unexpected execution count", 2, continentStats.getExecutionCount() ); assertEquals( "unexpected execution count", 2, continentStats.getExecutionCount() );
// but should not effect the cumulative row count // but should not effect the cumulative row count
assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() ); assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() );
Hibernate.close( itr ); Hibernate.close( itr );
ScrollableResults scrollableResults = s.createQuery( continents ).scroll(); ScrollableResults scrollableResults = s.createQuery( continents ).scroll();
// same deal with scroll()... // same deal with scroll()...
assertEquals( "unexpected execution count", 3, continentStats.getExecutionCount() ); assertEquals( "unexpected execution count", 3, continentStats.getExecutionCount() );
assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() ); assertEquals( "unexpected row count", results, continentStats.getExecutionRowCount() );
// scroll through data because SybaseASE15Dialect throws NullPointerException // scroll through data because SybaseASE15Dialect throws NullPointerException
// if data is not read before closing the ResultSet // if data is not read before closing the ResultSet
while ( scrollableResults.next() ) { while ( scrollableResults.next() ) {
// do nothing // do nothing
} }
scrollableResults.close(); scrollableResults.close();
tx.commit(); tx.commit();
s.close(); s.close();
// explicitly check that statistics for "split queries" get collected // explicitly check that statistics for "split queries" get collected
// under the original query // under the original query
sf.getStatistics().clear(); sf.getStatistics().clear();
s = sf.openSession(); s = sf.openSession();
tx = s.beginTransaction(); tx = s.beginTransaction();
final String localities = "from Locality"; final String localities = "from Locality";
results = s.createQuery( localities ).list().size(); results = s.createQuery( localities ).list().size();
QueryStatistics localityStats = sf.getStatistics().getQueryStatistics( localities ); QueryStatistics localityStats = sf.getStatistics().getQueryStatistics( localities );
assertNotNull( "stats were null", localityStats ); assertNotNull( "stats were null", localityStats );
// ...one for each split query // ...one for each split query
assertEquals( "unexpected execution count", 2, localityStats.getExecutionCount() ); assertEquals( "unexpected execution count", 2, localityStats.getExecutionCount() );
assertEquals( "unexpected row count", results, localityStats.getExecutionRowCount() ); assertEquals( "unexpected row count", results, localityStats.getExecutionRowCount() );
maxTime = localityStats.getExecutionMaxTime(); maxTime = localityStats.getExecutionMaxTime();
assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() ); assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() );
// assertEquals( localities, stats.getQueryExecutionMaxTimeQueryString() ); // assertEquals( localities, stats.getQueryExecutionMaxTimeQueryString() );
tx.commit(); tx.commit();
s.close(); s.close();
assertFalse( s.isOpen() ); assertFalse( s.isOpen() );
// native sql queries // native sql queries
sf.getStatistics().clear(); sf.getStatistics().clear();
s = sf.openSession(); s = sf.openSession();
tx = s.beginTransaction(); tx = s.beginTransaction();
final String sql = "select id, name from Country"; final String sql = "select id, name from Country";
results = s.createNativeQuery( sql ).addEntity( Country.class ).list().size(); results = s.createNativeQuery( sql ).addEntity( Country.class ).list().size();
QueryStatistics sqlStats = sf.getStatistics().getQueryStatistics( sql ); QueryStatistics sqlStats = sf.getStatistics().getQueryStatistics( sql );
assertNotNull( "sql stats were null", sqlStats ); assertNotNull( "sql stats were null", sqlStats );
assertEquals( "unexpected execution count", 1, sqlStats.getExecutionCount() ); assertEquals( "unexpected execution count", 1, sqlStats.getExecutionCount() );
assertEquals( "unexpected row count", results, sqlStats.getExecutionRowCount() ); assertEquals( "unexpected row count", results, sqlStats.getExecutionRowCount() );
maxTime = sqlStats.getExecutionMaxTime(); maxTime = sqlStats.getExecutionMaxTime();
assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() ); assertEquals( maxTime, sf.getStatistics().getQueryExecutionMaxTime() );
// assertEquals( sql, stats.getQueryExecutionMaxTimeQueryString() ); // assertEquals( sql, stats.getQueryExecutionMaxTimeQueryString() );
tx.commit(); tx.commit();
s.close(); s.close();
s = sf.openSession(); s = sf.openSession();
tx = s.beginTransaction(); tx = s.beginTransaction();
cleanDb( s ); cleanDb( s );
tx.commit(); tx.commit();
s.close(); s.close();
sf.close(); }
} }
private Continent fillDb(Session s) { private Continent fillDb(Session s) {

View File

@ -56,7 +56,7 @@ public class AuditedDynamicComponentTest extends BaseEnversFunctionalTestCase {
final ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() ); final ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() );
try { try {
config.buildSessionFactory( serviceRegistry ); config.buildSessionFactory( serviceRegistry ).close();
Assert.fail( "MappingException expected" ); Assert.fail( "MappingException expected" );
} }
catch ( MappingException e ) { catch ( MappingException e ) {

View File

@ -105,8 +105,13 @@ public class TestHelper {
additionalSettings.accept( ssrb ); additionalSettings.accept( ssrb );
final StandardServiceRegistry ssr = ssrb.build(); final StandardServiceRegistry ssr = ssrb.build();
try {
return (SessionFactoryImplementor) new MetadataSources( ssr ).buildMetadata().buildSessionFactory(); return (SessionFactoryImplementor) new MetadataSources( ssr ).buildMetadata().buildSessionFactory();
}
catch (Throwable t) {
ssr.close();
throw t;
}
} }
public static StandardServiceRegistryBuilder getStandardServiceRegistryBuilder() { public static StandardServiceRegistryBuilder getStandardServiceRegistryBuilder() {

View File

@ -35,11 +35,10 @@ import org.jboss.jandex.IndexView;
* @author Andrea Boriero * @author Andrea Boriero
*/ */
public class BootstrapContextImpl implements BootstrapContext { public class BootstrapContextImpl implements BootstrapContext {
public static final BootstrapContextImpl INSTANCE = new BootstrapContextImpl();
private BootstrapContext delegate; private final BootstrapContext delegate;
private BootstrapContextImpl() { public BootstrapContextImpl() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build(); StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build();
MetadataBuildingOptions buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry ); MetadataBuildingOptions buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry );
@ -150,4 +149,9 @@ public class BootstrapContextImpl implements BootstrapContext {
public void release() { public void release() {
delegate.release(); delegate.release();
} }
public void close() {
delegate.release();
delegate.getServiceRegistry().close();
}
} }

View File

@ -31,10 +31,6 @@ public class MetadataBuildingContextTestingImpl implements MetadataBuildingConte
private final ObjectNameNormalizer objectNameNormalizer; private final ObjectNameNormalizer objectNameNormalizer;
private final TypeDefinitionRegistryStandardImpl typeDefinitionRegistry; private final TypeDefinitionRegistryStandardImpl typeDefinitionRegistry;
public MetadataBuildingContextTestingImpl() {
this( new StandardServiceRegistryBuilder().build() );
}
public MetadataBuildingContextTestingImpl(StandardServiceRegistry serviceRegistry) { public MetadataBuildingContextTestingImpl(StandardServiceRegistry serviceRegistry) {
buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry ); buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry );
bootstrapContext = new BootstrapContextImpl( serviceRegistry, buildingOptions ); bootstrapContext = new BootstrapContextImpl( serviceRegistry, buildingOptions );

View File

@ -114,16 +114,34 @@ public abstract class BaseCoreFunctionalTestCase extends BaseUnitTestCase {
protected void buildSessionFactory(Consumer<Configuration> configurationAdapter) { protected void buildSessionFactory(Consumer<Configuration> configurationAdapter) {
// for now, build the configuration to get all the property settings // for now, build the configuration to get all the property settings
BootstrapServiceRegistry bootRegistry = buildBootstrapServiceRegistry(); BootstrapServiceRegistry bootRegistry = null;
configuration = constructAndConfigureConfiguration( bootRegistry ); try {
if ( configurationAdapter != null ) { bootRegistry = buildBootstrapServiceRegistry();
configurationAdapter.accept(configuration); configuration = constructAndConfigureConfiguration( bootRegistry );
if ( configurationAdapter != null ) {
configurationAdapter.accept( configuration );
}
serviceRegistry = buildServiceRegistry( bootRegistry, configuration );
// this is done here because Configuration does not currently support 4.0 xsd
afterConstructAndConfigureConfiguration( configuration );
sessionFactory = (SessionFactoryImplementor) configuration.buildSessionFactory( serviceRegistry );
afterSessionFactoryBuilt();
}
catch (Throwable t) {
if ( sessionFactory != null ) {
sessionFactory.close();
sessionFactory = null;
configuration = null;
}
if ( serviceRegistry != null ) {
serviceRegistry.destroy();
serviceRegistry = null;
}
else if ( bootRegistry != null ) {
bootRegistry.close();
}
throw t;
} }
serviceRegistry = buildServiceRegistry( bootRegistry, configuration );
// this is done here because Configuration does not currently support 4.0 xsd
afterConstructAndConfigureConfiguration( configuration );
sessionFactory = ( SessionFactoryImplementor ) configuration.buildSessionFactory( serviceRegistry );
afterSessionFactoryBuilt();
} }
protected void rebuildSessionFactory() { protected void rebuildSessionFactory() {
@ -278,17 +296,25 @@ public abstract class BaseCoreFunctionalTestCase extends BaseUnitTestCase {
} }
protected StandardServiceRegistryImpl buildServiceRegistry(BootstrapServiceRegistry bootRegistry, Configuration configuration) { protected StandardServiceRegistryImpl buildServiceRegistry(BootstrapServiceRegistry bootRegistry, Configuration configuration) {
Properties properties = new Properties(); try {
properties.putAll( configuration.getProperties() ); Properties properties = new Properties();
ConfigurationHelper.resolvePlaceHolders( properties ); properties.putAll( configuration.getProperties() );
ConfigurationHelper.resolvePlaceHolders( properties );
StandardServiceRegistryBuilder cfgRegistryBuilder = configuration.getStandardServiceRegistryBuilder(); StandardServiceRegistryBuilder cfgRegistryBuilder = configuration.getStandardServiceRegistryBuilder();
StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder( bootRegistry, cfgRegistryBuilder.getAggregatedCfgXml() ) StandardServiceRegistryBuilder registryBuilder = new StandardServiceRegistryBuilder( bootRegistry, cfgRegistryBuilder.getAggregatedCfgXml() )
.applySettings( properties ); .applySettings( properties );
prepareBasicRegistryBuilder( registryBuilder ); prepareBasicRegistryBuilder( registryBuilder );
return (StandardServiceRegistryImpl) registryBuilder.build(); return (StandardServiceRegistryImpl) registryBuilder.build();
}
catch (Throwable t) {
if ( bootRegistry != null ) {
bootRegistry.close();
}
throw t;
}
} }
protected void prepareBasicRegistryBuilder(StandardServiceRegistryBuilder serviceRegistryBuilder) { protected void prepareBasicRegistryBuilder(StandardServiceRegistryBuilder serviceRegistryBuilder) {

View File

@ -39,7 +39,7 @@ public class PreparedStatementSpyConnectionProvider extends ConnectionProviderDe
private static final MockSettings MOCK_SETTINGS = Mockito.withSettings() private static final MockSettings MOCK_SETTINGS = Mockito.withSettings()
.stubOnly() //important optimisation: uses far less memory, at tradeoff of mocked methods no longer being verifiable but we often don't need that. .stubOnly() //important optimisation: uses far less memory, at tradeoff of mocked methods no longer being verifiable but we often don't need that.
.defaultAnswer( org.mockito.Answers.CALLS_REAL_METHODS ); .defaultAnswer( org.mockito.Answers.CALLS_REAL_METHODS );
private static final MockSettings VERIFIEABLE_MOCK_SETTINGS = Mockito.withSettings() private static final MockSettings VERIFIABLE_MOCK_SETTINGS = Mockito.withSettings()
.defaultAnswer( org.mockito.Answers.CALLS_REAL_METHODS ); .defaultAnswer( org.mockito.Answers.CALLS_REAL_METHODS );
// We must keep around the mocked connections, otherwise they are garbage collected and trigger finalizers // We must keep around the mocked connections, otherwise they are garbage collected and trigger finalizers
// Since we use CALLS_REAL_METHODS this might close underlying IO resources which makes other objects unusable // Since we use CALLS_REAL_METHODS this might close underlying IO resources which makes other objects unusable
@ -76,8 +76,8 @@ public class PreparedStatementSpyConnectionProvider extends ConnectionProviderDe
public PreparedStatementSpyConnectionProvider(boolean allowMockVerificationOnStatements, boolean allowMockVerificationOnConnections, boolean forceSupportsAggressiveRelease) { public PreparedStatementSpyConnectionProvider(boolean allowMockVerificationOnStatements, boolean allowMockVerificationOnConnections, boolean forceSupportsAggressiveRelease) {
super(forceSupportsAggressiveRelease); super(forceSupportsAggressiveRelease);
this.settingsForStatements = allowMockVerificationOnStatements ? VERIFIEABLE_MOCK_SETTINGS : MOCK_SETTINGS; this.settingsForStatements = allowMockVerificationOnStatements ? VERIFIABLE_MOCK_SETTINGS : MOCK_SETTINGS;
this.settingsForConnections = allowMockVerificationOnConnections ? VERIFIEABLE_MOCK_SETTINGS : MOCK_SETTINGS; this.settingsForConnections = allowMockVerificationOnConnections ? VERIFIABLE_MOCK_SETTINGS : MOCK_SETTINGS;
} }
protected Connection actualConnection() throws SQLException { protected Connection actualConnection() throws SQLException {

View File

@ -63,7 +63,6 @@ public class ServiceRegistryExtension
ServiceRegistryScopeImpl existingScope = (ServiceRegistryScopeImpl) store.get( REGISTRY_KEY ); ServiceRegistryScopeImpl existingScope = (ServiceRegistryScopeImpl) store.get( REGISTRY_KEY );
if ( existingScope == null ) { if ( existingScope == null ) {
final ServiceRegistryScopeImpl scope = new ServiceRegistryScopeImpl( );
log.debugf( "Creating ServiceRegistryScope - %s", context.getDisplayName() ); log.debugf( "Creating ServiceRegistryScope - %s", context.getDisplayName() );
final BootstrapServiceRegistryProducer bsrProducer; final BootstrapServiceRegistryProducer bsrProducer;
@ -114,7 +113,8 @@ public class ServiceRegistryExtension
}; };
} }
scope.createRegistry( bsrProducer, ssrProducer ); final ServiceRegistryScopeImpl scope = new ServiceRegistryScopeImpl( bsrProducer, ssrProducer );
scope.getRegistry();
locateExtensionStore( testInstance, context ).put( REGISTRY_KEY, scope ); locateExtensionStore( testInstance, context ).put( REGISTRY_KEY, scope );
@ -209,7 +209,6 @@ public class ServiceRegistryExtension
@Override @Override
public void postProcessTestInstance(Object testInstance, ExtensionContext context) { public void postProcessTestInstance(Object testInstance, ExtensionContext context) {
log.tracef( "#postProcessTestInstance(%s, %s)", testInstance, context.getDisplayName() ); log.tracef( "#postProcessTestInstance(%s, %s)", testInstance, context.getDisplayName() );
findServiceRegistryScope( testInstance, context ); findServiceRegistryScope( testInstance, context );
} }
@ -249,24 +248,26 @@ public class ServiceRegistryExtension
private StandardServiceRegistry registry; private StandardServiceRegistry registry;
private boolean active = true; private boolean active = true;
public ServiceRegistryScopeImpl() { public ServiceRegistryScopeImpl(BootstrapServiceRegistryProducer bsrProducer, ServiceRegistryProducer ssrProducer) {
}
public StandardServiceRegistry createRegistry(BootstrapServiceRegistryProducer bsrProducer, ServiceRegistryProducer ssrProducer) {
this.bsrProducer = bsrProducer; this.bsrProducer = bsrProducer;
this.ssrProducer = ssrProducer; this.ssrProducer = ssrProducer;
}
verifyActive(); private StandardServiceRegistry createRegistry() {
BootstrapServiceRegistryBuilder bsrb = new BootstrapServiceRegistryBuilder().enableAutoClose(); BootstrapServiceRegistryBuilder bsrb = new BootstrapServiceRegistryBuilder().enableAutoClose();
final org.hibernate.boot.registry.BootstrapServiceRegistry bsr = bsrProducer.produceServiceRegistry( bsrb ); final org.hibernate.boot.registry.BootstrapServiceRegistry bsr = bsrProducer.produceServiceRegistry( bsrb );
try {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder( bsr );
// we will close it ourselves explicitly.
ssrb.disableAutoClose();
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder( bsr ); return registry = ssrProducer.produceServiceRegistry( ssrb );
// we will close it ourselves explicitly. }
ssrb.disableAutoClose(); catch (Throwable t) {
bsr.close();
return ssrProducer.produceServiceRegistry( ssrb ); throw t;
}
} }
private void verifyActive() { private void verifyActive() {
@ -280,7 +281,7 @@ public class ServiceRegistryExtension
verifyActive(); verifyActive();
if ( registry == null ) { if ( registry == null ) {
registry = createRegistry( bsrProducer, ssrProducer ); registry = createRegistry();
} }
return registry; return registry;

View File

@ -132,8 +132,8 @@ public class ViburDBCPConnectionProviderTest extends BaseCoreFunctionalTestCase
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private static void executeAndVerifySelect(Session session) { private static void executeAndVerifySelect(Session session) {
List<Actor> list = session.createQuery("from Actor where firstName = ?0") List<Actor> list = session.createQuery("from Actor where firstName = ?1")
.setParameter(0, "CHRISTIAN").list(); .setParameter(1, "CHRISTIAN").list();
Set<String> expectedLastNames = new HashSet<>(Arrays.asList("GABLE", "AKROYD", "NEESON")); Set<String> expectedLastNames = new HashSet<>(Arrays.asList("GABLE", "AKROYD", "NEESON"));
assertEquals(expectedLastNames.size(), list.size()); assertEquals(expectedLastNames.size(), list.size());