Skip to content

Commit b7f11b8

Browse files
committed
get the isolation level from the connection for the database info log
1 parent 52d6aab commit b7f11b8

File tree

6 files changed

+50
-30
lines changed

6 files changed

+50
-30
lines changed

hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import static java.util.function.Function.identity;
4040
import static java.util.stream.Collectors.toMap;
4141
import static org.hibernate.cfg.AgroalSettings.AGROAL_CONFIG_PREFIX;
42+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
4243
import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.allowJdbcMetadataAccess;
4344

4445
/**
@@ -81,7 +82,7 @@ private static String extractIsolationAsString(Map<String, Object> properties) {
8182
final Integer isolation = ConnectionProviderInitiator.extractIsolation( properties );
8283
return isolation != null ?
8384
// Agroal resolves transaction isolation from the 'nice' name
84-
ConnectionProviderInitiator.toIsolationNiceName( isolation )
85+
toIsolationNiceName( isolation )
8586
: null;
8687
}
8788

@@ -177,9 +178,9 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
177178
: extractDriverNameFromMetadata(),
178179
dialect.getVersion(),
179180
Boolean.toString( acfc.autoCommit() ),
180-
acfc.jdbcTransactionIsolation() != null
181-
? ConnectionProviderInitiator.toIsolationNiceName( acfc.jdbcTransactionIsolation().level() )
182-
: null,
181+
acfc.jdbcTransactionIsolation() != null && acfc.jdbcTransactionIsolation().isDefined()
182+
? toIsolationNiceName( acfc.jdbcTransactionIsolation().level() )
183+
: toIsolationNiceName( getIsolation( agroalDataSource ) ),
183184
acpc.minSize(),
184185
acpc.maxSize(),
185186
getFetchSize( agroalDataSource )
@@ -197,6 +198,15 @@ private static Integer getFetchSize(DataSource dataSource) {
197198
}
198199
}
199200

201+
private static Integer getIsolation(DataSource dataSource) {
202+
try ( var conn = dataSource.getConnection() ) {
203+
return conn.getTransactionIsolation();
204+
}
205+
catch ( SQLException ignored ) {
206+
return null;
207+
}
208+
}
209+
200210
private String extractDriverNameFromMetadata() {
201211
if (isMetadataAccessAllowed) {
202212
try ( Connection conn = getConnection() ) {

hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
1010
import org.hibernate.cfg.JdbcSettings;
1111
import org.hibernate.dialect.Dialect;
12-
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
1312
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
1413
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
1514
import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
@@ -40,7 +39,9 @@
4039
import static org.hibernate.cfg.C3p0Settings.C3P0_MAX_STATEMENTS;
4140
import static org.hibernate.cfg.C3p0Settings.C3P0_MIN_SIZE;
4241
import static org.hibernate.cfg.C3p0Settings.C3P0_TIMEOUT;
42+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.extractIsolation;
4343
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.extractSetting;
44+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.getConnectionProperties;
4445
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
4546
import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean;
4647
import static org.hibernate.internal.util.config.ConfigurationHelper.getInteger;
@@ -150,13 +151,16 @@ public void configure(Map<String, Object> properties) {
150151
// as soon as we obtain a new connection. This maybe isn't ideal,
151152
// and it's not what we do with Agroal or Hikari.
152153
autocommit = getBoolean( JdbcSettings.AUTOCOMMIT, properties ); // defaults to false
153-
isolation = ConnectionProviderInitiator.extractIsolation( properties );
154+
isolation = extractIsolation( properties );
154155

155-
final Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( properties );
156-
final Map<String, Object> poolSettings = poolSettings( properties );
156+
final Properties connectionProps = getConnectionProperties( properties );
157+
final var poolSettings = poolSettings( properties );
157158
dataSource = createDataSource( jdbcUrl, connectionProps, poolSettings );
158159

159160
final Integer fetchSize = getFetchSize( dataSource );
161+
if ( isolation == null ) {
162+
isolation = getIsolation( dataSource );
163+
}
160164
dbInfoProducer = dialect -> new DatabaseConnectionInfoImpl(
161165
C3P0ConnectionProvider.class,
162166
jdbcUrl,
@@ -183,6 +187,15 @@ private static Integer getFetchSize(DataSource dataSource) {
183187
}
184188
}
185189

190+
private static Integer getIsolation(DataSource dataSource) {
191+
try ( var conn = dataSource.getConnection() ) {
192+
return conn.getTransactionIsolation();
193+
}
194+
catch ( SQLException ignored ) {
195+
return null;
196+
}
197+
}
198+
186199
private DataSource createDataSource(String jdbcUrl, Properties connectionProps, Map<String, Object> poolProperties) {
187200
try {
188201
return pooledDataSource( unpooledDataSource( jdbcUrl, connectionProps ), poolProperties );

hibernate-c3p0/src/test/java/org/hibernate/test/c3p0/C3P0ConnectionProviderTest.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,15 @@
55
package org.hibernate.test.c3p0;
66

77
import java.lang.management.ManagementFactory;
8-
import java.util.HashMap;
9-
import java.util.Map;
108
import java.util.Set;
119
import javax.management.MBeanServer;
1210
import javax.management.ObjectName;
1311

1412
import org.hibernate.c3p0.internal.C3P0ConnectionProvider;
15-
import org.hibernate.cfg.Environment;
1613
import org.hibernate.dialect.SybaseASEDialect;
1714
import org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.ConnectionProviderJdbcConnectionAccess;
1815
import org.hibernate.engine.jdbc.spi.JdbcServices;
1916

20-
import org.hibernate.testing.orm.junit.JiraKey;
2117
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
2218
import org.hibernate.testing.orm.junit.SkipForDialect;
2319
import org.junit.Test;
@@ -92,17 +88,4 @@ public void testHHH6635() throws Exception {
9288

9389
assertTrue( "PooledDataSource BMean not found, please verify version of c3p0", mbeanfound );
9490
}
95-
96-
@Test @JiraKey(value="HHH-9498")
97-
public void testIsolationPropertyCouldBeEmpty() {
98-
C3P0ConnectionProvider provider = new C3P0ConnectionProvider();
99-
try {
100-
Map<String,Object> configuration = new HashMap<>();
101-
configuration.put( Environment.ISOLATION, "" );
102-
provider.configure( configuration );
103-
}
104-
finally {
105-
provider.stop();
106-
}
107-
}
10891
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,10 @@ public String toInfoString() {
128128
\tDatabase version: %s
129129
\tAutocommit mode: %s
130130
\tIsolation level: %s
131+
\tJDBC fetch size: %s
131132
\tPool: %s
132133
\tMinimum pool size: %s
133-
\tMaximum pool size: %s
134-
\tJDBC fetch size: %s"""
134+
\tMaximum pool size: %s"""
135135
.formatted(
136136
handleEmpty( jdbcUrl ),
137137
handleEmpty( jdbcDriver ),

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.hibernate.internal.log.ConnectionInfoLogger;
3838

3939
import static org.hibernate.cfg.JdbcSettings.JAKARTA_JDBC_URL;
40+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.extractIsolation;
41+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.getConnectionProperties;
4042
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
4143
import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean;
4244
import static org.hibernate.internal.util.config.ConfigurationHelper.getInt;
@@ -134,10 +136,10 @@ private static ConnectionCreator buildCreator(
134136

135137
final String driverList = success ? driverClassName : driverList();
136138

137-
final Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( configurationValues );
139+
final Properties connectionProps = getConnectionProperties( configurationValues );
138140

139141
final boolean autoCommit = getBoolean( AvailableSettings.AUTOCOMMIT, configurationValues );
140-
final Integer isolation = ConnectionProviderInitiator.extractIsolation( configurationValues );
142+
final Integer isolation = extractIsolation( configurationValues );
141143
final String initSql = (String) configurationValues.get( INIT_SQL );
142144

143145
final ConnectionCreatorFactory factory = getConnectionCreatorFactory( configurationValues, serviceRegistry );

hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.zaxxer.hikari.HikariConfig;
2525
import com.zaxxer.hikari.HikariDataSource;
2626

27+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
2728
import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.allowJdbcMetadataAccess;
2829
import static org.hibernate.hikaricp.internal.HikariConfigurationUtil.loadConfiguration;
2930
import static org.hibernate.internal.util.StringHelper.isBlank;
@@ -105,7 +106,9 @@ public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
105106
: hikariConfig.getDriverClassName(),
106107
dialect.getVersion(),
107108
Boolean.toString( hikariConfig.isAutoCommit() ),
108-
hikariConfig.getTransactionIsolation(),
109+
hikariConfig.getTransactionIsolation() != null
110+
? hikariConfig.getTransactionIsolation()
111+
: toIsolationNiceName( getIsolation( hikariDataSource ) ),
109112
hikariConfig.getMinimumIdle(),
110113
hikariConfig.getMaximumPoolSize(),
111114
getFetchSize( hikariDataSource )
@@ -123,6 +126,15 @@ private static Integer getFetchSize(DataSource dataSource) {
123126
}
124127
}
125128

129+
private static Integer getIsolation(DataSource dataSource) {
130+
try ( var conn = dataSource.getConnection() ) {
131+
return conn.getTransactionIsolation();
132+
}
133+
catch ( SQLException ignored ) {
134+
return null;
135+
}
136+
}
137+
126138
private String extractDriverNameFromMetadata() {
127139
if ( isMetadataAccessAllowed ) {
128140
try ( Connection conn = getConnection() ) {

0 commit comments

Comments
 (0)