Skip to content

Commit 8190a1a

Browse files
committed
HHH-18454 - Skip connection provider retrieval and DB info logging when booting offline
1 parent dc8a56b commit 8190a1a

File tree

17 files changed

+397
-222
lines changed

17 files changed

+397
-222
lines changed

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

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,17 @@
77

88
package org.hibernate.agroal.internal;
99

10-
import io.agroal.api.AgroalDataSource;
11-
import io.agroal.api.configuration.AgroalConnectionFactoryConfiguration;
12-
import io.agroal.api.configuration.AgroalConnectionPoolConfiguration;
13-
import io.agroal.api.configuration.supplier.AgroalConnectionFactoryConfigurationSupplier;
14-
import io.agroal.api.configuration.supplier.AgroalPropertiesReader;
15-
import io.agroal.api.security.NamePrincipal;
16-
import io.agroal.api.security.SimplePassword;
10+
import java.sql.Connection;
11+
import java.sql.SQLException;
12+
import java.util.Map;
13+
import java.util.function.Consumer;
14+
import java.util.function.Function;
15+
import javax.sql.DataSource;
16+
1717
import org.hibernate.HibernateException;
1818
import org.hibernate.cfg.AgroalSettings;
1919
import org.hibernate.cfg.AvailableSettings;
20+
import org.hibernate.dialect.Dialect;
2021
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
2122
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
2223
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
@@ -26,12 +27,13 @@
2627
import org.hibernate.service.spi.Configurable;
2728
import org.hibernate.service.spi.Stoppable;
2829

29-
import javax.sql.DataSource;
30-
import java.sql.Connection;
31-
import java.sql.SQLException;
32-
import java.util.Map;
33-
import java.util.function.Consumer;
34-
import java.util.function.Function;
30+
import io.agroal.api.AgroalDataSource;
31+
import io.agroal.api.configuration.AgroalConnectionFactoryConfiguration;
32+
import io.agroal.api.configuration.AgroalConnectionPoolConfiguration;
33+
import io.agroal.api.configuration.supplier.AgroalConnectionFactoryConfigurationSupplier;
34+
import io.agroal.api.configuration.supplier.AgroalPropertiesReader;
35+
import io.agroal.api.security.NamePrincipal;
36+
import io.agroal.api.security.SimplePassword;
3537

3638
import static org.hibernate.cfg.AgroalSettings.AGROAL_CONFIG_PREFIX;
3739

@@ -62,7 +64,6 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
6264
public static final String CONFIG_PREFIX = AGROAL_CONFIG_PREFIX + ".";
6365
private static final long serialVersionUID = 1L;
6466
private AgroalDataSource agroalDataSource = null;
65-
private DatabaseConnectionInfo dbInfo;
6667

6768
// --- Configurable
6869

@@ -106,18 +107,6 @@ public void configure(Map<String, Object> props) throws HibernateException {
106107
} ) );
107108

108109
agroalDataSource = AgroalDataSource.from( agroalProperties );
109-
110-
// For logging purposes
111-
AgroalConnectionPoolConfiguration acpc = agroalDataSource.getConfiguration().connectionPoolConfiguration();
112-
AgroalConnectionFactoryConfiguration acfc = acpc.connectionFactoryConfiguration();
113-
dbInfo = new DatabaseConnectionInfoImpl()
114-
.setDBUrl( acfc.jdbcUrl() )
115-
.setDBDriverName( acfc.connectionProviderClass().toString() )
116-
.setDBAutoCommitMode( Boolean.toString(acfc.autoCommit()) )
117-
.setDBIsolationLevel( acfc.jdbcTransactionIsolation() != null ?
118-
ConnectionProviderInitiator.toIsolationNiceName( acfc.jdbcTransactionIsolation().level() ) : null )
119-
.setDBMinPoolSize( String.valueOf(acpc.minSize()) )
120-
.setDBMaxPoolSize( String.valueOf(acpc.maxSize()) );
121110
}
122111
catch ( Exception e ) {
123112
ConnectionInfoLogger.INSTANCE.unableToInstantiateConnectionPool( e );
@@ -146,8 +135,21 @@ public boolean supportsAggressiveRelease() {
146135
}
147136

148137
@Override
149-
public DatabaseConnectionInfo getDatabaseConnectionInfo() {
150-
return dbInfo;
138+
public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
139+
final AgroalConnectionPoolConfiguration acpc = agroalDataSource.getConfiguration().connectionPoolConfiguration();
140+
final AgroalConnectionFactoryConfiguration acfc = acpc.connectionFactoryConfiguration();
141+
142+
return new DatabaseConnectionInfoImpl(
143+
acfc.jdbcUrl(),
144+
acfc.connectionProviderClass().toString(),
145+
dialect.getVersion(),
146+
Boolean.toString( acfc.autoCommit() ),
147+
acfc.jdbcTransactionIsolation() != null
148+
? ConnectionProviderInitiator.toIsolationNiceName( acfc.jdbcTransactionIsolation().level() )
149+
: null,
150+
acpc.minSize(),
151+
acpc.minSize()
152+
);
151153
}
152154

153155
@Override

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

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.HashMap;
1212
import java.util.Map;
1313
import java.util.Properties;
14+
import java.util.function.Function;
1415
import javax.sql.DataSource;
1516

1617
import com.mchange.v2.c3p0.DataSources;
@@ -20,6 +21,7 @@
2021
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
2122
import org.hibernate.cfg.C3p0Settings;
2223
import org.hibernate.cfg.JdbcSettings;
24+
import org.hibernate.dialect.Dialect;
2325
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
2426
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
2527
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
@@ -62,11 +64,11 @@ public class C3P0ConnectionProvider
6264
// hibernate sensibly lets default to minPoolSize, but we'll let users
6365
// override it with the c3p0-style property if they want.
6466
private static final String C3P0_STYLE_INITIAL_POOL_SIZE = "c3p0.initialPoolSize";
65-
private DatabaseConnectionInfo dbInfo;
6667
private DataSource ds;
6768
private Integer isolation;
6869
private boolean autocommit;
6970

71+
private Function<Dialect,DatabaseConnectionInfo> dbInfoProducer;
7072
private ServiceRegistryImplementor serviceRegistry;
7173

7274
@Override
@@ -202,13 +204,17 @@ public void configure(Map<String, Object> props) {
202204

203205
isolation = ConnectionProviderInitiator.extractIsolation( props );
204206

205-
dbInfo = new DatabaseConnectionInfoImpl()
206-
.setDBUrl( jdbcUrl )
207-
.setDBDriverName( jdbcDriverClass )
208-
.setDBAutoCommitMode( Boolean.toString( autocommit ) )
209-
.setDBIsolationLevel( isolation != null ? ConnectionProviderInitiator.toIsolationNiceName( isolation ) : null )
210-
.setDBMinPoolSize( String.valueOf(minPoolSize) )
211-
.setDBMaxPoolSize( String.valueOf(maxPoolSize) );
207+
final Integer poolMinSize = minPoolSize;
208+
final Integer poolMaxSize = maxPoolSize;
209+
dbInfoProducer = (dialect) -> new DatabaseConnectionInfoImpl(
210+
jdbcUrl,
211+
jdbcDriverClass,
212+
dialect.getVersion(),
213+
Boolean.toString( autocommit ),
214+
isolation != null ? ConnectionProviderInitiator.toIsolationNiceName( isolation ) : null,
215+
poolMinSize,
216+
poolMaxSize
217+
);
212218
}
213219

214220
@Override
@@ -217,8 +223,8 @@ public boolean supportsAggressiveRelease() {
217223
}
218224

219225
@Override
220-
public DatabaseConnectionInfo getDatabaseConnectionInfo() {
221-
return dbInfo;
226+
public DatabaseConnectionInfo getDatabaseConnectionInfo(Dialect dialect) {
227+
return dbInfoProducer.apply( dialect );
222228
}
223229

224230
private void setOverwriteProperty(

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

Lines changed: 107 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,117 +6,156 @@
66
*/
77
package org.hibernate.engine.jdbc.connections.internal;
88

9+
import java.util.Map;
10+
11+
import org.hibernate.cfg.JdbcSettings;
912
import org.hibernate.dialect.DatabaseVersion;
13+
import org.hibernate.dialect.Dialect;
1014
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
15+
import org.hibernate.internal.util.NullnessHelper;
1116
import org.hibernate.internal.util.StringHelper;
17+
import org.hibernate.internal.util.config.ConfigurationHelper;
1218

1319
import static org.hibernate.dialect.SimpleDatabaseVersion.ZERO_VERSION;
14-
import static org.hibernate.dialect.SimpleDatabaseVersion.NO_VERSION;
20+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.interpretIsolation;
21+
import static org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator.toIsolationNiceName;
1522

1623
/**
24+
* Standard implementation of DatabaseConnectionInfo
25+
*
1726
* @author Jan Schatteman
1827
*/
1928
public class DatabaseConnectionInfoImpl implements DatabaseConnectionInfo {
20-
21-
// Means either the value was not explicitly set, or simply not offered by the connection provider
2229
public static final String DEFAULT = "undefined/unknown";
2330

24-
protected String dbUrl = DEFAULT;
25-
protected String dbDriverName = DEFAULT;
26-
protected DatabaseVersion dbVersion = ZERO_VERSION;
27-
protected String dbAutoCommitMode = DEFAULT;
28-
protected String dbIsolationLevel = DEFAULT;
29-
protected String dbMinPoolSize = DEFAULT;
30-
protected String dbMaxPoolSize = DEFAULT;
31+
protected final String jdbcUrl;
32+
protected final String jdbcDriver;
33+
protected final DatabaseVersion dialectVersion;
34+
protected final String autoCommitMode;
35+
protected final String isolationLevel;
36+
protected final Integer poolMinSize;
37+
protected final Integer poolMaxSize;
38+
39+
public DatabaseConnectionInfoImpl(
40+
String jdbcUrl,
41+
String jdbcDriver,
42+
DatabaseVersion dialectVersion,
43+
String autoCommitMode,
44+
String isolationLevel,
45+
Integer poolMinSize,
46+
Integer poolMaxSize) {
47+
this.jdbcUrl = jdbcUrl;
48+
this.jdbcDriver = jdbcDriver;
49+
this.dialectVersion = dialectVersion;
50+
this.autoCommitMode = autoCommitMode;
51+
this.isolationLevel = isolationLevel;
52+
this.poolMinSize = poolMinSize;
53+
this.poolMaxSize = poolMaxSize;
54+
}
3155

32-
public DatabaseConnectionInfoImpl() {
56+
public DatabaseConnectionInfoImpl(Map<String, Object> settings, Dialect dialect) {
57+
this(
58+
determineUrl( settings ),
59+
determineDriver( settings ),
60+
dialect.getVersion(),
61+
determineAutoCommitMode( settings ),
62+
determineIsolationLevel( settings ),
63+
// No setting for min. pool size
64+
null,
65+
determinePoolMaxSize( settings )
66+
);
67+
}
68+
69+
public DatabaseConnectionInfoImpl(Dialect dialect) {
70+
this( null, null, dialect.getVersion(), null, null, null, null );
3371
}
3472

3573
@Override
36-
public DatabaseConnectionInfo setDBUrl(String dbUrl) {
37-
this.dbUrl = dbUrl;
38-
return this;
74+
public String getJdbcUrl() {
75+
return jdbcUrl;
3976
}
4077

4178
@Override
42-
public DatabaseConnectionInfo setDBDriverName(String dbDriverName) {
43-
if ( checkValidString(dbDriverName) && isDefaultStringValue(this.dbDriverName) ) {
44-
this.dbDriverName = dbDriverName;
45-
}
46-
return this;
79+
public String getJdbcDriver() {
80+
return jdbcDriver;
4781
}
4882

4983
@Override
50-
public DatabaseConnectionInfo setDBVersion(DatabaseVersion dbVersion) {
51-
if ( checkValidVersion(dbVersion) && ZERO_VERSION.equals(this.dbVersion) ) {
52-
this.dbVersion = dbVersion;
53-
}
54-
return this;
84+
public DatabaseVersion getDialectVersion() {
85+
return dialectVersion;
5586
}
5687

5788
@Override
58-
public DatabaseConnectionInfo setDBAutoCommitMode(String dbAutoCommitMode) {
59-
if ( checkValidString(dbAutoCommitMode) && isDefaultStringValue(this.dbAutoCommitMode) ) {
60-
this.dbAutoCommitMode = dbAutoCommitMode;
61-
}
62-
return this;
89+
public String getAutoCommitMode() {
90+
return autoCommitMode;
6391
}
6492

6593
@Override
66-
public DatabaseConnectionInfo setDBIsolationLevel(String dbIsolationLevel) {
67-
if ( checkValidString(dbIsolationLevel) && isDefaultStringValue(this.dbIsolationLevel) ) {
68-
this.dbIsolationLevel = dbIsolationLevel;
69-
}
70-
return this;
94+
public String getIsolationLevel() {
95+
return isolationLevel;
7196
}
7297

7398
@Override
74-
public DatabaseConnectionInfo setDBMinPoolSize(String minPoolSize) {
75-
if ( checkValidInteger(minPoolSize) ) {
76-
this.dbMinPoolSize = minPoolSize;
77-
}
78-
return this;
99+
public Integer getPoolMinSize() {
100+
return poolMinSize;
79101
}
80102

81103
@Override
82-
public DatabaseConnectionInfo setDBMaxPoolSize(String maxPoolSize) {
83-
if ( checkValidInteger(maxPoolSize) ) {
84-
this.dbMaxPoolSize = maxPoolSize;
85-
}
86-
return this;
104+
public Integer getPoolMaxSize() {
105+
return poolMaxSize;
87106
}
88107

89-
private boolean checkValidInteger(String integerString) {
90-
try {
91-
return checkValidString( integerString ) && Integer.parseInt( integerString, 10 ) >= 0;
92-
}
93-
catch (NumberFormatException e) {
94-
return false;
95-
}
108+
@Override
109+
public String toInfoString() {
110+
return "\tDatabase JDBC URL [" + handleEmpty( jdbcUrl ) + ']' +
111+
"\n\tDatabase driver: " + handleEmpty( jdbcDriver ) +
112+
"\n\tDatabase version: " + handleEmpty( dialectVersion ) +
113+
"\n\tAutocommit mode: " + handleEmpty( autoCommitMode ) +
114+
"\n\tIsolation level: " + handleEmpty( isolationLevel ) +
115+
"\n\tMinimum pool size: " + handleEmpty( poolMinSize ) +
116+
"\n\tMaximum pool size: " + handleEmpty( poolMaxSize );
96117
}
97118

98-
private boolean checkValidString(String value) {
99-
return !( StringHelper.isBlank( value ) || "null".equalsIgnoreCase( value ) );
119+
private static String handleEmpty(String value) {
120+
return StringHelper.isNotEmpty( value ) ? value : DEFAULT;
100121
}
101122

102-
private boolean checkValidVersion(DatabaseVersion version) {
103-
return version != null && !( version.isSame(ZERO_VERSION) || version.isSame(NO_VERSION) );
123+
private static String handleEmpty(DatabaseVersion dialectVersion) {
124+
return dialectVersion != null ? dialectVersion.toString() : ZERO_VERSION.toString();
104125
}
105126

106-
private boolean isDefaultStringValue(String value) {
107-
return DEFAULT.equalsIgnoreCase( value );
127+
private static String handleEmpty(Integer value) {
128+
return value != null ? value.toString() : DEFAULT;
108129
}
109130

110-
@Override
111-
public String getDBInfoAsString() {
112-
StringBuilder sb = new StringBuilder();
113-
sb.append( "\tDatabase JDBC URL [" ).append( dbUrl ).append(']');
114-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Database driver: " ).append( dbDriverName );
115-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Database version: " ).append( dbVersion );
116-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Autocommit mode: " ).append( dbAutoCommitMode );
117-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Isolation level: " ).append( dbIsolationLevel );
118-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Minimum pool size: " ).append( dbMinPoolSize );
119-
sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Maximum pool size: " ).append( dbMaxPoolSize );
120-
return sb.toString();
131+
132+
@SuppressWarnings("deprecation")
133+
private static String determineUrl(Map<String, Object> settings) {
134+
return NullnessHelper.coalesceSuppliedValues(
135+
() -> ConfigurationHelper.getString( JdbcSettings.JAKARTA_JDBC_URL, settings ),
136+
() -> ConfigurationHelper.getString( JdbcSettings.URL, settings ),
137+
() -> ConfigurationHelper.getString( JdbcSettings.JPA_JDBC_URL, settings )
138+
);
139+
}
140+
141+
@SuppressWarnings("deprecation")
142+
private static String determineDriver(Map<String, Object> settings) {
143+
return NullnessHelper.coalesceSuppliedValues(
144+
() -> ConfigurationHelper.getString( JdbcSettings.JAKARTA_JDBC_DRIVER, settings ),
145+
() -> ConfigurationHelper.getString( JdbcSettings.DRIVER, settings ),
146+
() -> ConfigurationHelper.getString( JdbcSettings.JPA_JDBC_DRIVER, settings )
147+
);
148+
}
149+
150+
private static String determineAutoCommitMode(Map<String, Object> settings) {
151+
return ConfigurationHelper.getString( JdbcSettings.AUTOCOMMIT, settings );
152+
}
153+
154+
private static String determineIsolationLevel(Map<String, Object> settings) {
155+
return toIsolationNiceName( interpretIsolation( settings.get(JdbcSettings.ISOLATION ) ) );
156+
}
157+
158+
private static Integer determinePoolMaxSize(Map<String, Object> settings) {
159+
return ConfigurationHelper.getInteger( JdbcSettings.POOL_SIZE, settings );
121160
}
122161
}

0 commit comments

Comments
 (0)