diff --git a/hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java b/hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java
index bd3be9c9fb..8b64f3849b 100644
--- a/hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java
+++ b/hibernate-agroal/src/main/java/org/hibernate/agroal/internal/AgroalConnectionProvider.java
@@ -4,6 +4,7 @@
*/
package org.hibernate.agroal.internal;
+import java.io.Serial;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DatabaseMetaData;
@@ -19,6 +20,7 @@ import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.log.ConnectionInfoLogger;
import org.hibernate.service.UnknownUnwrapTypeException;
@@ -38,10 +40,13 @@ import static org.hibernate.cfg.AgroalSettings.AGROAL_CONFIG_PREFIX;
import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.allowJdbcMetadataAccess;
/**
- * ConnectionProvider based on Agroal connection pool
- * To use this ConnectionProvider set:
hibernate.connection.provider_class AgroalConnectionProvider
- *
- * Usual hibernate properties are supported:
+ * {@link ConnectionProvider} based on Agroal connection pool.
+ *
+ * To force the use of this {@code ConnectionProvider} set
+ * {@value org.hibernate.cfg.JdbcSettings#CONNECTION_PROVIDER}
+ * to {@code agroal}.
+ *
+ * Usual hibernate connection properties are supported:
*
* hibernate.connection.driver_class
* hibernate.connection.url
@@ -50,8 +55,8 @@ import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.al
* hibernate.connection.autocommit
* hibernate.connection.isolation
*
- *
- * Other configuration options are available, using the {@code hibernate.agroal} prefix
+ *
+ * Other configuration options are available, using the {@code hibernate.agroal} prefix.
*
* @see AgroalSettings
* @see AgroalPropertiesReader
@@ -62,6 +67,8 @@ import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.al
public class AgroalConnectionProvider implements ConnectionProvider, Configurable, Stoppable {
public static final String CONFIG_PREFIX = AGROAL_CONFIG_PREFIX + ".";
+
+ @Serial
private static final long serialVersionUID = 1L;
private AgroalDataSource agroalDataSource = null;
private boolean isMetadataAccessAllowed = true;
@@ -113,7 +120,8 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
}
catch ( Exception e ) {
ConnectionInfoLogger.INSTANCE.unableToInstantiateConnectionPool( e );
- throw new HibernateException( e );
+ throw new ConnectionProviderConfigurationException(
+ "Could not configure Agroal: " + e.getMessage(), e );
}
}
diff --git a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java
index 27408fa059..2e69d8f60a 100644
--- a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java
+++ b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0ConnectionProvider.java
@@ -14,7 +14,6 @@ import javax.sql.DataSource;
import com.mchange.v2.c3p0.DataSources;
-import org.hibernate.HibernateException;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.cfg.C3p0Settings;
@@ -23,6 +22,7 @@ import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.log.ConnectionInfoLogger;
import org.hibernate.internal.util.PropertiesHelper;
@@ -38,8 +38,13 @@ import static org.hibernate.internal.util.config.ConfigurationHelper.getBoolean;
import static org.hibernate.internal.util.config.ConfigurationHelper.getInteger;
/**
- * A connection provider that uses a C3P0 connection pool. Hibernate will use this by
- * default if the {@code hibernate.c3p0.*} properties are set.
+ * {@link ConnectionProvider} based on c3p0 connection pool.
+ *
+ * To force the use of this {@code ConnectionProvider} set
+ * {@value org.hibernate.cfg.JdbcSettings#CONNECTION_PROVIDER}
+ * to {@code c3p0}.
+ *
+ * Hibernate selects this by default if the {@code hibernate.c3p0.*} properties are set.
*
* @author various people
* @see ConnectionProvider
@@ -141,8 +146,8 @@ public class C3P0ConnectionProvider
}
}
- Integer minPoolSize = null;
- Integer maxPoolSize = null;
+ final Integer minPoolSize;
+ final Integer maxPoolSize;
try {
//swaldman 2004-02-07: modify to allow null values to signify fall through to c3p0 PoolConfig defaults
@@ -197,7 +202,8 @@ public class C3P0ConnectionProvider
}
catch (Exception e) {
ConnectionInfoLogger.INSTANCE.unableToInstantiateConnectionPool( e );
- throw new HibernateException( e );
+ throw new ConnectionProviderConfigurationException(
+ "Could not configure c3p0: " + e.getMessage(), e );
}
isolation = ConnectionProviderInitiator.extractIsolation( props );
@@ -259,17 +265,6 @@ public class C3P0ConnectionProvider
}
}
- /**
- * Close the provider.
- *
- * @deprecated Use {@link #stop} instead
- */
- @SuppressWarnings("unused")
- @Deprecated
- public void close() {
- stop();
- }
-
@Override
public void injectServices(ServiceRegistryImplementor serviceRegistry) {
this.serviceRegistry = serviceRegistry;
diff --git a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/StrategyRegistrationProviderImpl.java b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/StrategyRegistrationProviderImpl.java
index f2e9f27399..f2a83e067e 100644
--- a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/StrategyRegistrationProviderImpl.java
+++ b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/StrategyRegistrationProviderImpl.java
@@ -20,7 +20,6 @@ import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
public final class StrategyRegistrationProviderImpl implements StrategyRegistrationProvider {
@Override
- @SuppressWarnings("unchecked")
public Iterable getStrategyRegistrations() {
final SimpleStrategyRegistrationImpl c3p0 = new SimpleStrategyRegistrationImpl<>(
ConnectionProvider.class,
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatasourceConnectionProviderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatasourceConnectionProviderImpl.java
index 2ecd5e5fd4..547c80de11 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatasourceConnectionProviderImpl.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatasourceConnectionProviderImpl.java
@@ -14,6 +14,7 @@ import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.engine.jndi.spi.JndiService;
import org.hibernate.internal.log.ConnectionInfoLogger;
@@ -70,7 +71,7 @@ public class DatasourceConnectionProviderImpl implements ConnectionProvider, Con
}
@Override
- @SuppressWarnings( {"unchecked"})
+ @SuppressWarnings("unchecked")
public T unwrap(Class unwrapType) {
if ( ConnectionProvider.class.equals( unwrapType )
|| DatasourceConnectionProviderImpl.class.isAssignableFrom( unwrapType ) ) {
@@ -88,26 +89,23 @@ public class DatasourceConnectionProviderImpl implements ConnectionProvider, Con
public void configure(Map configValues) {
if ( dataSource == null ) {
final Object dataSourceSetting = configValues.get( DATASOURCE );
- if ( dataSourceSetting instanceof DataSource ds ) {
- dataSource = ds;
+ if ( dataSourceSetting instanceof DataSource instance ) {
+ dataSource = instance;
+ }
+ else if ( dataSourceSetting instanceof String jndiName ) {
+ dataSourceJndiName = jndiName;
+ if ( jndiService == null ) {
+ throw new ConnectionProviderConfigurationException( "Unable to locate JndiService to lookup Datasource" );
+ }
+ dataSource = (DataSource) jndiService.locate( jndiName );
}
else {
- final String dataSourceJndiName = (String) dataSourceSetting;
- if ( dataSourceJndiName == null ) {
- throw new HibernateException(
- "DataSource to use was not injected nor specified by [" + DATASOURCE
- + "] configuration property"
- );
- }
- this.dataSourceJndiName = dataSourceJndiName;
- if ( jndiService == null ) {
- throw new HibernateException( "Unable to locate JndiService to lookup Datasource" );
- }
- dataSource = (DataSource) jndiService.locate( dataSourceJndiName );
+ throw new ConnectionProviderConfigurationException(
+ "DataSource to use was not injected nor specified by '" + DATASOURCE + "'" );
}
}
if ( dataSource == null ) {
- throw new HibernateException( "Unable to determine appropriate DataSource to use" );
+ throw new ConnectionProviderConfigurationException( "Unable to determine appropriate DataSource to use" );
}
if ( configValues.containsKey( AvailableSettings.AUTOCOMMIT ) ) {
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java
index 90e3adb281..b640b51d10 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DriverManagerConnectionProviderImpl.java
@@ -28,6 +28,7 @@ import org.hibernate.dialect.Database;
import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.SimpleDatabaseVersion;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.service.UnknownUnwrapTypeException;
@@ -90,11 +91,8 @@ public class DriverManagerConnectionProviderImpl
final int maxSize = ConfigurationHelper.getInt( AvailableSettings.POOL_SIZE, configurationValues, 20 );
final int initialSize = ConfigurationHelper.getInt( INITIAL_SIZE, configurationValues, minSize );
- ConnectionCreator connectionCreator = buildCreator( configurationValues, serviceRegistry );
- PooledConnections.Builder pooledConnectionBuilder = new PooledConnections.Builder(
- connectionCreator,
- autoCommit
- );
+ final ConnectionCreator creator = buildCreator( configurationValues, serviceRegistry );
+ final PooledConnections.Builder pooledConnectionBuilder = new PooledConnections.Builder( creator, autoCommit );
pooledConnectionBuilder.initialSize( initialSize );
pooledConnectionBuilder.minSize( minSize );
pooledConnectionBuilder.maxSize( maxSize );
@@ -102,8 +100,9 @@ public class DriverManagerConnectionProviderImpl
return pooledConnectionBuilder.build();
}
- private static ConnectionCreator buildCreator(Map configurationValues, ServiceRegistryImplementor serviceRegistry) {
- final String url = (String) configurationValues.get( AvailableSettings.URL );
+ private static ConnectionCreator buildCreator(
+ Map configurationValues, ServiceRegistryImplementor serviceRegistry) {
+ final String url = jdbcUrl( configurationValues );
String driverClassName = (String) configurationValues.get( AvailableSettings.DRIVER );
boolean success = false;
@@ -112,14 +111,14 @@ public class DriverManagerConnectionProviderImpl
driver = loadDriverIfPossible( driverClassName, serviceRegistry );
success = true;
}
- else if ( url != null ) {
+ else {
//try to guess the driver class from the JDBC URL
for ( Database database: Database.values() ) {
if ( database.matchesUrl( url ) ) {
driverClassName = database.getDriverClassName( url );
if ( driverClassName != null ) {
try {
- loadDriverIfPossible(driverClassName, serviceRegistry);
+ loadDriverIfPossible( driverClassName, serviceRegistry );
success = true;
}
catch (Exception e) {
@@ -132,22 +131,7 @@ public class DriverManagerConnectionProviderImpl
}
}
- StringBuilder list = new StringBuilder();
- if ( !success ) {
- //we're hoping that the driver is already loaded
- ConnectionInfoLogger.INSTANCE.jdbcDriverNotSpecified();
- Enumeration drivers = DriverManager.getDrivers();
- while ( drivers.hasMoreElements() ) {
- if ( list.length() != 0) {
- list.append(", ");
- }
- list.append( drivers.nextElement().getClass().getName() );
- }
- }
-
- if ( url == null ) {
- throw new HibernateException( "No JDBC URL specified by property " + JAKARTA_JDBC_URL );
- }
+ final String driverList = success ? driverClassName : driverList();
final Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( configurationValues );
@@ -155,26 +139,16 @@ public class DriverManagerConnectionProviderImpl
final Integer isolation = ConnectionProviderInitiator.extractIsolation( configurationValues );
final String initSql = (String) configurationValues.get( INIT_SQL );
- final Object connectionCreatorFactory = configurationValues.get( CONNECTION_CREATOR_FACTORY );
- ConnectionCreatorFactory factory = null;
- if ( connectionCreatorFactory instanceof ConnectionCreatorFactory ) {
- factory = (ConnectionCreatorFactory) connectionCreatorFactory;
- }
- else if ( connectionCreatorFactory != null ) {
- factory = loadConnectionCreatorFactory( connectionCreatorFactory.toString(), serviceRegistry );
- }
- if ( factory == null ) {
- factory = ConnectionCreatorFactoryImpl.INSTANCE;
- }
+ final ConnectionCreatorFactory factory = getConnectionCreatorFactory( configurationValues, serviceRegistry );
dbInfo = new DatabaseConnectionInfoImpl(
url,
- success ? driverClassName : list.toString(),
+ driverList,
SimpleDatabaseVersion.ZERO_VERSION,
Boolean.toString( autoCommit ),
- isolation != null ? ConnectionProviderInitiator.toIsolationNiceName(isolation) : null,
- ConfigurationHelper.getInt(MIN_SIZE, configurationValues, 1),
- ConfigurationHelper.getInt(AvailableSettings.POOL_SIZE, configurationValues, 20)
+ isolation != null ? ConnectionProviderInitiator.toIsolationNiceName( isolation ) : null,
+ ConfigurationHelper.getInt( MIN_SIZE, configurationValues, 1 ),
+ ConfigurationHelper.getInt( AvailableSettings.POOL_SIZE, configurationValues, 20 )
);
return factory.create(
@@ -189,15 +163,53 @@ public class DriverManagerConnectionProviderImpl
);
}
+ private static String driverList() {
+ //we're hoping that the driver is already loaded
+ ConnectionInfoLogger.INSTANCE.jdbcDriverNotSpecified();
+ final StringBuilder list = new StringBuilder();
+ final Enumeration drivers = DriverManager.getDrivers();
+ while ( drivers.hasMoreElements() ) {
+ if ( !list.isEmpty() ) {
+ list.append(", ");
+ }
+ list.append( drivers.nextElement().getClass().getName() );
+ }
+ return list.toString();
+ }
+
+ private static String jdbcUrl(Map configurationValues) {
+ final String url = (String) configurationValues.get( AvailableSettings.URL );
+ if ( url == null ) {
+ throw new ConnectionProviderConfigurationException( "No JDBC URL specified by property '" + JAKARTA_JDBC_URL + "'" );
+ }
+ return url;
+ }
+
+ private static ConnectionCreatorFactory getConnectionCreatorFactory(
+ Map configurationValues, ServiceRegistryImplementor serviceRegistry) {
+ final Object connectionCreatorFactory = configurationValues.get( CONNECTION_CREATOR_FACTORY );
+ final ConnectionCreatorFactory factory;
+ if ( connectionCreatorFactory instanceof ConnectionCreatorFactory instance ) {
+ factory = instance;
+ }
+ else if ( connectionCreatorFactory != null ) {
+ factory = loadConnectionCreatorFactory( connectionCreatorFactory.toString(), serviceRegistry );
+ }
+ else {
+ factory = null;
+ }
+ return factory == null ? ConnectionCreatorFactoryImpl.INSTANCE : factory;
+ }
+
private static Driver loadDriverIfPossible(String driverClassName, ServiceRegistryImplementor serviceRegistry) {
if ( driverClassName == null ) {
ConnectionInfoLogger.INSTANCE.debug( "No driver class specified" );
return null;
}
-
- if ( serviceRegistry != null ) {
- final ClassLoaderService classLoaderService = serviceRegistry.requireService( ClassLoaderService.class );
- final Class driverClass = classLoaderService.classForName( driverClassName );
+ else if ( serviceRegistry != null ) {
+ final Class driverClass =
+ serviceRegistry.requireService( ClassLoaderService.class )
+ .classForName( driverClassName );
try {
return driverClass.newInstance();
}
@@ -205,22 +217,23 @@ public class DriverManagerConnectionProviderImpl
throw new ServiceException( "Specified JDBC Driver " + driverClassName + " could not be loaded", e );
}
}
-
- try {
- return (Driver) Class.forName( driverClassName ).newInstance();
- }
- catch ( Exception e1 ) {
- throw new ServiceException( "Specified JDBC Driver " + driverClassName + " could not be loaded", e1 );
+ else {
+ try {
+ return (Driver) Class.forName( driverClassName ).newInstance();
+ }
+ catch (Exception e1) {
+ throw new ServiceException( "Specified JDBC Driver " + driverClassName + " could not be loaded", e1 );
+ }
}
}
- private static ConnectionCreatorFactory loadConnectionCreatorFactory(String connectionCreatorFactoryClassName, ServiceRegistryImplementor serviceRegistry) {
+ private static ConnectionCreatorFactory loadConnectionCreatorFactory(
+ String connectionCreatorFactoryClassName, ServiceRegistryImplementor serviceRegistry) {
if ( connectionCreatorFactoryClassName == null ) {
ConnectionInfoLogger.INSTANCE.debug( "No connection creator factory class specified" );
return null;
}
-
- if ( serviceRegistry != null ) {
+ else if ( serviceRegistry != null ) {
final ClassLoaderService classLoaderService = serviceRegistry.requireService( ClassLoaderService.class );
final Class factoryClass =
classLoaderService.classForName( connectionCreatorFactoryClassName );
@@ -231,12 +244,15 @@ public class DriverManagerConnectionProviderImpl
throw new ServiceException( "Specified ConnectionCreatorFactory " + connectionCreatorFactoryClassName + " could not be loaded", e );
}
}
-
- try {
- return (ConnectionCreatorFactory) Class.forName( connectionCreatorFactoryClassName ).newInstance();
- }
- catch ( Exception e1 ) {
- throw new ServiceException( "Specified ConnectionCreatorFactory " + connectionCreatorFactoryClassName + " could not be loaded", e1 );
+ else {
+ try {
+ return (ConnectionCreatorFactory) Class.forName( connectionCreatorFactoryClassName ).newInstance();
+ }
+ catch (Exception e1) {
+ throw new ServiceException(
+ "Specified ConnectionCreatorFactory " + connectionCreatorFactoryClassName + " could not be loaded",
+ e1 );
+ }
}
}
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProviderConfigurationException.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProviderConfigurationException.java
new file mode 100644
index 0000000000..d17ded15aa
--- /dev/null
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProviderConfigurationException.java
@@ -0,0 +1,23 @@
+/*
+ * SPDX-License-Identifier: LGPL-2.1-or-later
+ * Copyright Red Hat Inc. and Hibernate Authors
+ */
+package org.hibernate.engine.jdbc.connections.spi;
+
+import org.hibernate.HibernateException;
+
+/**
+ * Occurs when there is a problem configuring a {@link ConnectionProvider}.
+ *
+ * @since 7.0
+ *
+ * @author Gavin King
+ */
+public class ConnectionProviderConfigurationException extends HibernateException {
+ public ConnectionProviderConfigurationException(String message) {
+ super( message );
+ }
+ public ConnectionProviderConfigurationException(String message, Throwable cause) {
+ super( message, cause );
+ }
+}
diff --git a/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionInfoLogger.java b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionInfoLogger.java
index d5ade897b2..f6c6eea9ec 100644
--- a/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionInfoLogger.java
+++ b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionInfoLogger.java
@@ -66,7 +66,7 @@ public interface ConnectionInfoLogger extends BasicLogger {
void unableToDestroyConnectionPool(@Cause Exception e);
@LogMessage(level = DEBUG)
- @Message(value = "Could not instantiate connection pool", id = 10001011)
+ @Message(value = "Could not create connection pool", id = 10001011)
void unableToInstantiateConnectionPool(@Cause Exception e);
@LogMessage(level = DEBUG)
diff --git a/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java b/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java
index a4f6b073b4..2f13fc15f6 100644
--- a/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java
+++ b/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/HikariCPConnectionProvider.java
@@ -4,6 +4,7 @@
*/
package org.hibernate.hikaricp.internal;
+import java.io.Serial;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
@@ -14,6 +15,7 @@ import org.hibernate.HibernateException;
import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.log.ConnectionInfoLogger;
import org.hibernate.internal.util.StringHelper;
@@ -27,13 +29,18 @@ import com.zaxxer.hikari.HikariDataSource;
import static org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.allowJdbcMetadataAccess;
/**
- * HikariCP Connection provider for Hibernate.
+ * {@link ConnectionProvider} based on HikariCP connection pool.
+ *
+ * To force the use of this {@code ConnectionProvider} set
+ * {@value org.hibernate.cfg.JdbcSettings#CONNECTION_PROVIDER}
+ * to {@code hikari} or {@code hikaricp}.
*
* @author Brett Wooldridge
* @author Luca Burgazzoli
*/
public class HikariCPConnectionProvider implements ConnectionProvider, Configurable, Stoppable {
+ @Serial
private static final long serialVersionUID = -9131625057941275711L;
private boolean isMetadataAccessAllowed = true;
@@ -63,7 +70,8 @@ public class HikariCPConnectionProvider implements ConnectionProvider, Configura
}
catch (Exception e) {
ConnectionInfoLogger.INSTANCE.unableToInstantiateConnectionPool( e );
- throw new HibernateException( e );
+ throw new ConnectionProviderConfigurationException(
+ "Could not configure HikariCP: " + e.getMessage(), e );
}
}
diff --git a/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/StrategyRegistrationProviderImpl.java b/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/StrategyRegistrationProviderImpl.java
index 0021d64f51..44416a7ebf 100644
--- a/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/StrategyRegistrationProviderImpl.java
+++ b/hibernate-hikaricp/src/main/java/org/hibernate/hikaricp/internal/StrategyRegistrationProviderImpl.java
@@ -20,7 +20,6 @@ import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
public final class StrategyRegistrationProviderImpl implements StrategyRegistrationProvider {
@Override
- @SuppressWarnings("unchecked")
public Iterable getStrategyRegistrations() {
final SimpleStrategyRegistrationImpl strategyRegistration = new SimpleStrategyRegistrationImpl<>(
ConnectionProvider.class,
diff --git a/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/StrategyRegistrationProviderImpl.java b/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/StrategyRegistrationProviderImpl.java
index cbac650b60..4da10b8150 100644
--- a/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/StrategyRegistrationProviderImpl.java
+++ b/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/StrategyRegistrationProviderImpl.java
@@ -19,7 +19,7 @@ import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
*/
public class StrategyRegistrationProviderImpl implements StrategyRegistrationProvider {
private static final List REGISTRATIONS = Collections.singletonList(
- (StrategyRegistration) new SimpleStrategyRegistrationImpl(
+ new SimpleStrategyRegistrationImpl<>(
ConnectionProvider.class,
UCPConnectionProvider.class,
"ucp",
@@ -30,7 +30,6 @@ public class StrategyRegistrationProviderImpl implements StrategyRegistrationPro
);
@Override
- @SuppressWarnings("unchecked")
public Iterable getStrategyRegistrations() {
return REGISTRATIONS;
}
diff --git a/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/UCPConnectionProvider.java b/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/UCPConnectionProvider.java
index def0fcecfe..871f771927 100644
--- a/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/UCPConnectionProvider.java
+++ b/hibernate-ucp/src/main/java/org/hibernate/oracleucp/internal/UCPConnectionProvider.java
@@ -4,6 +4,7 @@
*/
package org.hibernate.oracleucp.internal;
+import java.io.Serial;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
@@ -20,6 +21,7 @@ import org.hibernate.dialect.Dialect;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.log.ConnectionInfoLogger;
import org.hibernate.internal.util.config.ConfigurationHelper;
@@ -36,32 +38,32 @@ import oracle.ucp.jdbc.PoolDataSourceFactory;
public class UCPConnectionProvider implements ConnectionProvider, Configurable, Stoppable {
+ @Serial
private static final long serialVersionUID = 1L;
private PoolDataSource ucpDS = null;
- private UniversalConnectionPoolManager poolManager = null;
private static final String UCP_CONFIG_PREFIX = "hibernate.oracleucp";
private static final String CONFIG_PREFIX = UCP_CONFIG_PREFIX + ".";
private boolean autoCommit;
private Integer isolation;
- @SuppressWarnings("rawtypes")
@Override
- public void configure(Map props) throws HibernateException {
+ public void configure(Map props) throws HibernateException {
try {
ConnectionInfoLogger.INSTANCE.configureConnectionPool( "Ucp" );
isolation = ConnectionProviderInitiator.extractIsolation( props );
autoCommit = ConfigurationHelper.getBoolean( AvailableSettings.AUTOCOMMIT, props );
- UniversalConnectionPoolManager poolManager = UniversalConnectionPoolManagerImpl.
- getUniversalConnectionPoolManager();
+ UniversalConnectionPoolManager poolManager =
+ UniversalConnectionPoolManagerImpl.getUniversalConnectionPoolManager();
ucpDS = PoolDataSourceFactory.getPoolDataSource();
Properties ucpProps = getConfiguration(props);
configureDataSource(ucpDS, ucpProps);
}
catch (Exception e) {
ConnectionInfoLogger.INSTANCE.unableToInstantiateConnectionPool( e );
- throw new HibernateException( e );
+ throw new ConnectionProviderConfigurationException(
+ "Could not configure UCP: " + e.getMessage(), e );
}
}
@@ -128,13 +130,11 @@ public class UCPConnectionProvider implements ConnectionProvider, Configurable,
copyProperty( AvailableSettings.USER, props, "user", ucpProps );
copyProperty( AvailableSettings.PASS, props, "password", ucpProps );
- for ( Object keyo : props.keySet() ) {
- if ( !(keyo instanceof String) ) {
- continue;
- }
- String key = (String) keyo;
- if ( key.startsWith( CONFIG_PREFIX ) ) {
- ucpProps.setProperty( key.substring( CONFIG_PREFIX.length() ), (String) props.get( key ) );
+ for ( Object object : props.keySet() ) {
+ if ( object instanceof String key ) {
+ if ( key.startsWith( CONFIG_PREFIX ) ) {
+ ucpProps.setProperty( key.substring( CONFIG_PREFIX.length() ), (String) props.get( key ) );
+ }
}
}