Skip to content

Commit a6aeeba

Browse files
committed
HHH-18989 log more info when DataSource is used
get it from the DatabaseMetaData
1 parent aea72cc commit a6aeeba

File tree

12 files changed

+320
-41
lines changed

12 files changed

+320
-41
lines changed

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

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
1313
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
1414
import org.hibernate.internal.util.NullnessHelper;
15-
import org.hibernate.internal.util.StringHelper;
1615
import org.hibernate.internal.util.config.ConfigurationHelper;
1716

1817
import static org.hibernate.dialect.SimpleDatabaseVersion.ZERO_VERSION;
1918
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.interpretIsolation;
2019
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
20+
import static org.hibernate.internal.util.StringHelper.isNotEmpty;
2121
import static org.hibernate.internal.util.StringHelper.nullIfEmpty;
22+
import static org.hibernate.internal.util.config.ConfigurationHelper.getString;
2223

2324
/**
2425
* Standard implementation of {@link DatabaseConnectionInfo}
@@ -122,7 +123,7 @@ public String toInfoString() {
122123
}
123124

124125
private static String handleEmpty(String value) {
125-
return StringHelper.isNotEmpty( value ) ? value : DEFAULT;
126+
return isNotEmpty( value ) ? value : DEFAULT;
126127
}
127128

128129
private static String handleEmpty(DatabaseVersion dialectVersion) {
@@ -141,23 +142,23 @@ private static String handleEmpty(Class<?> value) {
141142
@SuppressWarnings("deprecation")
142143
private static String determineUrl(Map<String, Object> settings) {
143144
return NullnessHelper.coalesceSuppliedValues(
144-
() -> ConfigurationHelper.getString( JdbcSettings.JAKARTA_JDBC_URL, settings ),
145-
() -> ConfigurationHelper.getString( JdbcSettings.URL, settings ),
146-
() -> ConfigurationHelper.getString( JdbcSettings.JPA_JDBC_URL, settings )
145+
() -> getString( JdbcSettings.JAKARTA_JDBC_URL, settings ),
146+
() -> getString( JdbcSettings.URL, settings ),
147+
() -> getString( JdbcSettings.JPA_JDBC_URL, settings )
147148
);
148149
}
149150

150151
@SuppressWarnings("deprecation")
151152
private static String determineDriver(Map<String, Object> settings) {
152153
return NullnessHelper.coalesceSuppliedValues(
153-
() -> ConfigurationHelper.getString( JdbcSettings.JAKARTA_JDBC_DRIVER, settings ),
154-
() -> ConfigurationHelper.getString( JdbcSettings.DRIVER, settings ),
155-
() -> ConfigurationHelper.getString( JdbcSettings.JPA_JDBC_DRIVER, settings )
154+
() -> getString( JdbcSettings.JAKARTA_JDBC_DRIVER, settings ),
155+
() -> getString( JdbcSettings.DRIVER, settings ),
156+
() -> getString( JdbcSettings.JPA_JDBC_DRIVER, settings )
156157
);
157158
}
158159

159160
private static String determineAutoCommitMode(Map<String, Object> settings) {
160-
return ConfigurationHelper.getString( JdbcSettings.AUTOCOMMIT, settings );
161+
return getString( JdbcSettings.AUTOCOMMIT, settings );
161162
}
162163

163164
private static String determineIsolationLevel(Map<String, Object> settings) {

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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
1717
import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
1818
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
19+
import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData;
1920
import org.hibernate.engine.jndi.spi.JndiService;
2021
import org.hibernate.internal.log.ConnectionInfoLogger;
2122
import org.hibernate.service.UnknownUnwrapTypeException;
@@ -24,6 +25,7 @@
2425
import org.hibernate.service.spi.Stoppable;
2526

2627
import static org.hibernate.cfg.JdbcSettings.DATASOURCE;
28+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
2729

2830
/**
2931
* A {@link ConnectionProvider} that manages connections from an underlying {@link DataSource}.
@@ -40,6 +42,7 @@
4042
* @author Steve Ebersole
4143
*/
4244
public class DatasourceConnectionProviderImpl implements ConnectionProvider, Configurable, Stoppable {
45+
4346
private DataSource dataSource;
4447
private String user;
4548
private String pass;
@@ -149,21 +152,41 @@ public boolean supportsAggressiveRelease() {
149152

150153
@Override
151154
public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
155+
return getDatabaseConnectionInfo( dialect, null );
156+
}
157+
158+
@Override
159+
public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect, ExtractedDatabaseMetaData metaData) {
160+
final String url;
161+
final String driver;
162+
final String isolationLevel;
163+
if ( metaData != null ) {
164+
url = metaData.getUrl();
165+
driver = metaData.getDriver();
166+
isolationLevel = toIsolationNiceName( metaData.getTransactionIsolation() )
167+
+ " [default " + toIsolationNiceName( metaData.getDefaultTransactionIsolation() ) + "]";
168+
}
169+
else {
170+
url = null;
171+
driver = null;
172+
isolationLevel = null;
173+
}
174+
152175
return new DatabaseConnectionInfoImpl(
153176
DatasourceConnectionProviderImpl.class,
154-
null,
155-
null,
177+
url,
178+
driver,
156179
dialect.getVersion(),
157180
null,
158-
null,
181+
isolationLevel,
159182
null,
160183
null
161184
) {
162185
@Override
163186
public String toInfoString() {
164187
return dataSourceJndiName != null
165-
? "\tDatasource JNDI name [" + dataSourceJndiName + "]"
166-
: "\tProvided DataSource";
188+
? "\tDataSource JNDI name [" + dataSourceJndiName + "]\n" + super.toInfoString()
189+
: super.toInfoString();
167190
}
168191
};
169192
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import org.hibernate.internal.log.ConnectionInfoLogger;
3939

4040
import static org.hibernate.cfg.JdbcSettings.JAKARTA_JDBC_URL;
41+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
4142
import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean;
4243
import static org.hibernate.internal.util.config.ConfigurationHelper.getInt;
4344
import static org.hibernate.internal.util.config.ConfigurationHelper.getLong;
@@ -148,7 +149,7 @@ private static ConnectionCreator buildCreator(
148149
driverList,
149150
SimpleDatabaseVersion.ZERO_VERSION,
150151
Boolean.toString( autoCommit ),
151-
isolation != null ? ConnectionProviderInitiator.toIsolationNiceName( isolation ) : null,
152+
isolation != null ? toIsolationNiceName( isolation ) : null,
152153
getInt( MIN_SIZE, configurationValues, 1 ),
153154
getInt( AvailableSettings.POOL_SIZE, configurationValues, 20 )
154155
);

hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProvider.java

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

1010
import org.hibernate.dialect.Dialect;
1111
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
12+
import org.hibernate.engine.jdbc.env.spi.ExtractedDatabaseMetaData;
1213
import org.hibernate.service.Service;
1314
import org.hibernate.service.spi.Wrapped;
1415

@@ -71,8 +72,21 @@ public interface ConnectionProvider extends Service, Wrapped {
7172
*/
7273
boolean supportsAggressiveRelease();
7374

75+
/**
76+
* @return an informative instance of {@link DatabaseConnectionInfo} for logging.
77+
*
78+
* @since 6.6
79+
*/
7480
default DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
7581
return new DatabaseConnectionInfoImpl( dialect );
7682
}
7783

84+
/**
85+
* @return an informative instance of {@link DatabaseConnectionInfo} for logging.
86+
*
87+
* @since 7.0
88+
*/
89+
default DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect, ExtractedDatabaseMetaData metaData) {
90+
return getDatabaseConnectionInfo( dialect );
91+
}
7892
}

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

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public class ExtractedDatabaseMetaDataImpl implements ExtractedDatabaseMetaData
4444
private final boolean supportsDataDefinitionInTransaction;
4545
private final boolean doesDataDefinitionCauseTransactionCommit;
4646
private final SQLStateType sqlStateType;
47+
private final int transactionIsolation;
48+
private final int defaultTransactionIsolation;
49+
private final String url;
50+
private final String driver;
4751
private final boolean jdbcMetadataAccessible;
4852

4953

@@ -65,6 +69,10 @@ private ExtractedDatabaseMetaDataImpl(
6569
boolean supportsDataDefinitionInTransaction,
6670
boolean doesDataDefinitionCauseTransactionCommit,
6771
SQLStateType sqlStateType,
72+
int transactionIsolation,
73+
int defaultTransactionIsolation,
74+
String url,
75+
String driver,
6876
boolean jdbcMetadataIsAccessible) {
6977
this.jdbcEnvironment = jdbcEnvironment;
7078
this.connectionAccess = connectionAccess;
@@ -78,6 +86,10 @@ private ExtractedDatabaseMetaDataImpl(
7886
this.supportsDataDefinitionInTransaction = supportsDataDefinitionInTransaction;
7987
this.doesDataDefinitionCauseTransactionCommit = doesDataDefinitionCauseTransactionCommit;
8088
this.sqlStateType = sqlStateType;
89+
this.transactionIsolation = transactionIsolation;
90+
this.defaultTransactionIsolation = defaultTransactionIsolation;
91+
this.url = url;
92+
this.driver = driver;
8193
this.jdbcMetadataAccessible = jdbcMetadataIsAccessible;
8294
}
8395

@@ -136,6 +148,26 @@ public String getConnectionSchemaName() {
136148
return connectionSchemaName;
137149
}
138150

151+
@Override
152+
public String getUrl() {
153+
return url;
154+
}
155+
156+
@Override
157+
public String getDriver() {
158+
return driver;
159+
}
160+
161+
@Override
162+
public int getTransactionIsolation() {
163+
return transactionIsolation;
164+
}
165+
166+
@Override
167+
public int getDefaultTransactionIsolation() {
168+
return defaultTransactionIsolation;
169+
}
170+
139171
@Override
140172
public synchronized List<SequenceInformation> getSequenceInformationList() {
141173
if ( jdbcMetadataAccessible ) {
@@ -175,6 +207,10 @@ public static class Builder {
175207
private boolean supportsDataDefinitionInTransaction;
176208
private boolean doesDataDefinitionCauseTransactionCommit;
177209
private SQLStateType sqlStateType;
210+
private String url;
211+
private String driver;
212+
private int defaultTransactionIsolation;
213+
private int transactionIsolation;
178214

179215
public Builder(JdbcEnvironment jdbcEnvironment, boolean jdbcMetadataIsAccessible, JdbcConnectionAccess connectionAccess) {
180216
this.jdbcEnvironment = jdbcEnvironment;
@@ -193,6 +229,10 @@ public Builder apply(DatabaseMetaData databaseMetaData) throws SQLException {
193229
supportsDataDefinitionInTransaction = !databaseMetaData.dataDefinitionIgnoredInTransactions();
194230
doesDataDefinitionCauseTransactionCommit = databaseMetaData.dataDefinitionCausesTransactionCommit();
195231
sqlStateType = SQLStateType.interpretReportedSQLStateType( databaseMetaData.getSQLStateType() );
232+
url = databaseMetaData.getURL();
233+
driver = databaseMetaData.getDriverName();
234+
defaultTransactionIsolation = databaseMetaData.getDefaultTransactionIsolation();
235+
transactionIsolation = databaseMetaData.getConnection().getTransactionIsolation();
196236
return this;
197237
}
198238

@@ -260,6 +300,10 @@ public ExtractedDatabaseMetaDataImpl build() {
260300
supportsDataDefinitionInTransaction,
261301
doesDataDefinitionCauseTransactionCommit,
262302
sqlStateType,
303+
transactionIsolation,
304+
defaultTransactionIsolation,
305+
url,
306+
driver,
263307
jdbcMetadataIsAccessible
264308
);
265309
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ public JdbcEnvironmentImpl(final ServiceRegistryImplementor serviceRegistry, fin
8686
final IdentifierHelperBuilder identifierHelperBuilder =
8787
identifierHelperBuilder( cfgService, nameQualifierSupport );
8888

89-
final ExtractedDatabaseMetaDataImpl.Builder dbMetaDataBuilder =
89+
final ExtractedDatabaseMetaDataImpl.Builder metaDataBuilder =
9090
new ExtractedDatabaseMetaDataImpl.Builder( this, false, null );
9191

92-
this.identifierHelper = identifierHelper( dialect, identifierHelperBuilder, dbMetaDataBuilder );;
92+
this.identifierHelper = identifierHelper( dialect, identifierHelperBuilder, metaDataBuilder );;
9393

94-
this.extractedMetaDataSupport = dbMetaDataBuilder.build();
94+
this.extractedMetaDataSupport = metaDataBuilder.build();
9595

9696
this.currentCatalog = identifierHelper.toIdentifier(
9797
cfgService.getSetting( AvailableSettings.DEFAULT_CATALOG, StandardConverters.STRING )

0 commit comments

Comments
 (0)