Backport of changes from 6314395edf05117f374a8de5e5e506840a337ebb on

wip/6.0 (Fix connection leaks by properly closing service registries)
This commit is contained in:
Christian Beikov 2021-09-09 15:53:14 +02:00 committed by Jan Schatteman
parent e0d262cc3f
commit 0af8755949
65 changed files with 1176 additions and 1016 deletions

View File

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

View File

@ -33,6 +33,7 @@
import org.hibernate.boot.cfgxml.spi.CfgXmlAccessService;
import org.hibernate.boot.cfgxml.spi.LoadedConfig;
import org.hibernate.boot.cfgxml.spi.MappingReference;
import org.hibernate.boot.model.convert.spi.ConverterDescriptor;
import org.hibernate.boot.model.process.spi.ManagedResources;
import org.hibernate.boot.model.process.spi.MetadataBuildingProcess;
import org.hibernate.boot.registry.BootstrapServiceRegistry;
@ -222,7 +223,7 @@ private EntityManagerFactoryBuilderImpl(
providedClassLoader,
providedClassLoaderService
);
try {
// merge configuration sources and build the "standard" service registry
final StandardServiceRegistryBuilder ssrBuilder = getStandardServiceRegistryBuilder( bsr );
@ -245,9 +246,9 @@ private EntityManagerFactoryBuilderImpl(
configureIdentifierGenerators( standardServiceRegistry );
final MetadataSources metadataSources = new MetadataSources( bsr );
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder( standardServiceRegistry );
List<AttributeConverterDefinition> attributeConverterDefinitions = applyMappingResources( metadataSources );
this.metamodelBuilder = (MetadataBuilderImplementor) metadataSources.getMetadataBuilder( standardServiceRegistry );
applyMetamodelBuilderSettings( mergedSettings, attributeConverterDefinitions );
applyMetadataBuilderContributor();
@ -257,7 +258,8 @@ private EntityManagerFactoryBuilderImpl(
final CfgXmlAccessService cfgXmlAccessService = standardServiceRegistry.getService( CfgXmlAccessService.class );
if ( cfgXmlAccessService.getAggregatedConfig() != null ) {
if ( cfgXmlAccessService.getAggregatedConfig().getMappingReferences() != null ) {
for ( MappingReference mappingReference : cfgXmlAccessService.getAggregatedConfig().getMappingReferences() ) {
for ( MappingReference mappingReference : cfgXmlAccessService.getAggregatedConfig()
.getMappingReferences() ) {
mappingReference.apply( metadataSources );
}
}
@ -297,6 +299,12 @@ private EntityManagerFactoryBuilderImpl(
// 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;
}
}
/**
* Extension point for subclasses. Used by Hibernate Reactive
@ -532,8 +540,9 @@ private MergedSettings mergeSettings(
if ( keyString.startsWith( JACC_PREFIX ) ) {
if( !JACC_CONTEXT_ID.equals( keyString ) && !JACC_ENABLED.equals( keyString )) {
if ( jaccContextId == null ) {
LOG.debug(
"Found JACC permission grant [%s] in properties, but no JACC context id was specified; ignoring"
LOG.debugf(
"Found JACC permission grant [%s] in properties, but no JACC context id was specified; ignoring",
keyString
);
}
else {
@ -716,7 +725,7 @@ else if ( persistenceUnit.getTransactionType() != null ) {
if ( txnType == null ) {
// is it more appropriate to have this be based on bootstrap entry point (EE vs SE)?
LOG.debugf( "PersistenceUnitTransactionType not specified - falling back to RESOURCE_LOCAL" );
LOG.debug( "PersistenceUnitTransactionType not specified - falling back to RESOURCE_LOCAL" );
txnType = PersistenceUnitTransactionType.RESOURCE_LOCAL;
}

View File

@ -34,8 +34,8 @@ public class CacheKeyImplementationHashCodeTest {
@Test
@TestForIssue( jiraKey = "HHH-12746")
public void test() {
ServiceRegistryImplementor serviceRegistry = (
ServiceRegistryImplementor) new StandardServiceRegistryBuilder().build();
try (ServiceRegistryImplementor serviceRegistry = (
ServiceRegistryImplementor) new StandardServiceRegistryBuilder().build()) {
MetadataSources ms = new MetadataSources( serviceRegistry );
ms.addAnnotatedClass( AnEntity.class ).addAnnotatedClass( AnotherEntity.class );
Metadata metadata = ms.buildMetadata();
@ -51,6 +51,7 @@ public void test() {
);
assertFalse( anEntityCacheKey.equals( anotherEntityCacheKey ) );
}
}
private CacheKeyImplementation createCacheKeyImplementation(
int id,

View File

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

View File

@ -34,15 +34,13 @@
public class SequenceStyleConfigUnitTest extends BaseUnitTestCase {
/**
* Test all params defaulted with a dialect supporting sequences
* Test all params defaulted with a dialect supporting pooled sequences
*/
@Test
public void testDefaultedSequenceBackedConfiguration() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build();
try {
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() )
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
SequenceStyleGenerator generator = new SequenceStyleGenerator();
generator.configure( StandardBasicTypes.LONG, props, serviceRegistry );
@ -55,9 +53,6 @@ public void testDefaultedSequenceBackedConfiguration() {
assertClassAssignability( NoopOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
private Properties buildGeneratorPropertiesBase(StandardServiceRegistry serviceRegistry) {
@ -74,11 +69,9 @@ private Properties buildGeneratorPropertiesBase(StandardServiceRegistry serviceR
*/
@Test
public void testDefaultedTableBackedConfiguration() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
SequenceStyleGenerator generator = new SequenceStyleGenerator();
generator.configure( StandardBasicTypes.LONG, props, serviceRegistry );
@ -91,9 +84,6 @@ public void testDefaultedTableBackedConfiguration() {
assertClassAssignability( NoopOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
/**
@ -104,11 +94,9 @@ public void testDefaultedTableBackedConfiguration() {
@Test
public void testDefaultOptimizerBasedOnIncrementBackedBySequence() {
// 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() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -123,16 +111,11 @@ public void testDefaultOptimizerBasedOnIncrementBackedBySequence() {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
// 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() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -146,9 +129,6 @@ public void testDefaultOptimizerBasedOnIncrementBackedBySequence() {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
/**
@ -158,11 +138,9 @@ public void testDefaultOptimizerBasedOnIncrementBackedBySequence() {
*/
@Test
public void testDefaultOptimizerBasedOnIncrementBackedByTable() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, TableDialect.class.getName() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "10" );
@ -176,9 +154,6 @@ public void testDefaultOptimizerBasedOnIncrementBackedByTable() {
assertClassAssignability( PooledOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
/**
@ -186,11 +161,9 @@ public void testDefaultOptimizerBasedOnIncrementBackedByTable() {
*/
@Test
public void testForceTableUse() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.FORCE_TBL_PARAM, "true" );
@ -204,9 +177,6 @@ public void testForceTableUse() {
assertClassAssignability( NoopOptimizer.class, generator.getOptimizer().getClass() );
assertEquals( SequenceStyleGenerator.DEF_SEQUENCE_NAME, generator.getDatabaseStructure().getName() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
/**
@ -214,12 +184,10 @@ public void testForceTableUse() {
*/
@Test
public void testExplicitOptimizerWithExplicitIncrementSize() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, SequenceDialect.class.getName() )
.build();
// 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 );
props.setProperty( SequenceStyleGenerator.OPT_PARAM, StandardOptimizerDescriptor.NONE.getExternalName() );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" );
@ -264,18 +232,13 @@ public void testExplicitOptimizerWithExplicitIncrementSize() {
assertEquals( 20, generator.getOptimizer().getIncrementSize() );
assertEquals( 20, generator.getDatabaseStructure().getIncrementSize() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
@Test
public void testPreferredPooledOptimizerSetting() {
StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.DIALECT, PooledSequenceDialect.class.getName() )
.build();
try {
.build()) {
Properties props = buildGeneratorPropertiesBase( serviceRegistry );
props.setProperty( SequenceStyleGenerator.INCREMENT_PARAM, "20" );
SequenceStyleGenerator generator = new SequenceStyleGenerator();
@ -304,9 +267,6 @@ public void testPreferredPooledOptimizerSetting() {
assertClassAssignability( SequenceStructure.class, generator.getDatabaseStructure().getClass() );
assertClassAssignability( PooledLoThreadLocalOptimizer.class, generator.getOptimizer().getClass() );
}
finally {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
}
}
public static class TableDialect extends Dialect {

View File

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

View File

@ -11,7 +11,7 @@
import javax.persistence.ValidationMode;
import org.hibernate.HibernateException;
import org.hibernate.jpa.AvailableSettings;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl;
import org.hibernate.jpa.boot.spi.Bootstrap;
import org.hibernate.jpa.test.PersistenceUnitInfoAdapter;
@ -32,22 +32,25 @@ public class ConfigurationObjectSettingTest extends BaseUnitTestCase {
public void testContainerBootstrapSharedCacheMode() {
// first, via the integration vars
PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter();
EntityManagerFactoryBuilderImpl builder = null;
{
// as object
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty,
Collections.singletonMap( AvailableSettings.SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
);
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.SHARED_CACHE_MODE ) );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
}
builder.cancel();
{
// as string
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty,
Collections.singletonMap( AvailableSettings.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.SHARED_CACHE_MODE ) );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
}
builder.cancel();
// next, via the PUI
PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() {
@ -57,43 +60,48 @@ public SharedCacheMode getSharedCacheMode() {
}
};
{
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter,
null
);
assertEquals( SharedCacheMode.ENABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.SHARED_CACHE_MODE ) );
assertEquals( SharedCacheMode.ENABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
}
builder.cancel();
// via both, integration vars should take precedence
{
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter,
Collections.singletonMap( AvailableSettings.SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
Collections.singletonMap( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.DISABLE_SELECTIVE )
);
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.SHARED_CACHE_MODE ) );
assertEquals( SharedCacheMode.DISABLE_SELECTIVE, builder.getConfigurationValues().get( AvailableSettings.JPA_SHARED_CACHE_MODE ) );
}
builder.cancel();
}
@Test
public void testContainerBootstrapValidationMode() {
// first, via the integration vars
PersistenceUnitInfoAdapter empty = new PersistenceUnitInfoAdapter();
EntityManagerFactoryBuilderImpl builder = null;
{
// as object
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty,
Collections.singletonMap( AvailableSettings.VALIDATION_MODE, ValidationMode.CALLBACK )
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK )
);
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.VALIDATION_MODE ) );
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
}
builder.cancel();
{
// as string
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
empty,
Collections.singletonMap( AvailableSettings.VALIDATION_MODE, ValidationMode.CALLBACK.name() )
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.CALLBACK.name() )
);
assertEquals( ValidationMode.CALLBACK.name(), builder.getConfigurationValues().get( AvailableSettings.VALIDATION_MODE ) );
assertEquals( ValidationMode.CALLBACK.name(), builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
}
builder.cancel();
// next, via the PUI
PersistenceUnitInfoAdapter adapter = new PersistenceUnitInfoAdapter() {
@ -103,21 +111,23 @@ public ValidationMode getValidationMode() {
}
};
{
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter,
null
);
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.VALIDATION_MODE ) );
assertEquals( ValidationMode.CALLBACK, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
}
builder.cancel();
// via both, integration vars should take precedence
{
EntityManagerFactoryBuilderImpl builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
builder = (EntityManagerFactoryBuilderImpl) Bootstrap.getEntityManagerFactoryBuilder(
adapter,
Collections.singletonMap( AvailableSettings.VALIDATION_MODE, ValidationMode.NONE )
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_MODE, ValidationMode.NONE )
);
assertEquals( ValidationMode.NONE, builder.getConfigurationValues().get( AvailableSettings.VALIDATION_MODE ) );
assertEquals( ValidationMode.NONE, builder.getConfigurationValues().get( AvailableSettings.JPA_VALIDATION_MODE ) );
}
builder.cancel();
}
@Test
@ -127,8 +137,8 @@ public void testContainerBootstrapValidationFactory() {
try {
Bootstrap.getEntityManagerFactoryBuilder(
adapter,
Collections.singletonMap( AvailableSettings.VALIDATION_FACTORY, token )
);
Collections.singletonMap( AvailableSettings.JPA_VALIDATION_FACTORY, token )
).cancel();
fail( "Was expecting error as token did not implement ValidatorFactory" );
}
catch ( HibernateException e ) {

View File

@ -21,8 +21,9 @@
import org.hibernate.jpa.boot.spi.Bootstrap;
import org.hibernate.jpa.boot.spi.EntityManagerFactoryBuilder;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -63,6 +64,13 @@ public void setUp() throws IOException {
);
}
@After
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test
@TestForIssue(jiraKey = "HHH-10972")
public void testEncoding() throws Exception {

View File

@ -27,8 +27,9 @@
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.tool.schema.spi.CommandAcceptanceException;
import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.hibernate.testing.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -60,6 +61,13 @@ public void setUp() throws IOException, SQLException {
);
}
@After
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test
@TestForIssue(jiraKey = "HHH-12192")
public void testErrorMessageContainsTheFailingDDLCommand() {
@ -83,7 +91,6 @@ public void testErrorMessageContainsTheFailingDDLCommand() {
SQLException root = (SQLException) e.getCause().getCause().getCause();
assertEquals( "Expected", root.getMessage() );
}
}
@ -119,5 +126,4 @@ private Map getConfig() {
config.put( org.hibernate.jpa.AvailableSettings.LOADED_CLASSES, classes );
return config;
}
}

View File

@ -25,8 +25,9 @@
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.tool.schema.spi.CommandAcceptanceException;
import org.hibernate.tool.schema.spi.SchemaManagementException;
import org.hibernate.testing.TestForIssue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -52,12 +53,19 @@ public void setUp() {
);
}
@After
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test
@TestForIssue(jiraKey = "HHH-12192")
public void testErrorMessageContainsTheFailingDDLCommand() {
try {
entityManagerFactoryBuilder.generateSchema();
fail( "Should haave thrown IOException" );
fail( "Should have thrown IOException" );
}
catch (Exception e) {
assertTrue( e instanceof PersistenceException );
@ -126,7 +134,6 @@ public void flush() throws IOException {
@Override
public void close() throws IOException {
}
}
}

View File

@ -24,6 +24,7 @@
import org.hibernate.jpa.boot.spi.PersistenceUnitDescriptor;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@ -53,6 +54,13 @@ public void setUp() throws IOException {
);
}
@After
public void destroy() {
if ( entityManagerFactoryBuilder != null ) {
entityManagerFactoryBuilder.cancel();
}
}
@Test
@TestForIssue(jiraKey = "10601")
public void testGenerateSchemaDoesNotProduceTheSameStatementTwice() throws Exception {
@ -109,5 +117,4 @@ private Map getConfig() {
config.put( org.hibernate.jpa.AvailableSettings.LOADED_CLASSES, classes );
return config;
}
}

View File

@ -36,7 +36,7 @@ public void testNamedSessionFactorySerialization() throws Exception {
Configuration cfg = new Configuration()
.setProperty( AvailableSettings.SESSION_FACTORY_NAME, NAME )
.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
// different VM
@ -44,13 +44,19 @@ public void testNamedSessionFactorySerialization() throws Exception {
// deregister under this uuid...
SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, NAME, false, null );
// and then register under a different uuid...
SessionFactoryRegistry.INSTANCE.addSessionFactory( "some-other-uuid", NAME, false, factory, null );
SessionFactoryRegistry.INSTANCE.addSessionFactory(
"some-other-uuid",
NAME,
false,
factory,
null
);
SessionFactory factory2 = (SessionFactory) SerializationHelper.clone( factory );
assertSame( factory, factory2 );
SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", NAME, false, null );
factory.close();
}
assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() );
}
@ -61,7 +67,7 @@ public void testUnNamedSessionFactorySerialization() throws Exception {
// here, the test should fail based just on attempted uuid resolution
Configuration cfg = new Configuration()
.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
// different VM
@ -69,7 +75,13 @@ public void testUnNamedSessionFactorySerialization() throws Exception {
// deregister under this uuid...
SessionFactoryRegistry.INSTANCE.removeSessionFactory( uuid, null, false, null );
// and then register under a different uuid...
SessionFactoryRegistry.INSTANCE.addSessionFactory( "some-other-uuid", null, false, factory, null );
SessionFactoryRegistry.INSTANCE.addSessionFactory(
"some-other-uuid",
null,
false,
factory,
null
);
try {
SerializationHelper.clone( factory );
@ -79,7 +91,7 @@ public void testUnNamedSessionFactorySerialization() throws Exception {
}
SessionFactoryRegistry.INSTANCE.removeSessionFactory( "some-other-uuid", null, false, null );
factory.close();
}
assertFalse( SessionFactoryRegistry.INSTANCE.hasRegistrations() );
}

View File

@ -15,6 +15,8 @@
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.Startable;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.testing.TestForIssue;
@ -25,9 +27,18 @@
import static org.junit.Assert.assertTrue;
public class ServiceRegistryTest {
private final ServiceRegistry registry = buildRegistry();
private ServiceRegistry registry;
private final static int NUMBER_OF_THREADS = 100;
private StandardServiceRegistryBuilder standardServiceRegistryBuilder;
@Before
public void init() {
registry = buildRegistry();
}
@After
public void destroy() {
registry.close();
}
@Test
@TestForIssue(jiraKey = "HHH-10427")
@ -46,9 +57,6 @@ public void testOnlyOneInstanceOfTheServiceShouldBeCreated() throws InterruptedE
}
}
standardServiceRegistryBuilder.destroy( registry );
}
@Test
@ -82,8 +90,7 @@ public void testRequireServiceThrowsAnExceptionWhenTheServiceInitiatorInitiateSe
}
private ServiceRegistry buildRegistry() {
standardServiceRegistryBuilder = new StandardServiceRegistryBuilder();
return standardServiceRegistryBuilder.addInitiator( new SlowServiceInitiator() )
return new StandardServiceRegistryBuilder().addInitiator( new SlowServiceInitiator() )
.addInitiator( new NullServiceInitiator() )
.build();
}

View File

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

View File

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

View File

@ -31,11 +31,11 @@
*/
public class ConfigurationTest {
@Test
public void testDeclarativeMix() throws Exception {
public void testDeclarativeMix() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory();
try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf );
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
@ -45,10 +45,11 @@ public void testDeclarativeMix() throws Exception {
assertEquals( 0, q.list().size() );
tx.commit();
s.close();
sf.close();
}
}
@Test
public void testIgnoringHbm() throws Exception {
public void testIgnoringHbm() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
@ -85,12 +86,12 @@ public void testIgnoringHbm() throws Exception {
}
@Test
public void testPrecedenceHbm() throws Exception {
public void testPrecedenceHbm() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
cfg.addAnnotatedClass( Boat.class );
SessionFactory sf = cfg.buildSessionFactory();
try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf );
Session s = sf.openSession();
s.getTransaction().begin();
@ -107,16 +108,17 @@ public void testPrecedenceHbm() throws Exception {
//s.getTransaction().commit();
tx.commit();
s.close();
sf.close();
}
}
@Test
public void testPrecedenceAnnotation() throws Exception {
public void testPrecedenceAnnotation() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( Configuration.ARTEFACT_PROCESSING_ORDER, "class, hbm" );
cfg.addAnnotatedClass( Boat.class );
SessionFactory sf = cfg.buildSessionFactory();
try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf );
Session s = sf.openSession();
s.getTransaction().begin();
@ -132,15 +134,16 @@ public void testPrecedenceAnnotation() throws Exception {
s.delete( boat );
tx.commit();
s.close();
sf.close();
}
}
@Test
public void testHbmWithSubclassExtends() throws Exception {
public void testHbmWithSubclassExtends() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.addClass( Ferry.class );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory();
try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf );
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
@ -150,15 +153,16 @@ public void testHbmWithSubclassExtends() throws Exception {
assertEquals( 0, q.list().size() );
tx.commit();
s.close();
sf.close();
}
}
@Test
public void testAnnReferencesHbm() throws Exception {
public void testAnnReferencesHbm() {
Configuration cfg = new Configuration();
cfg.configure( "org/hibernate/test/annotations/hibernate.cfg.xml" );
cfg.addAnnotatedClass( Port.class );
cfg.setProperty( Environment.HBM2DDL_AUTO, "create-drop" );
SessionFactory sf = cfg.buildSessionFactory();
try (SessionFactory sf = cfg.buildSessionFactory()) {
assertNotNull( sf );
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
@ -168,6 +172,6 @@ public void testAnnReferencesHbm() throws Exception {
assertEquals( 0, q.list().size() );
tx.commit();
s.close();
sf.close();
}
}
}

View File

@ -44,6 +44,7 @@ public void testDeclarativeMix() throws Exception {
if ( serviceRegistry != null ) {
ServiceRegistryBuilder.destroy( serviceRegistry );
}
cfg.getStandardServiceRegistryBuilder().getBootstrapServiceRegistry().close();
}
}
}

View File

@ -60,6 +60,7 @@ public void testConfigurationMethods() throws Exception {
if ( serviceRegistry != null ) {
ServiceRegistryBuilder.destroy( serviceRegistry );
}
ac.getStandardServiceRegistryBuilder().getBootstrapServiceRegistry().close();
}
}
}

View File

@ -11,13 +11,14 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import org.jboss.logging.Logger;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.hibernate.MappingException;
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.Environment;
import org.hibernate.service.ServiceRegistry;
@ -46,8 +47,12 @@ public void setUp() {
@After
public void tearDown() {
if(sessionFactory !=null) sessionFactory.close();
if (serviceRegistry != null) ServiceRegistryBuilder.destroy(serviceRegistry);
if(sessionFactory !=null) {
sessionFactory.close();
}
if (serviceRegistry != null) {
ServiceRegistryBuilder.destroy(serviceRegistry);
}
}
@Test
@ -83,11 +88,11 @@ public void testBackquotes() {
@Test
@TestForIssue( jiraKey = "HHH-4647" )
public void testInvalidReferenceToQuotedTableName() {
try {
Configuration config = new Configuration();
try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
Configuration config = new Configuration( serviceRegistry );
config.addAnnotatedClass( Printer.class );
config.addAnnotatedClass( PrinterCable.class );
sessionFactory = config.buildSessionFactory( serviceRegistry );
sessionFactory = config.buildSessionFactory( this.serviceRegistry );
fail( "expected MappingException to be thrown" );
}
//we WANT MappingException to be thrown

View File

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

View File

@ -37,11 +37,9 @@ public class EmbeddableIntegratorTest extends BaseUnitTestCase {
*/
@Test
public void testWithoutIntegrator() {
SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
try (SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
.setProperty( "hibernate.hbm2ddl.auto", "create-drop" )
.buildSessionFactory();
try {
.buildSessionFactory()) {
Session sess = sf.openSession();
try {
sess.getTransaction().begin();
@ -62,20 +60,14 @@ public void testWithoutIntegrator() {
}
sess.close();
}
finally {
sf.close();
}
}
@Test
public void testWithTypeContributor() {
SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
try (SessionFactory sf = new Configuration().addAnnotatedClass( Investor.class )
.registerTypeContributor( new InvestorTypeContributor() )
.setProperty( "hibernate.hbm2ddl.auto", "create-drop" )
.buildSessionFactory();
Session sess = sf.openSession();
try {
.buildSessionFactory(); Session sess = sf.openSession()) {
sess.getTransaction().begin();
Investor myInv = getInvestor();
myInv.setId( 2L );
@ -86,13 +78,6 @@ public void testWithTypeContributor() {
Investor inv = (Investor) sess.get( Investor.class, 2L );
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

@ -61,9 +61,6 @@ protected void buildSessionFactory() {
"@OneToMany, @ManyToMany or @ElementCollection cannot be used inside an @Embeddable that is also contained within an @ElementCollection"
) );
}
finally {
serviceRegistry().destroy();
}
}
@Test

View File

@ -61,9 +61,6 @@ protected void buildSessionFactory() {
"@OneToMany, @ManyToMany or @ElementCollection cannot be used inside an @Embeddable that is also contained within an @ElementCollection"
) );
}
finally {
serviceRegistry().destroy();
}
}
@Test

View File

@ -55,9 +55,6 @@ protected void buildSessionFactory() {
"@OneToMany, @ManyToMany or @ElementCollection cannot be used inside an @Embeddable that is also contained within an @ElementCollection"
) );
}
finally {
serviceRegistry().destroy();
}
}
@Test

View File

@ -53,9 +53,6 @@ protected void buildSessionFactory() {
"@OneToMany, @ManyToMany or @ElementCollection cannot be used inside an @Embeddable that is also contained within an @ElementCollection"
) );
}
finally {
serviceRegistry().destroy();
}
}
@Test

View File

@ -57,9 +57,9 @@ public void testFetchProfileConfigured() {
config.addAnnotatedClass( Order.class );
config.addAnnotatedClass( SupportTickets.class );
config.addAnnotatedClass( Country.class );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry
);
)) {
assertTrue(
"fetch profile not parsed properly",
@ -69,7 +69,7 @@ public void testFetchProfileConfigured() {
"package info should not be parsed",
sessionImpl.containsFetchProfileDefinition( "package-profile-1" )
);
sessionImpl.close();
}
}
@Test
@ -148,15 +148,15 @@ public void testXmlOverride() {
.getContextClassLoader()
.getResourceAsStream( "org/hibernate/test/annotations/fetchprofile/mappings.hbm.xml" );
config.addInputStream( is );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry
);
)) {
assertTrue(
"fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "orders-profile" )
);
sessionImpl.close();
}
// now the same with no xml
final MetadataSources metadataSources = new MetadataSources()
@ -187,9 +187,9 @@ public void testPackageConfiguredFetchProfile() {
config.addAnnotatedClass( SupportTickets.class );
config.addAnnotatedClass( Country.class );
config.addPackage( Customer.class.getPackage().getName() );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry
);
)) {
assertTrue(
"fetch profile not parsed properly",
@ -199,6 +199,6 @@ public void testPackageConfiguredFetchProfile() {
"fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "package-profile-2" )
);
sessionImpl.close();
}
}
}

View File

@ -34,9 +34,9 @@ public void testFetchProfileConfigured() {
Configuration config = new Configuration();
config.addAnnotatedClass( Customer6.class );
config.addAnnotatedClass( Address.class );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry
);
)) {
assertTrue(
"fetch profile not parsed properly",
@ -46,7 +46,7 @@ public void testFetchProfileConfigured() {
"fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "customer-with-address" )
);
sessionImpl.close();
}
}
@Test
@ -55,9 +55,9 @@ public void testPackageConfiguredFetchProfile() {
config.addAnnotatedClass( Customer6.class );
config.addAnnotatedClass( Address.class );
config.addPackage( Address.class.getPackage().getName() );
SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
try (SessionFactoryImplementor sessionImpl = ( SessionFactoryImplementor ) config.buildSessionFactory(
serviceRegistry
);
)) {
assertTrue(
"fetch profile not parsed properly",
@ -67,7 +67,7 @@ public void testPackageConfiguredFetchProfile() {
"fetch profile not parsed properly",
sessionImpl.containsFetchProfileDefinition( "mappedBy-package-profile-2" )
);
sessionImpl.close();
}
}
}

View File

@ -18,6 +18,8 @@
import org.hibernate.annotations.JoinFormula;
import org.hibernate.boot.Metadata;
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.StandardServiceRegistryBuilder;
@ -50,7 +52,8 @@ public void after() {
@TestForIssue( jiraKey = "HHH-9897" )
@FailureExpected( jiraKey = "HHH-9897" )
public void testUseOfJoinColumnOrFormula() {
Metadata metadata = new MetadataSources()
try (BootstrapServiceRegistry serviceRegistry = new BootstrapServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( A.class )
.addAnnotatedClass( D.class )
.buildMetadata();
@ -60,6 +63,7 @@ public void testUseOfJoinColumnOrFormula() {
// use the formula (it expects Columns too)
metadata.buildSessionFactory().close();
}
}
@Entity( name = "A" )
@Table( name = "A" )

View File

@ -11,6 +11,7 @@
import javax.persistence.AttributeOverride;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@ -46,17 +47,19 @@ public Class<?>[] getAnnotatedClasses() {
};
}
@Override
public void buildEntityManagerFactory() {
public EntityManagerFactory produceEntityManagerFactory() {
Triggerable warningLogged = logInspection.watchForLogMessages( "HHH000499:" );
super.buildEntityManagerFactory();
EntityManagerFactory entityManagerFactory = entityManagerFactory();
assertTrue("A warning should have been logged for this unsupported configuration", warningLogged.wasTriggered());
return entityManagerFactory;
}
@Test
public void test() {
produceEntityManagerFactory().close();
}
@Entity(name = "AbstractEntity")

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -54,9 +54,9 @@ public void testCacheOnNonRootEntity() {
settings.put( Environment.CACHE_REGION_FACTORY, CachingRegionFactory.class.getName() );
settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
try (ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
.applySettings( settings )
.build();
.build()) {
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" );
@ -67,8 +67,7 @@ public void testCacheOnNonRootEntity() {
assertTrue( triggerable.wasTriggered() );
assertFalse( metadata.getEntityBinding( AEntity.class.getName() ).isCached() );
serviceRegistry.destroy();
}
}
@Entity

View File

@ -53,9 +53,9 @@ public void testCacheableOnNonRootEntity() {
settings.put( AvailableSettings.DEFAULT_CACHE_CONCURRENCY_STRATEGY, "read-write" );
settings.put( AvailableSettings.JPA_SHARED_CACHE_MODE, SharedCacheMode.ENABLE_SELECTIVE );
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
try (ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) new StandardServiceRegistryBuilder()
.applySettings( settings )
.build();
.build()) {
Triggerable triggerable = logInspection.watchForLogMessages( "HHH000482" );
@ -68,8 +68,7 @@ public void testCacheableOnNonRootEntity() {
assertTrue( metadata.getEntityBinding( AEntity.class.getName() ).isCached() );
assertFalse( triggerable.wasTriggered() );
serviceRegistry.destroy();
}
}
@Entity

View File

@ -32,18 +32,17 @@
public class SingleRegisteredProviderTest extends BaseUnitTestCase {
@Test
public void testCachingExplicitlyDisabled() {
final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
try (final StandardServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.USE_SECOND_LEVEL_CACHE, "false" )
.build();
.build()) {
assertThat( registry.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
}
}
@Test
public void testCachingImplicitlyEnabledRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build();
try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build()) {
final Collection<Class<? extends RegionFactory>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
@ -56,12 +55,12 @@ public void testCachingImplicitlyEnabledRegistered() {
assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
}
}
@Test
public void testCachingImplicitlyEnabledNoRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build();
try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build()) {
final Collection<Class<? extends RegionFactory>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( RegionFactory.class );
@ -79,12 +78,12 @@ public void testCachingImplicitlyEnabledNoRegistered() {
assertThat( ssr.getService( RegionFactory.class ), instanceOf( NoCachingRegionFactory.class ) );
}
}
@Test
public void testConnectionsRegistered() {
final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build();
try (final BootstrapServiceRegistry bsr = new BootstrapServiceRegistryBuilder()
.build()) {
final Collection<Class<? extends ConnectionProvider>> implementors = bsr
.getService( StrategySelector.class )
.getRegisteredStrategyImplementors( ConnectionProvider.class );
@ -104,3 +103,4 @@ public void testConnectionsRegistered() {
assertThat( configuredProvider, instanceOf( DriverManagerConnectionProviderImpl.class ) );
}
}
}

View File

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

View File

@ -46,11 +46,10 @@ public void testLegacyExtendedMixedAccess() {
}
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.CDI_BEAN_MANAGER, extendedBeanManager )
.build();
.build()) {
final BeanContainer beanContainer = ssr.getService( ManagedBeanRegistry.class ).getBeanContainer();
assertThat( beanContainer, instanceOf( CdiBeanContainerExtendedAccessImpl.class ) );
@ -59,7 +58,10 @@ private void doTest(TestingExtendedBeanManager extendedBeanManager) {
final BeanManager beanManager = cdiContainer.getBeanManager();
extendedBeanManager.notifyListenerReady( beanManager );
assertThat( beanManager, sameInstance( ( (CdiBeanContainerExtendedAccessImpl) beanContainer ).getUsableBeanManager() ) );
assertThat(
beanManager,
sameInstance( ( (CdiBeanContainerExtendedAccessImpl) beanContainer ).getUsableBeanManager() )
);
final ContainedBean<HostedBean> hostedBean = beanContainer.getBean(
HostedBean.class,
@ -84,6 +86,7 @@ private void doTest(TestingExtendedBeanManager extendedBeanManager) {
extendedBeanManager.notifyListenerShuttingDown( beanManager );
}
}
}
@Override
public boolean canUseCachedReferences() {

View File

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

View File

@ -13,6 +13,7 @@
import javax.persistence.PrimaryKeyJoinColumn;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.internal.CoreMessageLogger;
@ -38,15 +39,19 @@ public void testInvalidPrimaryKeyJoinColumnAnnotationMessageContainsClassName()
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 )
.buildMetadata();
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(),
triggerable.triggerMessage().matches( ".*\\b\\Q" + InvalidPrimaryKeyJoinColumnAnnotationEntity.class.getName() + "\\E\\b.*" ) );
assertTrue(
"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

View File

@ -21,7 +21,6 @@
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.loader.MultipleBagFetchException;
import org.junit.Test;
@ -32,7 +31,7 @@ public class MultipleBagFetchTest {
@Test
public void testEntityWithMultipleJoinFetchedBags() {
StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build();
try (StandardServiceRegistry standardRegistry = new StandardServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( standardRegistry )
.addAnnotatedClass( Post.class )
@ -47,6 +46,7 @@ public void testEntityWithMultipleJoinFetchedBags() {
catch (MultipleBagFetchException expected) {
}
}
}
@Entity(name = "Post")
@Table(name = "post")

View File

@ -99,8 +99,8 @@ public String convertToEntityAttribute(String dbData) {
@Test
public void testBasicOperation() {
SimpleValue simpleValue = new SimpleValue( new MetadataBuildingContextTestingImpl() );
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
SimpleValue simpleValue = new SimpleValue( new MetadataBuildingContextTestingImpl( serviceRegistry ) );
simpleValue.setJpaAttributeConverterDescriptor(
new InstanceBasedConverterDescriptor(
new StringClobConverter(),
@ -117,7 +117,11 @@ public void testBasicOperation() {
AbstractStandardBasicType basicType = assertTyping( AbstractStandardBasicType.class, type );
assertSame( StringTypeDescriptor.INSTANCE, basicType.getJavaTypeDescriptor() );
SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
assertEquals( Dialect.getDialect().remapSqlTypeDescriptor(ClobTypeDescriptor.CLOB_BINDING).getSqlType(), sqlTypeDescriptor.getSqlType() );
assertEquals(
Dialect.getDialect().remapSqlTypeDescriptor( ClobTypeDescriptor.CLOB_BINDING ).getSqlType(),
sqlTypeDescriptor.getSqlType()
);
}
}
@Test
@ -151,24 +155,24 @@ public void testBasicConverterApplication() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try {
MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
final MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Tester.class )
.getMetadataBuilder()
.applyAttributeConverter( StringClobConverter.class, true )
.build();
PersistentClass tester = metadata.getEntityBinding( Tester.class.getName() );
Property nameProp = tester.getProperty( "name" );
SimpleValue nameValue = (SimpleValue) nameProp.getValue();
Type type = nameValue.getType();
final PersistentClass tester = metadata.getEntityBinding( Tester.class.getName() );
final Property nameProp = tester.getProperty( "name" );
final SimpleValue nameValue = (SimpleValue) nameProp.getValue();
final Type type = nameValue.getType();
assertNotNull( type );
assertTyping( BasicType.class, type );
if ( !AttributeConverterTypeAdapter.class.isInstance( type ) ) {
fail( "AttributeConverter not applied" );
}
AbstractStandardBasicType basicType = assertTyping( AbstractStandardBasicType.class, type );
final AbstractStandardBasicType basicType = assertTyping( AbstractStandardBasicType.class, type );
assertSame( StringTypeDescriptor.INSTANCE, basicType.getJavaTypeDescriptor() );
SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
final SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
assertEquals( Dialect.getDialect().remapSqlTypeDescriptor(ClobTypeDescriptor.CLOB_BINDING).getSqlType(), sqlTypeDescriptor.getSqlType() );
}
finally {
@ -196,9 +200,9 @@ public void testBasicOrmXmlConverterApplication() {
if ( !AttributeConverterTypeAdapter.class.isInstance( type ) ) {
fail( "AttributeConverter not applied" );
}
AttributeConverterTypeAdapter basicType = assertTyping( AttributeConverterTypeAdapter.class, type );
final AttributeConverterTypeAdapter basicType = assertTyping( AttributeConverterTypeAdapter.class, type );
assertSame( StringTypeDescriptor.INSTANCE, basicType.getJavaTypeDescriptor() );
SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
final SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
assertEquals( Dialect.getDialect().remapSqlTypeDescriptor(ClobTypeDescriptor.CLOB_BINDING).getSqlType(), sqlTypeDescriptor.getSqlType() );
}
finally {
@ -242,9 +246,7 @@ public void testBasicUsage() {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory();
try {
try (SessionFactory sf = cfg.buildSessionFactory()) {
Session session = sf.openSession();
session.beginTransaction();
session.save( new Tester4( 1L, "steve", 200 ) );
@ -274,9 +276,6 @@ public void testBasicUsage() {
session.getTransaction().commit();
session.close();
}
finally {
sf.close();
}
}
@Test
@ -285,23 +284,23 @@ public void testPrimitiveTypeConverterAutoApplied() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try {
MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
final MetadataImplementor metadata = (MetadataImplementor) new MetadataSources( ssr )
.addAnnotatedClass( Tester5.class )
.getMetadataBuilder()
.applyAttributeConverter( IntegerToVarcharConverter.class, true )
.build();
PersistentClass tester = metadata.getEntityBinding( Tester5.class.getName() );
Property codeProp = tester.getProperty( "code" );
SimpleValue nameValue = (SimpleValue) codeProp.getValue();
final PersistentClass tester = metadata.getEntityBinding( Tester5.class.getName() );
final Property codeProp = tester.getProperty( "code" );
final SimpleValue nameValue = (SimpleValue) codeProp.getValue();
Type type = nameValue.getType();
assertNotNull( type );
if ( !AttributeConverterTypeAdapter.class.isInstance( type ) ) {
fail( "AttributeConverter not applied to primitive type field: code(int)" );
}
AttributeConverterTypeAdapter basicType = assertTyping( AttributeConverterTypeAdapter.class, type );
final AttributeConverterTypeAdapter basicType = assertTyping( AttributeConverterTypeAdapter.class, type );
assertSame( IntegerTypeDescriptor.INSTANCE, basicType.getJavaTypeDescriptor() );
SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
final SqlTypeDescriptor sqlTypeDescriptor = basicType.getSqlTypeDescriptor();
assertEquals( VarcharTypeDescriptor.INSTANCE.getSqlType(), sqlTypeDescriptor.getSqlType() );
}
finally {
@ -317,9 +316,7 @@ public void testBasicTimestampUsage() {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory();
try {
try (SessionFactory sf = cfg.buildSessionFactory()) {
Session session = sf.openSession();
session.beginTransaction();
session.save( new IrrelevantInstantEntity( 1L ) );
@ -340,9 +337,6 @@ public void testBasicTimestampUsage() {
session.getTransaction().commit();
session.close();
}
finally {
sf.close();
}
}
@Test
@ -354,9 +348,7 @@ public void testBasicByteUsage() {
cfg.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.setProperty( AvailableSettings.GENERATE_STATISTICS, "true" );
SessionFactory sf = cfg.buildSessionFactory();
try {
try (SessionFactory sf = cfg.buildSessionFactory()) {
Session session = sf.openSession();
session.beginTransaction();
session.save( new Tester4( 1L, "George", 150, ConvertibleEnum.DEFAULT ) );
@ -386,9 +378,6 @@ public void testBasicByteUsage() {
session.getTransaction().commit();
session.close();
}
finally {
sf.close();
}
}
@Test
@ -406,16 +395,16 @@ public void testEnumConverter() {
.build();
// first lets validate that the converter was applied...
PersistentClass tester = metadata.getEntityBinding( EntityWithConvertibleField.class.getName() );
Property nameProp = tester.getProperty( "convertibleEnum" );
SimpleValue nameValue = (SimpleValue) nameProp.getValue();
Type type = nameValue.getType();
final PersistentClass tester = metadata.getEntityBinding( EntityWithConvertibleField.class.getName() );
final Property nameProp = tester.getProperty( "convertibleEnum" );
final SimpleValue nameValue = (SimpleValue) nameProp.getValue();
final Type type = nameValue.getType();
assertNotNull( type );
assertTyping( BasicType.class, type );
if ( !AttributeConverterTypeAdapter.class.isInstance( type ) ) {
fail( "AttributeConverter not applied" );
}
AbstractStandardBasicType basicType = assertTyping( AbstractStandardBasicType.class, type );
final AbstractStandardBasicType basicType = assertTyping( AbstractStandardBasicType.class, type );
assertTyping( EnumJavaTypeDescriptor.class, basicType.getJavaTypeDescriptor() );
if (metadata.getDatabase().getDialect() instanceof HANACloudColumnStoreDialect) {
assertEquals( Types.NVARCHAR, basicType.getSqlTypeDescriptor().getSqlType() );

View File

@ -1,11 +1,19 @@
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.test.converter.inheritence;
import java.util.List;
import javax.persistence.AttributeConverter;
import org.hibernate.boot.model.convert.internal.ClassBasedConverterDescriptor;
import org.hibernate.cfg.AttributeConverterDefinition;
import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.boot.BootstrapContextImpl;
import org.hibernate.testing.junit4.BaseUnitTestCase;
import org.junit.Test;

View File

@ -19,6 +19,7 @@
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.Table;
import org.hibernate.testing.TestForIssue;
@ -35,7 +36,8 @@ public class HHH14230 {
@Test
public void test() {
Metadata metadata = new MetadataSources(new StandardServiceRegistryBuilder().build())
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( TestEntity.class ).buildMetadata();
Table table = StreamSupport.stream( metadata.getDatabase().getNamespaces().spliterator(), false )
.flatMap( namespace -> namespace.getTables().stream() )
@ -46,6 +48,7 @@ public void test() {
// ClassCastException before HHH-14230
assertTrue( table.getForeignKeys().keySet().iterator().next().toString().contains( JOIN_COLUMN_NAME ) );
}
}
@Entity
@javax.persistence.Table(name = TABLE_NAME)

View File

@ -46,11 +46,12 @@ public void testForeignKeyShouldBeCreated() {
}
private void testForeignKeyCreation(boolean created) {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting(Environment.HBM2DDL_DEFAULT_CONSTRAINT_MODE, created ? "CONSTRAINT" : "NO_CONSTRAINT").build();
try (StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting(Environment.HBM2DDL_DEFAULT_CONSTRAINT_MODE, created ? "CONSTRAINT" : "NO_CONSTRAINT").build()) {
Metadata metadata = new MetadataSources( ssr ).addAnnotatedClass( TestEntity.class ).buildMetadata();
assertThat( findTable( metadata, TABLE_NAME ).getForeignKeys().isEmpty(), is( !created ) );
}
}
private static Table findTable(Metadata metadata, String tableName) {
return StreamSupport.stream(metadata.getDatabase().getNamespaces().spliterator(), false)

View File

@ -26,6 +26,7 @@
import org.hibernate.annotations.OnDeleteAction;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.mapping.Table;
import org.hibernate.testing.TestForIssue;
@ -44,12 +45,14 @@ public class OneToManyBidirectionalForeignKeyTest {
@Test
public void testForeignKeyShouldNotBeCreated() {
Metadata metadata = new MetadataSources(new StandardServiceRegistryBuilder().build())
try (StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
Metadata metadata = new MetadataSources( serviceRegistry )
.addAnnotatedClass( PlainTreeEntity.class ).addAnnotatedClass( TreeEntityWithOnDelete.class )
.buildMetadata();
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) {
return StreamSupport.stream(metadata.getDatabase().getNamespaces().spliterator(), false)

View File

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

View File

@ -64,7 +64,7 @@ public void testCreateGeneratorsByBeanContainer() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder();
ssrb.applySetting( AvailableSettings.BEAN_CONTAINER, beanContainer );
final StandardServiceRegistry ssr = ssrb.build();
try (final StandardServiceRegistry ssr = ssrb.build()) {
final Metadata metadata = new MetadataSources( ssr )
.addAnnotatedClass( Entity1.class )
.addAnnotatedClass( Entity2.class )
@ -75,14 +75,18 @@ public void testCreateGeneratorsByBeanContainer() {
final PersistentClass entityBinding1 = metadata.getEntityBinding( Entity1.class.getName() );
final PersistentClass entityBinding2 = metadata.getEntityBinding( Entity2.class.getName() );
final IdentifierGenerator generator1 = entityBinding1.getRootClass().getIdentifier().createIdentifierGenerator(
final IdentifierGenerator generator1 = entityBinding1.getRootClass()
.getIdentifier()
.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
"",
entityBinding1.getRootClass()
);
final IdentifierGenerator generator2 = entityBinding2.getRootClass().getIdentifier().createIdentifierGenerator(
final IdentifierGenerator generator2 = entityBinding2.getRootClass()
.getIdentifier()
.createIdentifierGenerator(
generatorFactory,
new H2Dialect(),
"",
@ -90,12 +94,15 @@ public void testCreateGeneratorsByBeanContainer() {
entityBinding2.getRootClass()
);
then( beanContainer ).should( times( 2 ) ).getBean( same( TestIdentifierGenerator.class ), any( LifecycleOptions.class ),
same( FallbackBeanInstanceProducer.INSTANCE ) );
then( beanContainer ).should( times( 2 ) ).getBean( same( TestIdentifierGenerator.class ),
any( LifecycleOptions.class ),
same( FallbackBeanInstanceProducer.INSTANCE )
);
assertThat( generator1, is( instanceOf( TestIdentifierGenerator.class ) ) );
assertThat( generator2, is( instanceOf( TestIdentifierGenerator.class ) ) );
assertThat( generator1 == generator2, is( false ) ); // should not be same instance
}
}

View File

@ -49,7 +49,7 @@
public class GeneratedValueTests extends BaseUnitTestCase {
@Test
public void baseline() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitGeneratorEntity.class )
.buildMetadata();
@ -62,7 +62,10 @@ public void baseline() {
(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" ) );
@ -70,12 +73,13 @@ public void baseline() {
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 500 ) );
}
}
@Test
public void testImplicitSequenceGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder()
.applySetting( AvailableSettings.PREFER_GENERATOR_NAME_AS_DEFAULT_SEQUENCE_NAME, "false" )
.build();
.build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
.buildMetadata();
@ -88,7 +92,10 @@ public void testImplicitSequenceGenerator() {
(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
// default (hibernate_sequence) should be used
@ -98,10 +105,11 @@ public void testImplicitSequenceGenerator() {
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) );
}
}
@Test
public void testImplicitSequenceGeneratorGeneratorName() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitSequenceGeneratorEntity.class )
.buildMetadata();
@ -114,7 +122,10 @@ public void testImplicitSequenceGeneratorGeneratorName() {
(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
// should be used as the default instead.
@ -124,6 +135,7 @@ public void testImplicitSequenceGeneratorGeneratorName() {
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 1 ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getIncrementSize(), is( 50 ) );
}
}
@Test
public void testExplicitSequenceGeneratorImplicitName() {
@ -152,11 +164,12 @@ public void testExplicitSequenceGeneratorImplicitName() {
@Test
public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
// 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 )
.addAnnotatedClass( ExplicitSequenceGeneratorImplicitNameEntity.class )
.buildMetadata();
final PersistentClass entityMapping = bootModel.getEntityBinding( ExplicitSequenceGeneratorImplicitNameEntity.class.getName() );
final PersistentClass entityMapping = bootModel.getEntityBinding(
ExplicitSequenceGeneratorImplicitNameEntity.class.getName() );
final IdentifierGenerator generator = entityMapping.getIdentifier().createIdentifierGenerator(
bootModel.getIdentifierGeneratorFactory(),
ssr.getService( JdbcEnvironment.class ).getDialect(),
@ -165,7 +178,10 @@ public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
(RootClass) entityMapping
);
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping( SequenceStyleGenerator.class, generator );
final SequenceStyleGenerator sequenceStyleGenerator = assertTyping(
SequenceStyleGenerator.class,
generator
);
// all the JPA defaults since they were not defined
assertThat( sequenceStyleGenerator.getDatabaseStructure().getName(), is( "my_db_sequence" ) );
assertThat( sequenceStyleGenerator.getDatabaseStructure().getInitialValue(), is( 100 ) );
@ -183,10 +199,11 @@ public void testExplicitSequenceGeneratorImplicitNamePreferGeneratorName() {
final String cmd = sqlCreateStrings[0].toLowerCase();
assertTrue( cmd.startsWith( "create sequence my_db_sequence start with 100 increment by 500" ) );
}
}
@Test
public void testImplicitTableGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitTableGeneratorEntity.class )
.buildMetadata();
@ -207,10 +224,11 @@ public void testImplicitTableGenerator() {
assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 50 ) );
}
}
@Test
public void testExplicitTableGeneratorImplicitName() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitTableGeneratorImplicitNameEntity.class )
.buildMetadata();
@ -231,10 +249,11 @@ public void testExplicitTableGeneratorImplicitName() {
assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 25 ) );
}
}
@Test
public void testExplicitTableGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitTableGeneratorEntity.class )
.buildMetadata();
@ -257,10 +276,11 @@ public void testExplicitTableGenerator() {
// assertThat( tableGenerator.getInitialValue(), is( 1 ) );
assertThat( tableGenerator.getIncrementSize(), is( 25 ) );
}
}
@Test
public void testExplicitIncrementGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ExplicitIncrementGeneratorEntity.class )
.buildMetadata();
@ -275,10 +295,11 @@ public void testExplicitIncrementGenerator() {
assertTyping( IncrementGenerator.class, generator );
}
}
@Test
public void testImplicitIncrementGenerator() {
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
try (final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build()) {
final Metadata bootModel = new MetadataSources( ssr )
.addAnnotatedClass( ImplicitIncrementGeneratorEntity.class )
.buildMetadata();
@ -293,6 +314,7 @@ public void testImplicitIncrementGenerator() {
assertTyping( IncrementGenerator.class, generator );
}
}
@Entity
public static class ExplicitGeneratorEntity {
@ -320,7 +342,7 @@ public static class ImplicitSequenceGeneratorEntity {
@Entity
public static class ExplicitSequenceGeneratorImplicitNameEntity {
/**
* This entity does not have explicit {@link SequenceGenerator} defined
* This entity does have explicit {@link SequenceGenerator} defined
*/
@Id
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "my_db_sequence" )

View File

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

View File

@ -63,7 +63,8 @@ public void testProperCallbacks() {
final RootClass rootClass = new RootClass( metadataBuildingContext );
ValueVisitor vv = new ValueVisitorValidator();
MetadataBuildingContextTestingImpl metadataBuildingContext = new MetadataBuildingContextTestingImpl();
try ( StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().build()) {
MetadataBuildingContextTestingImpl metadataBuildingContext = new MetadataBuildingContextTestingImpl( serviceRegistry );
new Any( metadataBuildingContext, tbl ).accept( vv );
new Array( metadataBuildingContext, rootClass ).accept( vv );
new Bag( metadataBuildingContext, rootClass ).accept( vv );
@ -79,6 +80,7 @@ public void testProperCallbacks() {
new Set( metadataBuildingContext, rootClass ).accept( vv );
new SimpleValue( metadataBuildingContext ).accept( vv );
}
}
static public class ValueVisitorValidator implements ValueVisitor {

View File

@ -68,6 +68,7 @@ public void setUp() {
.applySettings(settings)
.build();
try {
MetadataSources ms = new MetadataSources( serviceRegistry );
ms.addAnnotatedClass( Customer.class );
@ -111,6 +112,11 @@ public void setUp() {
sessionFactory = (SessionFactoryImplementor) sfb.build();
currentTenantResolver.setHibernateBooted();
}
catch (Throwable t) {
serviceRegistry.close();
throw t;
}
}
@After
public void destroy() {

View File

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

View File

@ -31,13 +31,13 @@ public class InheritanceSchemaUpdateTest extends BaseUnitTestCase {
public void testBidirectionalOneToManyReferencingRootEntity() throws Exception {
StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().build();
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 );
}

View File

@ -123,8 +123,7 @@ public void testPartialResults() {
.addAnnotatedClass( Employee.class )
.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" );
cfg.addAuxiliaryDatabaseObject( new ProcedureDefinition() );
SessionFactory sf = cfg.buildSessionFactory();
try {
try (SessionFactory sf = cfg.buildSessionFactory()) {
Session session = sf.openSession();
session.beginTransaction();
@ -137,8 +136,5 @@ public void testPartialResults() {
session.getTransaction().commit();
session.close();
}
finally {
sf.close();
}
}
}

View File

@ -145,9 +145,9 @@ private Configuration buildBaseConfiguration() {
@Test
public void testQueryStatGathering() {
SessionFactory sf = buildBaseConfiguration()
try (SessionFactory sf = buildBaseConfiguration()
.setProperty( AvailableSettings.HBM2DDL_AUTO, "create-drop" )
.buildSessionFactory();
.buildSessionFactory()) {
Session s = sf.openSession();
Transaction tx = s.beginTransaction();
@ -229,7 +229,7 @@ public void testQueryStatGathering() {
cleanDb( s );
tx.commit();
s.close();
sf.close();
}
}
private Continent fillDb(Session s) {

View File

@ -53,12 +53,17 @@ private SessionFactory buildSessionFactory() {
settings.put( AvailableSettings.TRANSACTION_COORDINATOR_STRATEGY, "jta" );
final StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings( settings ).build();
try {
return new MetadataSources( ssr )
.addAnnotatedClass( TestEntity.class )
.buildMetadata()
.buildSessionFactory();
}
catch (Throwable t) {
ssr.close();
throw t;
}
}
@Entity( name = "TestEntity" )

View File

@ -39,7 +39,7 @@ public class PreparedStatementSpyConnectionProvider extends ConnectionProviderDe
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.
.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 );
// 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
@ -69,8 +69,8 @@ public PreparedStatementSpyConnectionProvider() {
* When you really need to verify invocations, set the relevant constructor parameter to true.
*/
public PreparedStatementSpyConnectionProvider(boolean allowMockVerificationOnStatements, boolean allowMockVerificationOnConnections) {
this.settingsForStatements = allowMockVerificationOnStatements ? VERIFIEABLE_MOCK_SETTINGS : MOCK_SETTINGS;
this.settingsForConnections = allowMockVerificationOnConnections ? VERIFIEABLE_MOCK_SETTINGS : MOCK_SETTINGS;
this.settingsForStatements = allowMockVerificationOnStatements ? VERIFIABLE_MOCK_SETTINGS : MOCK_SETTINGS;
this.settingsForConnections = allowMockVerificationOnConnections ? VERIFIABLE_MOCK_SETTINGS : MOCK_SETTINGS;
}
protected Connection actualConnection() throws SQLException {

View File

@ -54,7 +54,7 @@ public void testAuditedDynamicComponentFailure() throws URISyntaxException {
final ServiceRegistry serviceRegistry = ServiceRegistryBuilder.buildServiceRegistry( config.getProperties() );
try {
config.buildSessionFactory( serviceRegistry );
config.buildSessionFactory( serviceRegistry ).close();
Assert.fail( "MappingException expected" );
}
catch ( MappingException e ) {

View File

@ -105,9 +105,14 @@ public static SessionFactoryImplementor buildStandardSessionFactory(Consumer<Sta
additionalSettings.accept( ssrb );
final StandardServiceRegistry ssr = ssrb.build();
try {
return (SessionFactoryImplementor) new MetadataSources( ssr ).buildMetadata().buildSessionFactory();
}
catch (Throwable t) {
ssr.close();
throw t;
}
}
public static StandardServiceRegistryBuilder getStandardServiceRegistryBuilder() {
final StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()

View File

@ -33,11 +33,10 @@
* @author Andrea Boriero
*/
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();
MetadataBuildingOptions buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry );
@ -143,4 +142,9 @@ public Collection<CacheRegionDefinition> getCacheRegionDefinitions() {
public void 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;
public MetadataBuildingContextTestingImpl() {
this( new StandardServiceRegistryBuilder().build() );
}
public MetadataBuildingContextTestingImpl(StandardServiceRegistry serviceRegistry) {
buildingOptions = new MetadataBuilderImpl.MetadataBuildingOptionsImpl( serviceRegistry );
bootstrapContext = new BootstrapContextImpl( serviceRegistry, buildingOptions );

View File

@ -112,7 +112,9 @@ protected void buildSessionFactory() {
protected void buildSessionFactory(Consumer<Configuration> configurationAdapter) {
// for now, build the configuration to get all the property settings
BootstrapServiceRegistry bootRegistry = buildBootstrapServiceRegistry();
BootstrapServiceRegistry bootRegistry = null;
try {
bootRegistry = buildBootstrapServiceRegistry();
configuration = constructAndConfigureConfiguration( bootRegistry );
if ( configurationAdapter != null ) {
configurationAdapter.accept( configuration );
@ -123,6 +125,22 @@ protected void buildSessionFactory(Consumer<Configuration> configurationAdapter)
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;
}
}
protected void rebuildSessionFactory() {
rebuildSessionFactory( null );
@ -277,6 +295,7 @@ protected void prepareBootstrapRegistryBuilder(BootstrapServiceRegistryBuilder b
}
protected StandardServiceRegistryImpl buildServiceRegistry(BootstrapServiceRegistry bootRegistry, Configuration configuration) {
try {
Properties properties = new Properties();
properties.putAll( configuration.getProperties() );
ConfigurationHelper.resolvePlaceHolders( properties );
@ -289,6 +308,13 @@ protected StandardServiceRegistryImpl buildServiceRegistry(BootstrapServiceRegis
prepareBasicRegistryBuilder( registryBuilder );
return (StandardServiceRegistryImpl) registryBuilder.build();
}
catch (Throwable t) {
if ( bootRegistry != null ) {
bootRegistry.close();
}
throw t;
}
}
protected void prepareBasicRegistryBuilder(StandardServiceRegistryBuilder serviceRegistryBuilder) {
}

View File

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