Skip to content

Commit 2a05a9d

Browse files
committed
move operations to JdbcBatchLogging
1 parent 0029172 commit 2a05a9d

File tree

14 files changed

+113
-100
lines changed

14 files changed

+113
-100
lines changed

hibernate-core/src/main/java/org/hibernate/engine/jdbc/JdbcLogging.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.jboss.logging.annotations.ValidIdRange;
1818

1919
import java.lang.invoke.MethodHandles;
20+
import java.sql.SQLException;
2021

2122
import static org.jboss.logging.Logger.Level.DEBUG;
2223
import static org.jboss.logging.Logger.Level.INFO;
@@ -176,4 +177,17 @@ public interface JdbcLogging extends BasicLogger {
176177
@LogMessage(level = DEBUG)
177178
@Message(value = "Encountered failure rolling back failed commit", id = 100038)
178179
void encounteredFailureRollingBackFailedCommit(@Cause Throwable cause);
180+
181+
@LogMessage(level = DEBUG)
182+
@Message(value = "Could not access DatabaseMetaData while building the JdbcEnvironment", id = 100039)
183+
void noDatabaseMetaData(@Cause SQLException sqle);
184+
185+
@LogMessage(level = WARN)
186+
@Message(value = "Could not obtain connection metadata: %s", id = 100045)
187+
void unableToObtainConnectionMetadata(SQLException error);
188+
189+
@LogMessage(level = WARN)
190+
@Message(value = "Could not obtain connection to query JDBC database metadata", id = 100046)
191+
void unableToObtainConnectionToQueryMetadata(@Cause Exception e);
192+
179193
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/JdbcBatchLogging.java

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import static org.jboss.logging.Logger.Level.WARN;
2222

2323
/**
24-
* Sub-system logging related to JDBC batch execution
24+
* Subsystem logging related to JDBC batch execution
2525
*
2626
* @author Steve Ebersole
2727
*/
@@ -35,38 +35,50 @@
3535
public interface JdbcBatchLogging extends BasicLogger {
3636
String NAME = "org.hibernate.orm.jdbc.batch";
3737

38-
Logger BATCH_LOGGER = Logger.getLogger( NAME );
3938
JdbcBatchLogging BATCH_MESSAGE_LOGGER = Logger.getMessageLogger( MethodHandles.lookup(), JdbcBatchLogging.class, NAME );
4039

4140
@LogMessage(level = INFO)
4241
@Message(id=100501, value = "Automatic JDBC statement batching enabled (maximum batch size %s)")
4342
void batchingEnabled(int batchSize);
4443

4544
@LogMessage(level = WARN)
46-
@Message(id = 100502, value = "Unable to release batch statement")
45+
@Message(id = 100502, value = "Unable to release JDBC batch statement")
4746
void unableToReleaseBatchStatement();
4847

4948
@LogMessage(level = INFO)
50-
@Message(id=100503, value = "On release of batch it still contained JDBC statements")
49+
@Message(id=100503, value = "JDBC batch still contained JDBC statements on release")
5150
void batchContainedStatementsOnRelease();
5251

5352
@LogMessage(level = TRACE)
5453
@Message("Created JDBC batch (%s) - [%s]")
55-
void createBatch(int batchSize, String string);
54+
void createBatch(int batchSize, String batchKey);
5655

5756
@LogMessage(level = TRACE)
5857
@Message("Adding to JDBC batch (%s / %s) - [%s]")
59-
void addToBatch(int batchPosition, int batchSize, String string);
58+
void addToBatch(int batchPosition, int batchSize, String batchKey);
6059

6160
@LogMessage(level = TRACE)
6261
@Message("Executing JDBC batch (%s / %s) - [%s]")
63-
void executeBatch(int batchPosition, int batchSize, String string);
62+
void executeBatch(int batchPosition, int batchSize, String batchKey);
6463

6564
@LogMessage(level = TRACE)
6665
@Message("Conditionally executing JDBC batch - [%s]")
67-
void conditionallyExecuteBatch(String string);
66+
void conditionallyExecuteBatch(String batchKey);
6867

6968
@LogMessage(level = TRACE)
7069
@Message("Aborting JDBC batch - [%s]")
71-
void abortBatch(String string);
70+
void abortBatch(String batchKey);
71+
72+
@LogMessage(level = TRACE)
73+
@Message("Using standard JDBC batch builder")
74+
void usingStandardBatchBuilder();
75+
76+
@LogMessage(level = TRACE)
77+
@Message("No statements to execute in JDBC batch - [%s]")
78+
void emptyBatch(String batchKey);
79+
80+
// this might actually belong in JdbcLogging
81+
@LogMessage(level = TRACE)
82+
@Message("PreparedStatementDetails did not contain PreparedStatement on releaseStatements: %s")
83+
void noPreparedStatements(String sqlString);
7284
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchBuilderImpl.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.hibernate.sql.model.jdbc.JdbcInsertMutation;
2020

2121
import static java.util.Collections.emptyList;
22-
import static org.hibernate.engine.jdbc.batch.JdbcBatchLogging.BATCH_LOGGER;
2322
import static org.hibernate.engine.jdbc.batch.JdbcBatchLogging.BATCH_MESSAGE_LOGGER;
2423

2524
/**
@@ -40,7 +39,7 @@ public BatchBuilderImpl(int globalBatchSize) {
4039
if ( globalBatchSize > 1 ) {
4140
BATCH_MESSAGE_LOGGER.batchingEnabled( globalBatchSize );
4241
}
43-
BATCH_LOGGER.trace( "Using standard BatchBuilder");
42+
BATCH_MESSAGE_LOGGER.usingStandardBatchBuilder();
4443
this.globalBatchSize = globalBatchSize;
4544
}
4645

hibernate-core/src/main/java/org/hibernate/engine/jdbc/batch/internal/BatchImpl.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222

2323
import static java.util.Objects.requireNonNull;
2424
import static org.hibernate.engine.jdbc.JdbcLogging.JDBC_MESSAGE_LOGGER;
25-
import static org.hibernate.engine.jdbc.batch.JdbcBatchLogging.BATCH_LOGGER;
2625
import static org.hibernate.engine.jdbc.batch.JdbcBatchLogging.BATCH_MESSAGE_LOGGER;
2726
import static org.hibernate.sql.model.ModelMutationLogging.MODEL_MUTATION_LOGGER;
2827

@@ -64,7 +63,7 @@ public BatchImpl(
6463
sqlStatementLogger = jdbcServices.getSqlStatementLogger();
6564
sqlExceptionHelper = jdbcServices.getSqlExceptionHelper();
6665

67-
if ( BATCH_LOGGER.isTraceEnabled() ) {
66+
if ( BATCH_MESSAGE_LOGGER.isTraceEnabled() ) {
6867
BATCH_MESSAGE_LOGGER.createBatch(
6968
batchSizeToUse,
7069
key.toLoggableString()
@@ -102,7 +101,7 @@ public void addToBatch(
102101

103102
@Override
104103
public void addToBatch(JdbcValueBindings jdbcValueBindings, TableInclusionChecker inclusionChecker) {
105-
final boolean loggerTraceEnabled = BATCH_LOGGER.isTraceEnabled();
104+
final boolean loggerTraceEnabled = BATCH_MESSAGE_LOGGER.isTraceEnabled();
106105
if ( loggerTraceEnabled ) {
107106
BATCH_MESSAGE_LOGGER.addToBatch(
108107
batchPosition + 1,
@@ -132,10 +131,9 @@ public void addToBatch(JdbcValueBindings jdbcValueBindings, TableInclusionChecke
132131
try {
133132
statement.addBatch();
134133
}
135-
catch (SQLException e) {
136-
BATCH_LOGGER.debug( "SQLException escaped proxy", e );
134+
catch (SQLException exception) {
137135
throw sqlExceptionHelper.convert(
138-
e,
136+
exception,
139137
"Could not perform addBatch",
140138
sqlString
141139
);
@@ -212,14 +210,11 @@ protected void abortBatch(Exception cause) {
212210
@Override
213211
public void execute() {
214212
notifyObserversExplicitExecution();
215-
if ( getStatementGroup().getNumberOfStatements() != 0 ) {
213+
if ( getStatementGroup().getNumberOfStatements() > 0 ) {
216214
try {
217215
if ( batchPosition == 0 ) {
218-
if ( !batchExecuted && BATCH_LOGGER.isDebugEnabled() ) {
219-
BATCH_LOGGER.debugf(
220-
"No batched statements to execute - %s",
221-
getKey().toLoggableString()
222-
);
216+
if ( !batchExecuted && BATCH_MESSAGE_LOGGER.isTraceEnabled() ) {
217+
BATCH_MESSAGE_LOGGER.emptyBatch( getKey().toLoggableString() );
223218
}
224219
}
225220
else {
@@ -233,7 +228,7 @@ public void execute() {
233228
}
234229

235230
protected void performExecution() {
236-
if ( BATCH_LOGGER.isTraceEnabled() ) {
231+
if ( BATCH_MESSAGE_LOGGER.isTraceEnabled() ) {
237232
BATCH_MESSAGE_LOGGER.executeBatch(
238233
batchPosition,
239234
batchSizeToUse,
@@ -314,7 +309,7 @@ private void checkRowCounts(int[] rowCounts, PreparedStatementDetails statementD
314309
public void release() {
315310
if ( BATCH_MESSAGE_LOGGER.isInfoEnabled() ) {
316311
final var statementGroup = getStatementGroup();
317-
if ( statementGroup.getNumberOfStatements() != 0
312+
if ( statementGroup.getNumberOfStatements() > 0
318313
&& statementGroup.hasMatching( statementDetails -> statementDetails.getStatement() != null ) ) {
319314
BATCH_MESSAGE_LOGGER.batchContainedStatementsOnRelease();
320315
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/cursor/internal/StandardRefCursorSupport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,15 +84,15 @@ public static boolean supportsRefCursors(DatabaseMetaData meta) {
8484
final boolean mightSupportIt = meta.supportsRefCursors();
8585
// Some databases cheat and don't actually support it correctly: add some additional checks.
8686
if ( mightSupportIt ) {
87-
if ( "Oracle JDBC driver".equals( meta.getDriverName() ) && meta.getDriverMajorVersion() < 19 ) {
87+
if ( "Oracle JDBC driver".equals( meta.getDriverName() )
88+
&& meta.getDriverMajorVersion() < 19 ) {
8889
return false;
8990
}
9091
}
9192
return mightSupportIt;
9293
}
9394
catch (Exception throwable) {
94-
//If the driver is not compatible with the Java 8 contract, the method might not exit.
95-
LOG.debug( "Unexpected error trying to gauge level of JDBC REF_CURSOR support: " + throwable.getMessage() );
95+
// If the driver is not compatible with the Java 8 contract, the method might not exit.
9696
return false;
9797
}
9898
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentImpl.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@
3030
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
3131
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
3232

33-
import org.jboss.logging.Logger;
34-
3533
import static org.hibernate.cfg.MappingSettings.DEFAULT_CATALOG;
3634
import static org.hibernate.cfg.MappingSettings.DEFAULT_SCHEMA;
3735
import static org.hibernate.engine.config.spi.StandardConverters.STRING;
@@ -42,7 +40,6 @@
4240
* @author Steve Ebersole
4341
*/
4442
public class JdbcEnvironmentImpl implements JdbcEnvironment {
45-
private static final Logger LOG = Logger.getLogger( JdbcEnvironmentImpl.class );
4643

4744
private final Dialect dialect;
4845

@@ -120,7 +117,7 @@ private static IdentifierHelper identifierHelper(Dialect dialect, IdentifierHelp
120117
}
121118
catch (SQLException sqle) {
122119
// should never ever happen
123-
LOG.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
120+
JDBC_MESSAGE_LOGGER.noDatabaseMetaData( sqle );
124121
}
125122
return builder.build();
126123
}
@@ -210,7 +207,7 @@ private IdentifierHelper identifierHelper(DatabaseMetaData databaseMetaData, Dia
210207
}
211208
catch (SQLException sqle) {
212209
// should never ever happen
213-
LOG.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
210+
JDBC_MESSAGE_LOGGER.noDatabaseMetaData( sqle );
214211
}
215212
return identifierHelperBuilder.build();
216213
}
@@ -224,7 +221,6 @@ private NameQualifierSupport nameQualifierSupport(DatabaseMetaData databaseMetaD
224221
private NameQualifierSupport determineNameQualifierSupport(DatabaseMetaData databaseMetaData) throws SQLException {
225222
final boolean supportsCatalogs = databaseMetaData.supportsCatalogsInTableDefinitions();
226223
final boolean supportsSchemas = databaseMetaData.supportsSchemasInTableDefinitions();
227-
228224
if ( supportsCatalogs && supportsSchemas ) {
229225
return NameQualifierSupport.BOTH;
230226
}
@@ -271,7 +267,7 @@ public JdbcEnvironmentImpl(
271267

272268
sqlAstTranslatorFactory = resolveSqlAstTranslatorFactory( dialect );
273269

274-
final ConfigurationService cfgService = configurationService( serviceRegistry );
270+
final var cfgService = configurationService( serviceRegistry );
275271

276272
sqlExceptionHelper =
277273
buildSqlExceptionHelper( dialect,
@@ -311,7 +307,7 @@ private IdentifierHelper identifierHelper(
311307
}
312308
catch (SQLException sqle) {
313309
// should never ever happen
314-
LOG.debug( "There was a problem accessing DatabaseMetaData in building the JdbcEnvironment", sqle );
310+
JDBC_MESSAGE_LOGGER.noDatabaseMetaData( sqle );
315311
}
316312
return builder.build();
317313
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;
3232
import org.hibernate.event.monitor.internal.EmptyEventMonitor;
3333
import org.hibernate.event.monitor.spi.EventMonitor;
34-
import org.hibernate.internal.CoreLogging;
35-
import org.hibernate.internal.CoreMessageLogger;
3634
import org.hibernate.internal.log.ConnectionInfoLogger;
3735
import org.hibernate.jdbc.AbstractReturningWork;
3836
import org.hibernate.jpa.internal.MutableJpaComplianceImpl;
@@ -80,8 +78,6 @@
8078
*/
8179
public class JdbcEnvironmentInitiator implements StandardServiceInitiator<JdbcEnvironment> {
8280

83-
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( JdbcEnvironmentInitiator.class );
84-
8581
public static final JdbcEnvironmentInitiator INSTANCE = new JdbcEnvironmentInitiator();
8682

8783
/**
@@ -137,7 +133,7 @@ private JdbcEnvironment getJdbcEnvironment(
137133
Integer explicitDatabaseMajorVersion,
138134
Integer explicitDatabaseMinorVersion,
139135
String explicitDatabaseVersion) {
140-
final DialectFactory dialectFactory = registry.requireService( DialectFactory.class );
136+
final var dialectFactory = registry.requireService( DialectFactory.class );
141137

142138
final JdbcEnvironment jdbcEnvironment;
143139
final DatabaseConnectionInfo databaseConnectionInfo;
@@ -211,7 +207,7 @@ protected JdbcEnvironmentImpl getJdbcEnvironmentWithExplicitConfiguration(
211207
Integer explicitDatabaseMajorVersion,
212208
Integer explicitDatabaseMinorVersion,
213209
String explicitDatabaseVersion) {
214-
final DialectResolutionInfo dialectResolutionInfo = new DialectResolutionInfoImpl(
210+
final var dialectResolutionInfo = new DialectResolutionInfoImpl(
215211
null,
216212
explicitDatabaseName,
217213
explicitDatabaseVersion,
@@ -333,15 +329,15 @@ protected JdbcEnvironmentImpl getJdbcEnvironmentUsingJdbcMetadata(
333329
Integer explicitDatabaseMajorVersion,
334330
Integer explicitDatabaseMinorVersion,
335331
String explicitDatabaseVersion) {
336-
final JdbcConnectionAccess jdbcConnectionAccess = buildJdbcConnectionAccess( registry );
337-
final JdbcServicesImpl jdbcServices = new JdbcServicesImpl( registry );
338-
final TemporaryJdbcSessionOwner temporaryJdbcSessionOwner = new TemporaryJdbcSessionOwner(
332+
final var jdbcConnectionAccess = buildJdbcConnectionAccess( registry );
333+
final var jdbcServices = new JdbcServicesImpl( registry );
334+
final var temporaryJdbcSessionOwner = new TemporaryJdbcSessionOwner(
339335
jdbcConnectionAccess,
340336
jdbcServices,
341337
new SqlExceptionHelper( false ),
342338
registry
343339
);
344-
final JdbcCoordinatorImpl jdbcCoordinator = new JdbcCoordinatorImpl( null, temporaryJdbcSessionOwner, jdbcServices );
340+
final var jdbcCoordinator = new JdbcCoordinatorImpl( null, temporaryJdbcSessionOwner, jdbcServices );
345341

346342
try {
347343
temporaryJdbcSessionOwner.transactionCoordinator = registry.requireService( TransactionCoordinatorBuilder.class )
@@ -351,10 +347,9 @@ protected JdbcEnvironmentImpl getJdbcEnvironmentUsingJdbcMetadata(
351347
@Override
352348
public JdbcEnvironmentImpl execute(Connection connection) {
353349
try {
354-
final DatabaseMetaData metadata = connection.getMetaData();
350+
final var metadata = connection.getMetaData();
355351
logDatabaseAndDriver( metadata );
356-
357-
final DialectResolutionInfo dialectResolutionInfo = new DialectResolutionInfoImpl(
352+
final var dialectResolutionInfo = new DialectResolutionInfoImpl(
358353
metadata,
359354
explicitDatabaseName == null
360355
? metadata.getDatabaseProductName()
@@ -385,7 +380,7 @@ public JdbcEnvironmentImpl execute(Connection connection) {
385380
);
386381
}
387382
catch (SQLException e) {
388-
LOG.unableToObtainConnectionMetadata( e );
383+
JDBC_MESSAGE_LOGGER.unableToObtainConnectionMetadata( e );
389384
}
390385

391386
// accessing the JDBC metadata failed
@@ -416,7 +411,7 @@ private int databaseMicroVersion(DatabaseMetaData metadata) throws SQLException
416411
);
417412
}
418413
catch ( Exception e ) {
419-
LOG.unableToObtainConnectionToQueryMetadata( e );
414+
JDBC_MESSAGE_LOGGER.unableToObtainConnectionToQueryMetadata( e );
420415
}
421416
finally {
422417
//noinspection resource
@@ -427,7 +422,7 @@ private int databaseMicroVersion(DatabaseMetaData metadata) throws SQLException
427422
}
428423

429424
private static void logDatabaseAndDriver(DatabaseMetaData dbmd) throws SQLException {
430-
if ( LOG.isDebugEnabled() ) {
425+
if ( JDBC_MESSAGE_LOGGER.isDebugEnabled() ) {
431426
JDBC_MESSAGE_LOGGER.logDatabaseInfo(
432427
dbmd.getDatabaseProductName(),
433428
dbmd.getDatabaseProductVersion(),

hibernate-core/src/main/java/org/hibernate/engine/jdbc/internal/JdbcCoordinatorImpl.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,10 @@ public void executeBatch() {
205205
@Override
206206
public void conditionallyExecuteBatch(BatchKey key) {
207207
if ( currentBatch != null && !currentBatch.getKey().equals( key ) ) {
208-
BATCH_MESSAGE_LOGGER.conditionallyExecuteBatch( currentBatch.getKey().toLoggableString() );
208+
if ( BATCH_MESSAGE_LOGGER.isTraceEnabled() ) {
209+
BATCH_MESSAGE_LOGGER.conditionallyExecuteBatch(
210+
currentBatch.getKey().toLoggableString() );
211+
}
209212
try {
210213
currentBatch.execute();
211214
}
@@ -221,7 +224,10 @@ public void conditionallyExecuteBatch(BatchKey key) {
221224
@Override
222225
public void abortBatch() {
223226
if ( currentBatch != null ) {
224-
BATCH_MESSAGE_LOGGER.abortBatch( currentBatch.getKey().toLoggableString());
227+
if ( BATCH_MESSAGE_LOGGER.isTraceEnabled() ) {
228+
BATCH_MESSAGE_LOGGER.abortBatch(
229+
currentBatch.getKey().toLoggableString() );
230+
}
225231
currentBatch.release();
226232
currentBatch = null;
227233
}

0 commit comments

Comments
 (0)