Skip to content

Commit 59fcb37

Browse files
committed
determine and log missing info for DriverManagerConnectionProvider
1 parent 1e73378 commit 59fcb37

File tree

2 files changed

+49
-22
lines changed

2 files changed

+49
-22
lines changed

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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,26 @@ public static Integer getIsolation(DataSource dataSource) {
103103
}
104104
}
105105

106+
static Integer getFetchSize(ConnectionCreator creator) {
107+
try ( var conn = creator.createConnection() ) {
108+
try ( var statement = conn.createStatement() ) {
109+
return statement.getFetchSize();
110+
}
111+
}
112+
catch ( SQLException ignored ) {
113+
return null;
114+
}
115+
}
116+
117+
static Integer getIsolation(ConnectionCreator creator) {
118+
try ( var conn = creator.createConnection() ) {
119+
return conn.getTransactionIsolation();
120+
}
121+
catch ( SQLException ignored ) {
122+
return null;
123+
}
124+
}
125+
106126
@Override
107127
public String getJdbcUrl() {
108128
return jdbcUrl;

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

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import java.sql.Driver;
99
import java.sql.DriverManager;
1010
import java.sql.SQLException;
11-
import java.util.Enumeration;
1211
import java.util.Map;
1312
import java.util.Properties;
1413
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -40,6 +39,8 @@
4039
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.extractIsolation;
4140
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.getConnectionProperties;
4241
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
42+
import static org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl.getFetchSize;
43+
import static org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl.getIsolation;
4344
import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean;
4445
import static org.hibernate.internal.util.config.ConfigurationHelper.getInt;
4546
import static org.hibernate.internal.util.config.ConfigurationHelper.getLong;
@@ -142,43 +143,49 @@ private static ConnectionCreator buildCreator(
142143
final Integer isolation = extractIsolation( configurationValues );
143144
final String initSql = (String) configurationValues.get( INIT_SQL );
144145

145-
final ConnectionCreatorFactory factory = getConnectionCreatorFactory( configurationValues, serviceRegistry );
146+
final var connectionCreator =
147+
getConnectionCreatorFactory( configurationValues, serviceRegistry )
148+
.create(
149+
driver,
150+
serviceRegistry,
151+
url,
152+
connectionProps,
153+
autoCommit,
154+
isolation,
155+
initSql,
156+
configurationValues
157+
);
158+
159+
;
146160

147161
dbInfo = new DatabaseConnectionInfoImpl(
148162
DriverManagerConnectionProviderImpl.class,
149163
url,
150164
driverList,
151165
SimpleDatabaseVersion.ZERO_VERSION,
152166
Boolean.toString( autoCommit ),
153-
isolation != null ? toIsolationNiceName( isolation ) : null,
167+
isolation != null
168+
? toIsolationNiceName( isolation )
169+
: toIsolationNiceName( getIsolation( connectionCreator ) ),
154170
getInt( MIN_SIZE, configurationValues, 1 ),
155171
getInt( AvailableSettings.POOL_SIZE, configurationValues, 20 ),
156-
null
172+
getFetchSize( connectionCreator )
157173
);
158174

159-
return factory.create(
160-
driver,
161-
serviceRegistry,
162-
url,
163-
connectionProps,
164-
autoCommit,
165-
isolation,
166-
initSql,
167-
configurationValues
168-
);
175+
return connectionCreator;
169176
}
170177

171178
private static String driverList() {
172179
//we're hoping that the driver is already loaded
173180
ConnectionInfoLogger.INSTANCE.jdbcDriverNotSpecified();
174-
final StringBuilder list = new StringBuilder();
175-
final Enumeration<Driver> drivers = DriverManager.getDrivers();
176-
while ( drivers.hasMoreElements() ) {
177-
if ( !list.isEmpty() ) {
178-
list.append(", ");
179-
}
180-
list.append( drivers.nextElement().getClass().getName() );
181-
}
181+
final var list = new StringBuilder();
182+
DriverManager.drivers()
183+
.forEach( driver -> {
184+
if ( !list.isEmpty() ) {
185+
list.append( ", " );
186+
}
187+
list.append( driver.getClass().getName() );
188+
} );
182189
return list.toString();
183190
}
184191

0 commit comments

Comments
 (0)