Skip to content

Commit 658d44a

Browse files
committed
some cleanups to UUID generators, especially logging
1 parent 6a6259e commit 658d44a

File tree

8 files changed

+119
-60
lines changed

8 files changed

+119
-60
lines changed

hibernate-core/src/main/java/org/hibernate/boot/registry/selector/internal/DefaultJtaPlatformSelector.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import java.util.List;
88
import java.util.Objects;
99

10-
import org.hibernate.cfg.AvailableSettings;
10+
import org.hibernate.cfg.TransactionSettings;
1111
import org.hibernate.engine.transaction.jta.platform.internal.AtomikosJtaPlatform;
1212
import org.hibernate.engine.transaction.jta.platform.internal.JBossAppServerJtaPlatform;
1313
import org.hibernate.engine.transaction.jta.platform.internal.JBossStandAloneJtaPlatform;
@@ -18,7 +18,8 @@
1818
import org.hibernate.engine.transaction.jta.platform.internal.WeblogicJtaPlatform;
1919
import org.hibernate.engine.transaction.jta.platform.internal.WildFlyStandAloneJtaPlatform;
2020
import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform;
21-
import org.hibernate.internal.log.DeprecationLogger;
21+
22+
import static org.hibernate.internal.log.DeprecationLogger.DEPRECATION_LOGGER;
2223

2324
public class DefaultJtaPlatformSelector implements LazyServiceResolver<JtaPlatform> {
2425

@@ -35,8 +36,9 @@ else if ( name.startsWith( "org." ) ) {
3536
return switch ( name ) {
3637
case "JBossAS" -> JBossAppServerJtaPlatform.class;
3738
case "JBossTS" -> {
38-
DeprecationLogger.DEPRECATION_LOGGER.logDeprecatedJtaPlatformSetting(
39-
AvailableSettings.JTA_PLATFORM, name, List.of( "Narayana", "WildFlyStandadlone" ) );
39+
DEPRECATION_LOGGER.deprecatedJtaPlatformSetting(
40+
TransactionSettings.JTA_PLATFORM, name,
41+
List.of( "Narayana", "WildFlyStandadlone" ) );
4042
yield JBossStandAloneJtaPlatform.class;
4143
}
4244
case "Weblogic" -> WeblogicJtaPlatform.class;
@@ -66,8 +68,9 @@ private static Class<? extends JtaPlatform> legacy(
6668
return JBossAppServerJtaPlatform.class;
6769
}
6870
case "org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform" -> {
69-
DeprecationLogger.DEPRECATION_LOGGER.logDeprecatedJtaPlatformSetting(
70-
AvailableSettings.JTA_PLATFORM, name, List.of( "Narayana", "WildFlyStandadlone" ) );
71+
DEPRECATION_LOGGER.deprecatedJtaPlatformSetting(
72+
TransactionSettings.JTA_PLATFORM, name,
73+
List.of( "Narayana", "WildFlyStandadlone" ) );
7174
return JBossStandAloneJtaPlatform.class;
7275
}
7376
case "org.hibernate.engine.transaction.jta.platform.internal.NarayanaJtaPlatform" -> {

hibernate-core/src/main/java/org/hibernate/id/GUIDGenerator.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,13 @@
44
*/
55
package org.hibernate.id;
66

7-
import java.sql.PreparedStatement;
8-
import java.sql.ResultSet;
97
import java.sql.SQLException;
108

119
import org.hibernate.HibernateException;
1210
import org.hibernate.engine.spi.SharedSessionContractImplementor;
13-
import org.hibernate.internal.CoreLogging;
14-
import org.hibernate.internal.CoreMessageLogger;
11+
12+
import static org.hibernate.id.UUIDLogger.UUID_MESSAGE_LOGGER;
13+
import static org.hibernate.internal.log.DeprecationLogger.DEPRECATION_LOGGER;
1514

1615
/**
1716
* The legacy id generator named {@code guid}.
@@ -25,38 +24,37 @@
2524
@Deprecated(since = "6.0")
2625
public class GUIDGenerator implements IdentifierGenerator {
2726

28-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( GUIDGenerator.class );
29-
3027
private static boolean WARNED;
3128

3229
public GUIDGenerator() {
3330
if ( !WARNED ) {
3431
WARNED = true;
35-
LOG.deprecatedUuidGenerator( UUIDGenerator.class.getName(), UUIDGenerationStrategy.class.getName() );
32+
DEPRECATION_LOGGER.deprecatedUuidGenerator(
33+
UUIDGenerator.class.getName(),
34+
UUIDGenerationStrategy.class.getName() );
3635
}
3736
}
3837

3938
public Object generate(SharedSessionContractImplementor session, Object obj) throws HibernateException {
4039
final String sql = session.getJdbcServices().getJdbcEnvironment().getDialect().getSelectGUIDString();
4140
try {
42-
final PreparedStatement st = session.getJdbcCoordinator().getStatementPreparer().prepareStatement( sql );
41+
final var jdbcCoordinator = session.getJdbcCoordinator();
42+
final var st = jdbcCoordinator.getStatementPreparer().prepareStatement( sql );
4343
try {
44-
final ResultSet rs = session.getJdbcCoordinator().getResultSetReturn().extract( st, sql );
44+
final var rs = jdbcCoordinator.getResultSetReturn().extract( st, sql );
4545
try {
4646
if ( !rs.next() ) {
4747
throw new HibernateException( "The database returned no GUID identity value" );
4848
}
49-
final String result = rs.getString( 1 );
50-
LOG.guidGenerated( result );
51-
return result;
49+
return rs.getString( 1 );
5250
}
5351
finally {
54-
session.getJdbcCoordinator().getLogicalConnection().getResourceRegistry().release( rs, st );
52+
jdbcCoordinator.getLogicalConnection().getResourceRegistry().release( rs, st );
5553
}
5654
}
5755
finally {
58-
session.getJdbcCoordinator().getLogicalConnection().getResourceRegistry().release( st );
59-
session.getJdbcCoordinator().afterStatementExecution();
56+
jdbcCoordinator.getLogicalConnection().getResourceRegistry().release( st );
57+
jdbcCoordinator.afterStatementExecution();
6058
}
6159
}
6260
catch (SQLException sqle) {

hibernate-core/src/main/java/org/hibernate/id/UUIDGenerator.java

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1515
import org.hibernate.generator.GeneratorCreationContext;
1616
import org.hibernate.id.uuid.StandardRandomStrategy;
17-
import org.hibernate.internal.CoreLogging;
18-
import org.hibernate.internal.CoreMessageLogger;
1917
import org.hibernate.type.Type;
2018
import org.hibernate.type.descriptor.java.UUIDJavaType;
2119

20+
import static org.hibernate.id.UUIDLogger.UUID_MESSAGE_LOGGER;
21+
2222
/**
2323
* An {@link IdentifierGenerator} which generates {@link UUID} values using a pluggable
2424
* {@linkplain UUIDGenerationStrategy generation strategy}. The values this generator
@@ -40,8 +40,6 @@
4040
@Deprecated(since = "6.0")
4141
public class UUIDGenerator implements IdentifierGenerator {
4242

43-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( UUIDGenerator.class );
44-
4543
public static final String UUID_GEN_STRATEGY = "uuid_gen_strategy";
4644
public static final String UUID_GEN_STRATEGY_CLASS = "uuid_gen_strategy_class";
4745

@@ -52,50 +50,53 @@ public class UUIDGenerator implements IdentifierGenerator {
5250
public void configure(GeneratorCreationContext creationContext, Properties parameters) throws MappingException {
5351
// check first for an explicit strategy instance
5452
strategy = (UUIDGenerationStrategy) parameters.get( UUID_GEN_STRATEGY );
55-
5653
if ( strategy == null ) {
5754
// next check for an explicit strategy class
58-
final String strategyClassName = parameters.getProperty( UUID_GEN_STRATEGY_CLASS );
59-
if ( strategyClassName != null ) {
60-
try {
61-
final Class<?> strategyClass =
62-
creationContext.getServiceRegistry().requireService( ClassLoaderService.class )
63-
.classForName( strategyClassName );
64-
try {
65-
strategy = (UUIDGenerationStrategy) strategyClass.newInstance();
66-
}
67-
catch ( Exception e ) {
68-
LOG.unableToInstantiateUuidGenerationStrategy(e);
69-
}
70-
}
71-
catch ( ClassLoadingException ignore ) {
72-
LOG.unableToLocateUuidGenerationStrategy( strategyClassName );
73-
}
74-
}
75-
}
76-
77-
if ( strategy == null ) {
78-
// lastly use the standard random generator
79-
strategy = StandardRandomStrategy.INSTANCE;
55+
strategy = strategy( creationContext, parameters );
8056
}
57+
valueTransformer = valueTransformer( creationContext );
58+
}
8159

60+
private UUIDJavaType.ValueTransformer valueTransformer(GeneratorCreationContext creationContext) {
8261
final Type type = creationContext.getType();
8362
if ( UUID.class.isAssignableFrom( type.getReturnedClass() ) ) {
84-
valueTransformer = UUIDJavaType.PassThroughTransformer.INSTANCE;
63+
return UUIDJavaType.PassThroughTransformer.INSTANCE;
8564
}
8665
else if ( String.class.isAssignableFrom( type.getReturnedClass() ) ) {
8766
// todo (6.0) : allow for org.hibernate.type.descriptor.java.UUIDJavaType.NoDashesStringTransformer
88-
valueTransformer = UUIDJavaType.ToStringTransformer.INSTANCE;
67+
return UUIDJavaType.ToStringTransformer.INSTANCE;
8968
}
9069
else if ( byte[].class.isAssignableFrom( type.getReturnedClass() ) ) {
91-
valueTransformer = UUIDJavaType.ToBytesTransformer.INSTANCE;
70+
return UUIDJavaType.ToBytesTransformer.INSTANCE;
9271
}
9372
else {
9473
throw new HibernateException( "Unanticipated return type [" + type.getReturnedClassName() + "] for UUID conversion" );
9574
}
9675
}
9776

98-
public Object generate(SharedSessionContractImplementor session, Object object) throws HibernateException {
77+
private UUIDGenerationStrategy strategy(GeneratorCreationContext creationContext, Properties parameters) {
78+
final String strategyClassName = parameters.getProperty( UUID_GEN_STRATEGY_CLASS );
79+
if ( strategyClassName != null ) {
80+
final var classLoaderService =
81+
creationContext.getServiceRegistry()
82+
.requireService( ClassLoaderService.class );
83+
try {
84+
final var strategyClass = classLoaderService.classForName( strategyClassName );
85+
try {
86+
return (UUIDGenerationStrategy) strategyClass.newInstance();
87+
}
88+
catch ( Exception exception ) {
89+
UUID_MESSAGE_LOGGER.unableToInstantiateUuidGenerationStrategy( exception );
90+
}
91+
}
92+
catch ( ClassLoadingException ignore ) {
93+
UUID_MESSAGE_LOGGER.unableToLocateUuidGenerationStrategy( strategyClassName );
94+
}
95+
}
96+
return StandardRandomStrategy.INSTANCE;
97+
}
98+
99+
public Object generate(SharedSessionContractImplementor session, Object object) {
99100
return valueTransformer.transform( strategy.generateUUID( session ) );
100101
}
101102
}

hibernate-core/src/main/java/org/hibernate/id/UUIDHexGenerator.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99
import org.hibernate.MappingException;
1010
import org.hibernate.engine.spi.SharedSessionContractImplementor;
1111
import org.hibernate.generator.GeneratorCreationContext;
12-
import org.hibernate.internal.CoreLogging;
13-
import org.hibernate.internal.CoreMessageLogger;
1412

13+
import static org.hibernate.internal.log.DeprecationLogger.DEPRECATION_LOGGER;
1514
import static org.hibernate.internal.util.config.ConfigurationHelper.getString;
1615

1716
/**
@@ -31,8 +30,6 @@
3130
@Deprecated(since = "6")
3231
public class UUIDHexGenerator extends AbstractUUIDGenerator {
3332

34-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( UUIDHexGenerator.class );
35-
3633
/**
3734
* The configuration parameter specifying the separator to use.
3835
*/
@@ -45,7 +42,9 @@ public class UUIDHexGenerator extends AbstractUUIDGenerator {
4542
public UUIDHexGenerator() {
4643
if ( !WARNED ) {
4744
WARNED = true;
48-
LOG.usingUuidHexGenerator( this.getClass().getName(), UUIDGenerator.class.getName() );
45+
DEPRECATION_LOGGER.deprecatedUuidHexGenerator(
46+
UUIDHexGenerator.class.getName(),
47+
UUIDGenerator.class.getName() );
4948
}
5049
}
5150

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
* Copyright Red Hat Inc. and Hibernate Authors
4+
*/
5+
package org.hibernate.id;
6+
7+
import org.hibernate.Internal;
8+
import org.hibernate.internal.log.SubSystemLogging;
9+
10+
import org.jboss.logging.BasicLogger;
11+
import org.jboss.logging.Logger;
12+
import org.jboss.logging.annotations.Cause;
13+
import org.jboss.logging.annotations.LogMessage;
14+
import org.jboss.logging.annotations.Message;
15+
import org.jboss.logging.annotations.MessageLogger;
16+
import org.jboss.logging.annotations.ValidIdRange;
17+
18+
import java.lang.invoke.MethodHandles;
19+
20+
import static org.jboss.logging.Logger.Level.WARN;
21+
22+
/**
23+
* Logging related to UUID/GUID identifier generators
24+
*/
25+
@SubSystemLogging(
26+
name = UUIDLogger.NAME,
27+
description = "Logging related to UUID/GUID identifier generation"
28+
)
29+
@MessageLogger(projectCode = "HHH")
30+
@ValidIdRange(min = 90301, max = 90400)
31+
@Internal
32+
public interface UUIDLogger extends BasicLogger {
33+
String NAME = SubSystemLogging.BASE + ".id.uuid";
34+
35+
UUIDLogger UUID_MESSAGE_LOGGER = Logger.getMessageLogger(
36+
MethodHandles.lookup(),
37+
UUIDLogger.class,
38+
NAME
39+
);
40+
41+
@LogMessage(level = WARN)
42+
@Message(value = "Unable to instantiate UUID generation strategy class", id = 90301)
43+
void unableToInstantiateUuidGenerationStrategy(@Cause Exception ignore);
44+
45+
@LogMessage(level = WARN)
46+
@Message(value = "Unable to locate requested UUID generation strategy class: %s", id = 90302)
47+
void unableToLocateUuidGenerationStrategy(String strategyClassName);
48+
49+
@LogMessage(level = WARN)
50+
@Message(value = "GUID identifier generated: %s", id = 90305)
51+
void guidGenerated(String result);
52+
}

hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceGeneratorLogger.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
public interface SequenceGeneratorLogger extends BasicLogger {
3434
String NAME = SubSystemLogging.BASE + ".id.table";
3535

36-
Logger SEQUENCE_GENERATOR_LOGGER = Logger.getLogger(NAME);
3736
SequenceGeneratorLogger SEQUENCE_GENERATOR_MESSAGE_LOGGER = Logger.getMessageLogger(
3837
MethodHandles.lookup(),
3938
SequenceGeneratorLogger.class,

hibernate-core/src/main/java/org/hibernate/id/enhanced/TableGeneratorLogger.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
public interface TableGeneratorLogger extends BasicLogger {
3939
String NAME = SubSystemLogging.BASE + ".id.table";
4040

41-
Logger TABLE_GENERATOR_LOGGER = Logger.getLogger(NAME);
4241
TableGeneratorLogger TABLE_GENERATOR_MESSAGE_LOGGER = Logger.getMessageLogger(
4342
MethodHandles.lookup(),
4443
TableGeneratorLogger.class,

hibernate-core/src/main/java/org/hibernate/internal/log/DeprecationLogger.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,13 @@ void recognizedObsoleteHibernateNamespace(
233233
id = 90000038,
234234
value = "Encountered deprecated value for JtaPlatform setting [%s]: [%s]; use a non-deprecated value among %s instead"
235235
)
236-
void logDeprecatedJtaPlatformSetting(String settingName, String deprecatedValue, List<String> replacements);
236+
void deprecatedJtaPlatformSetting(String settingName, String deprecatedValue, List<String> replacements);
237+
238+
@LogMessage(level = WARN)
239+
@Message(value = "Using %s which does not generate IETF RFC 4122 compliant UUID values; consider using %s instead", id = 90303)
240+
void deprecatedUuidHexGenerator(String name, String name2);
241+
242+
@LogMessage(level = WARN)
243+
@Message(value = "DEPRECATED: use [%s] instead with custom [%s] implementation", id = 90304)
244+
void deprecatedUuidGenerator(String name, String name2);
237245
}

0 commit comments

Comments
 (0)