Skip to content

Commit c062a08

Browse files
committed
HHH-19063 - Drop forms of SchemaNameResolver performing reflection
1 parent 460d57f commit c062a08

File tree

5 files changed

+278
-210
lines changed

5 files changed

+278
-210
lines changed

hibernate-core/src/test/java/org/hibernate/orm/test/hbm/uk/UniqueDelegateTest.java

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -5,73 +5,70 @@
55
package org.hibernate.orm.test.hbm.uk;
66

77
import org.hibernate.boot.Metadata;
8-
import org.hibernate.boot.MetadataSources;
98
import org.hibernate.boot.model.relational.SqlStringGenerationContext;
109
import org.hibernate.boot.registry.StandardServiceRegistry;
11-
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
12-
import org.hibernate.cfg.AvailableSettings;
10+
import org.hibernate.boot.spi.MetadataImplementor;
11+
import org.hibernate.cfg.JdbcSettings;
1312
import org.hibernate.dialect.Dialect;
1413
import org.hibernate.dialect.H2Dialect;
1514
import org.hibernate.dialect.unique.AlterTableUniqueDelegate;
1615
import org.hibernate.dialect.unique.UniqueDelegate;
1716
import org.hibernate.mapping.Column;
1817
import org.hibernate.mapping.Table;
1918
import org.hibernate.mapping.UniqueKey;
19+
import org.hibernate.orm.test.hbm.index.JournalingSchemaToolingTarget;
20+
import org.hibernate.testing.orm.junit.BaseUnitTest;
21+
import org.hibernate.testing.orm.junit.DomainModel;
22+
import org.hibernate.testing.orm.junit.DomainModelScope;
23+
import org.hibernate.testing.orm.junit.JiraKey;
24+
import org.hibernate.testing.orm.junit.RequiresDialect;
25+
import org.hibernate.testing.orm.junit.ServiceRegistry;
26+
import org.hibernate.testing.orm.junit.ServiceRegistryScope;
27+
import org.hibernate.testing.orm.junit.SettingProvider;
2028
import org.hibernate.tool.schema.internal.SchemaCreatorImpl;
2129
import org.hibernate.tool.schema.internal.SchemaDropperImpl;
22-
23-
import org.hibernate.testing.orm.junit.JiraKey;
24-
import org.hibernate.testing.junit4.BaseUnitTestCase;
25-
import org.hibernate.testing.util.ServiceRegistryUtil;
26-
27-
import org.hibernate.orm.test.hbm.index.JournalingSchemaToolingTarget;
28-
import org.junit.After;
29-
import org.junit.Before;
30-
import org.junit.Test;
30+
import org.junit.jupiter.api.Test;
3131

3232
import static org.hamcrest.CoreMatchers.equalTo;
3333
import static org.junit.Assert.assertThat;
3434

3535
/**
3636
* @author Steve Ebersole
3737
*/
38-
public class UniqueDelegateTest extends BaseUnitTestCase {
38+
@BaseUnitTest
39+
@ServiceRegistry(
40+
settingProviders = @SettingProvider(
41+
settingName = JdbcSettings.DIALECT,
42+
provider = UniqueDelegateTest.MyDialectConfigurer.class
43+
)
44+
)
45+
@DomainModel( xmlMappings = "org/hibernate/orm/test/hbm/uk/person_unique.hbm.xml" )
46+
@RequiresDialect(
47+
value = H2Dialect.class,
48+
comment = "Even though we use specialized Dialect, we still have calls happening to the "
49+
+ "underlying driver which will blow up on various underlying drivers. Nothing here is "
50+
+ "Dialect-specific anyway, besides what the specialized Dialect exposes."
51+
)
52+
public class UniqueDelegateTest {
3953
private static int getColumnDefinitionUniquenessFragmentCallCount = 0;
4054
private static int getTableCreationUniqueConstraintsFragmentCallCount = 0;
4155
private static int getAlterTableToAddUniqueKeyCommandCallCount = 0;
4256
private static int getAlterTableToDropUniqueKeyCommandCallCount = 0;
4357

44-
private StandardServiceRegistry ssr;
45-
46-
@Before
47-
public void before() {
48-
ssr = ServiceRegistryUtil.serviceRegistryBuilder()
49-
.applySetting( AvailableSettings.DIALECT, MyDialect.class )
50-
.build();
51-
}
52-
53-
@After
54-
public void after() {
55-
if ( ssr != null ) {
56-
StandardServiceRegistryBuilder.destroy( ssr );
57-
}
58-
}
59-
6058
@Test
6159
@JiraKey( value = "HHH-10203" )
62-
public void testUniqueDelegateConsulted() {
63-
final Metadata metadata = new MetadataSources( ssr )
64-
.addResource( "org/hibernate/orm/test/hbm/uk/person_unique.hbm.xml" )
65-
.buildMetadata();
60+
public void testUniqueDelegateConsulted(ServiceRegistryScope registryScope, DomainModelScope modelScope) {
61+
final StandardServiceRegistry ssr = registryScope.getRegistry();
62+
final MetadataImplementor domainModel = modelScope.getDomainModel();
6663

6764
final JournalingSchemaToolingTarget target = new JournalingSchemaToolingTarget();
68-
new SchemaCreatorImpl( ssr ).doCreation( metadata, false, target );
65+
new SchemaCreatorImpl( ssr ).doCreation( domainModel, false, target );
6966

7067
assertThat( getAlterTableToAddUniqueKeyCommandCallCount, equalTo( 1 ) );
7168
assertThat( getColumnDefinitionUniquenessFragmentCallCount, equalTo( 1 ) );
7269
assertThat( getTableCreationUniqueConstraintsFragmentCallCount, equalTo( 1 ) );
7370

74-
new SchemaDropperImpl( ssr ).doDrop( metadata, false, target );
71+
new SchemaDropperImpl( ssr ).doDrop( domainModel, false, target );
7572

7673
// unique keys are not dropped explicitly
7774
assertThat( getAlterTableToAddUniqueKeyCommandCallCount, equalTo( 1 ) );
@@ -92,6 +89,13 @@ public UniqueDelegate getUniqueDelegate() {
9289
}
9390
}
9491

92+
public static class MyDialectConfigurer implements SettingProvider.Provider<Object> {
93+
@Override
94+
public Object getSetting() {
95+
return MyDialect.class;
96+
}
97+
}
98+
9599
public static class MyUniqueDelegate extends AlterTableUniqueDelegate {
96100

97101
/**

hibernate-core/src/test/java/org/hibernate/orm/test/schematools/EnumCheckColumnDefinitionTests.java

Lines changed: 79 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -4,97 +4,104 @@
44
*/
55
package org.hibernate.orm.test.schematools;
66

7-
import java.lang.annotation.RetentionPolicy;
8-
import java.util.ArrayList;
9-
import java.util.EnumSet;
10-
import java.util.List;
11-
import java.util.Map;
12-
13-
import org.hibernate.boot.Metadata;
14-
import org.hibernate.boot.MetadataSources;
7+
import jakarta.persistence.Basic;
8+
import jakarta.persistence.Column;
9+
import jakarta.persistence.Entity;
10+
import jakarta.persistence.EnumType;
11+
import jakarta.persistence.Enumerated;
12+
import jakarta.persistence.Id;
13+
import jakarta.persistence.Table;
1514
import org.hibernate.boot.registry.StandardServiceRegistry;
16-
import org.hibernate.cfg.AvailableSettings;
15+
import org.hibernate.boot.spi.MetadataImplementor;
16+
import org.hibernate.cfg.JdbcSettings;
17+
import org.hibernate.dialect.H2Dialect;
1718
import org.hibernate.dialect.MySQLDialect;
1819
import org.hibernate.engine.config.spi.ConfigurationService;
1920
import org.hibernate.orm.test.tool.schema.ExecutionOptionsTestImpl;
2021
import org.hibernate.service.spi.ServiceRegistryImplementor;
22+
import org.hibernate.testing.orm.junit.BaseUnitTest;
23+
import org.hibernate.testing.orm.junit.DomainModel;
24+
import org.hibernate.testing.orm.junit.DomainModelScope;
25+
import org.hibernate.testing.orm.junit.JiraKey;
26+
import org.hibernate.testing.orm.junit.RequiresDialect;
27+
import org.hibernate.testing.orm.junit.ServiceRegistry;
28+
import org.hibernate.testing.orm.junit.ServiceRegistryScope;
29+
import org.hibernate.testing.orm.junit.SettingProvider;
2130
import org.hibernate.tool.schema.SourceType;
2231
import org.hibernate.tool.schema.TargetType;
2332
import org.hibernate.tool.schema.internal.HibernateSchemaManagementTool;
24-
import org.hibernate.tool.schema.spi.GenerationTarget;
2533
import org.hibernate.tool.schema.internal.exec.JdbcContext;
34+
import org.hibernate.tool.schema.spi.GenerationTarget;
2635
import org.hibernate.tool.schema.spi.SchemaCreator;
2736
import org.hibernate.tool.schema.spi.SchemaManagementTool;
2837
import org.hibernate.tool.schema.spi.ScriptSourceInput;
2938
import org.hibernate.tool.schema.spi.ScriptTargetOutput;
3039
import org.hibernate.tool.schema.spi.SourceDescriptor;
3140
import org.hibernate.tool.schema.spi.TargetDescriptor;
32-
33-
import org.hibernate.testing.orm.junit.JiraKey;
34-
import org.hibernate.testing.orm.junit.ServiceRegistryScope;
35-
import org.hibernate.testing.util.ServiceRegistryUtil;
3641
import org.junit.jupiter.api.Test;
3742

38-
import jakarta.persistence.Basic;
39-
import jakarta.persistence.Column;
40-
import jakarta.persistence.Entity;
41-
import jakarta.persistence.EnumType;
42-
import jakarta.persistence.Enumerated;
43-
import jakarta.persistence.Id;
44-
import jakarta.persistence.Table;
43+
import java.lang.annotation.RetentionPolicy;
44+
import java.util.ArrayList;
45+
import java.util.EnumSet;
46+
import java.util.List;
47+
import java.util.Map;
4548

4649
import static org.assertj.core.api.Assertions.assertThat;
4750

51+
@SuppressWarnings("JUnitMalformedDeclaration")
4852
@JiraKey("HHH-16670")
53+
@BaseUnitTest
54+
@ServiceRegistry(
55+
settingProviders = @SettingProvider(
56+
settingName = JdbcSettings.DIALECT,
57+
provider = EnumCheckColumnDefinitionTests.CustomDialectConfigProvider.class
58+
)
59+
)
60+
@DomainModel( annotatedClasses = EnumCheckColumnDefinitionTests.SimpleEntity.class )
61+
@RequiresDialect(
62+
value = H2Dialect.class,
63+
comment = "Even though we use specialized Dialect, we still have calls happening to the "
64+
+ "underlying driver which will blow up on various underlying drivers. Nothing here is "
65+
+ "Dialect-specific anyway, besides what the specialized Dialect exposes."
66+
)
4967
public class EnumCheckColumnDefinitionTests {
5068
@Test
51-
public void testFallbackToolIsPickedUp() {
52-
ServiceRegistryScope.using(
53-
() -> {
54-
return ServiceRegistryUtil.serviceRegistryBuilder()
55-
.applySetting( AvailableSettings.DIALECT, CustomDialect.class.getName() )
56-
.build();
69+
public void testFallbackToolIsPickedUp(ServiceRegistryScope registryScope, DomainModelScope modelScope) {
70+
final StandardServiceRegistry registry = registryScope.getRegistry();
71+
final MetadataImplementor domainModel = modelScope.getDomainModel();
72+
73+
final HibernateSchemaManagementTool tool = (HibernateSchemaManagementTool) registry.getService( SchemaManagementTool.class );
74+
final Map<String, Object> settings = registry.getService( ConfigurationService.class ).getSettings();
75+
final SchemaCreator schemaCreator = tool.getSchemaCreator( settings );
76+
schemaCreator.doCreation(
77+
domainModel,
78+
new ExecutionOptionsTestImpl(),
79+
contributed -> true,
80+
new SourceDescriptor() {
81+
@Override
82+
public SourceType getSourceType() {
83+
return SourceType.METADATA;
84+
}
85+
86+
@Override
87+
public ScriptSourceInput getScriptSourceInput() {
88+
return null;
89+
}
5790
},
58-
(registryScope) -> {
59-
final StandardServiceRegistry registry = registryScope.getRegistry();
60-
final Metadata metadata = new MetadataSources( registry )
61-
.addAnnotatedClass( SimpleEntity.class )
62-
.buildMetadata();
63-
64-
final HibernateSchemaManagementTool tool = (HibernateSchemaManagementTool) registry.getService( SchemaManagementTool.class );
65-
final Map<String, Object> settings = registry.getService( ConfigurationService.class ).getSettings();
66-
final SchemaCreator schemaCreator = tool.getSchemaCreator( settings );
67-
schemaCreator.doCreation(
68-
metadata,
69-
new ExecutionOptionsTestImpl(),
70-
contributed -> true,
71-
new SourceDescriptor() {
72-
@Override
73-
public SourceType getSourceType() {
74-
return SourceType.METADATA;
75-
}
76-
77-
@Override
78-
public ScriptSourceInput getScriptSourceInput() {
79-
return null;
80-
}
81-
},
82-
new TargetDescriptor() {
83-
@Override
84-
public EnumSet<TargetType> getTargetTypes() {
85-
return EnumSet.of( TargetType.DATABASE );
86-
}
87-
88-
@Override
89-
public ScriptTargetOutput getScriptTargetOutput() {
90-
return null;
91-
}
92-
}
93-
);
94-
95-
assertThat( CollectingGenerationTarget.commands.get( 0) ).contains( "enum ('SOURCE','CLASS','RUNTIME')");
91+
new TargetDescriptor() {
92+
@Override
93+
public EnumSet<TargetType> getTargetTypes() {
94+
return EnumSet.of( TargetType.DATABASE );
95+
}
96+
97+
@Override
98+
public ScriptTargetOutput getScriptTargetOutput() {
99+
return null;
100+
}
96101
}
97102
);
103+
104+
assertThat( CollectingGenerationTarget.commands.get( 0) ).contains( "enum ('SOURCE','CLASS','RUNTIME')");
98105
}
99106

100107
private static class CollectingGenerationTarget implements GenerationTarget {
@@ -125,6 +132,13 @@ protected GenerationTarget buildDatabaseTarget(JdbcContext jdbcContext, boolean
125132
}
126133
}
127134

135+
public static class CustomDialectConfigProvider implements SettingProvider.Provider<Class<CustomDialect>> {
136+
@Override
137+
public Class<CustomDialect> getSetting() {
138+
return CustomDialect.class;
139+
}
140+
}
141+
128142
public static class CustomDialect extends MySQLDialect {
129143
@Override
130144
public SchemaManagementTool getFallbackSchemaManagementTool(Map<String, Object> configurationValues, ServiceRegistryImplementor registry) {

0 commit comments

Comments
 (0)