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 6374f9a643..e0da779265 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
@@ -9,6 +9,7 @@ package org.hibernate.agroal.internal;
import io.agroal.api.AgroalDataSource;
import io.agroal.api.configuration.AgroalConnectionFactoryConfiguration;
+import io.agroal.api.configuration.AgroalConnectionPoolConfiguration;
import io.agroal.api.configuration.supplier.AgroalConnectionFactoryConfigurationSupplier;
import io.agroal.api.configuration.supplier.AgroalPropertiesReader;
import io.agroal.api.security.NamePrincipal;
@@ -17,11 +18,12 @@ import org.hibernate.HibernateException;
import org.hibernate.cfg.AgroalSettings;
import org.hibernate.cfg.AvailableSettings;
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.DatabaseConnectionInfo;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.Stoppable;
-import org.jboss.logging.Logger;
import javax.sql.DataSource;
import java.sql.Connection;
@@ -30,6 +32,10 @@ import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
+import org.jboss.logging.Logger;
+
+import static org.hibernate.cfg.AgroalSettings.AGROAL_CONFIG_PREFIX;
+
/**
* ConnectionProvider based on Agroal connection pool
* To use this ConnectionProvider set:
hibernate.connection.provider_class AgroalConnectionProvider
@@ -54,18 +60,26 @@ import java.util.function.Function;
*/
public class AgroalConnectionProvider implements ConnectionProvider, Configurable, Stoppable {
- public static final String CONFIG_PREFIX = AgroalSettings.AGROAL_CONFIG_PREFIX + ".";
+ public static final String CONFIG_PREFIX = AGROAL_CONFIG_PREFIX + ".";
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = Logger.getLogger( AgroalConnectionProvider.class );
private AgroalDataSource agroalDataSource = null;
+ private DatabaseConnectionInfo dbInfo;
// --- Configurable
- private static void resolveIsolationSetting(Map properties, AgroalConnectionFactoryConfigurationSupplier cf) {
+ private static String extractIsolationAsString(Map properties) {
Integer isolation = ConnectionProviderInitiator.extractIsolation( properties );
if ( isolation != null ) {
// Agroal resolves transaction isolation from the 'nice' name
- String isolationString = ConnectionProviderInitiator.toIsolationNiceName( isolation );
+ return ConnectionProviderInitiator.toIsolationNiceName( isolation );
+ }
+ return null;
+ }
+
+ private static void resolveIsolationSetting(Map properties, AgroalConnectionFactoryConfigurationSupplier cf) {
+ String isolationString = extractIsolationAsString( properties );
+ if ( isolationString != null ) {
cf.jdbcTransactionIsolation( AgroalConnectionFactoryConfiguration.TransactionIsolation.valueOf( isolationString ) );
}
}
@@ -94,6 +108,18 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
} ) );
agroalDataSource = AgroalDataSource.from( agroalProperties );
+
+ // For logging purposes
+ AgroalConnectionPoolConfiguration acpc = agroalDataSource.getConfiguration().connectionPoolConfiguration();
+ AgroalConnectionFactoryConfiguration acfc = acpc.connectionFactoryConfiguration();
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( acfc.jdbcUrl() )
+ .setDBDriverName( acfc.connectionProviderClass().toString() )
+ .setDBAutoCommitMode( Boolean.toString(acfc.autoCommit()) )
+ .setDBIsolationLevel( acfc.jdbcTransactionIsolation() != null ?
+ ConnectionProviderInitiator.toIsolationNiceName( acfc.jdbcTransactionIsolation().level() ) : null )
+ .setDBMinPoolSize( String.valueOf(acpc.minSize()) )
+ .setDBMaxPoolSize( String.valueOf(acpc.maxSize()) );
}
catch ( Exception e ) {
throw new HibernateException( e );
@@ -121,6 +147,11 @@ public class AgroalConnectionProvider implements ConnectionProvider, Configurabl
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
@Override
public boolean isUnwrappableAs(Class> unwrapType) {
return ConnectionProvider.class.equals( unwrapType )
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 49b1e41aca..093965ea4e 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
@@ -21,7 +21,9 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
import org.hibernate.cfg.C3p0Settings;
import org.hibernate.cfg.JdbcSettings;
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.DatabaseConnectionInfo;
import org.hibernate.internal.util.PropertiesHelper;
import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.service.UnknownUnwrapTypeException;
@@ -61,7 +63,7 @@ public class C3P0ConnectionProvider
// hibernate sensibly lets default to minPoolSize, but we'll let users
// override it with the c3p0-style property if they want.
private static final String C3P0_STYLE_INITIAL_POOL_SIZE = "c3p0.initialPoolSize";
-
+ private DatabaseConnectionInfo dbInfo;
private DataSource ds;
private Integer isolation;
private boolean autocommit;
@@ -121,13 +123,12 @@ public class C3P0ConnectionProvider
JdbcSettings.URL,
JdbcSettings.JPA_JDBC_URL
);
+
final Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( props );
- C3P0_MSG_LOGGER.c3p0UsingDriver( jdbcDriverClass, jdbcUrl );
C3P0_MSG_LOGGER.connectionProperties( ConfigurationHelper.maskOut( connectionProps, "password" ) );
autocommit = getBoolean( JdbcSettings.AUTOCOMMIT, props );
- C3P0_MSG_LOGGER.autoCommitMode( autocommit );
if ( jdbcDriverClass == null ) {
C3P0_MSG_LOGGER.jdbcDriverNotSpecified();
@@ -141,11 +142,13 @@ public class C3P0ConnectionProvider
}
}
+ Integer minPoolSize = null;
+ Integer maxPoolSize = null;
try {
//swaldman 2004-02-07: modify to allow null values to signify fall through to c3p0 PoolConfig defaults
- final Integer minPoolSize = getInteger( C3p0Settings.C3P0_MIN_SIZE, props );
- final Integer maxPoolSize = getInteger( C3p0Settings.C3P0_MAX_SIZE, props );
+ minPoolSize = getInteger( C3p0Settings.C3P0_MIN_SIZE, props );
+ maxPoolSize = getInteger( C3p0Settings.C3P0_MAX_SIZE, props );
final Integer maxIdleTime = getInteger( C3p0Settings.C3P0_TIMEOUT, props );
final Integer maxStatements = getInteger( C3p0Settings.C3P0_MAX_STATEMENTS, props );
final Integer acquireIncrement = getInteger( C3p0Settings.C3P0_ACQUIRE_INCREMENT, props );
@@ -187,19 +190,26 @@ public class C3P0ConnectionProvider
final DataSource unpooled = DataSources.unpooledDataSource( jdbcUrl, connectionProps );
- final Map allProps = new HashMap<>();
+ final Map allProps = new HashMap<>();
allProps.putAll( props );
allProps.putAll( PropertiesHelper.map(c3props) );
ds = DataSources.pooledDataSource( unpooled, allProps );
}
catch (Exception e) {
- C3P0_LOGGER.error( C3P0_MSG_LOGGER.unableToInstantiateC3p0ConnectionPool(), e );
+ C3P0_LOGGER.error( C3P0_MSG_LOGGER.unableToInstantiateC3p0ConnectionPool(), e );;
throw new HibernateException( C3P0_MSG_LOGGER.unableToInstantiateC3p0ConnectionPool(), e );
}
isolation = ConnectionProviderInitiator.extractIsolation( props );
- C3P0_MSG_LOGGER.jdbcIsolationLevel( ConnectionProviderInitiator.toIsolationNiceName( isolation ) );
+
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( jdbcUrl )
+ .setDBDriverName( jdbcDriverClass )
+ .setDBAutoCommitMode( Boolean.toString( autocommit ) )
+ .setDBIsolationLevel( isolation != null ? ConnectionProviderInitiator.toIsolationNiceName( isolation ) : null )
+ .setDBMinPoolSize( String.valueOf(minPoolSize) )
+ .setDBMaxPoolSize( String.valueOf(maxPoolSize) );
}
@Override
@@ -207,6 +217,11 @@ public class C3P0ConnectionProvider
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
private void setOverwriteProperty(
String hibernateStyleKey,
String c3p0StyleKey,
@@ -237,6 +252,7 @@ public class C3P0ConnectionProvider
}
catch (SQLException sqle) {
C3P0_MSG_LOGGER.unableToDestroyC3p0ConnectionPool( sqle );
+ throw new HibernateException( "Unable to destroy the connection pool", sqle );
}
}
diff --git a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0MessageLogger.java b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0MessageLogger.java
index b3c8b2e3d2..4fabc20f22 100644
--- a/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0MessageLogger.java
+++ b/hibernate-c3p0/src/main/java/org/hibernate/c3p0/internal/C3P0MessageLogger.java
@@ -50,16 +50,6 @@ public interface C3P0MessageLogger extends ConnectionPoolingLogger {
+ "properties. Hibernate-style property '%1$s' will be used and c3p0-style property '%2$s' will be ignored!", id = 10001)
void bothHibernateAndC3p0StylesSet(String hibernateStyle,String c3p0Style);
- /**
- * Log a message (INFO) about which Driver class is being used.
- *
- * @param jdbcDriverClass The JDBC Driver class
- * @param jdbcUrl The JDBC URL
- */
- @LogMessage(level = INFO)
- @Message(value = "C3P0 using driver: %s at URL: %s", id = 10002)
- void c3p0UsingDriver(String jdbcDriverClass, String jdbcUrl);
-
/**
* Build a message about not being able to find the JDBC driver class
*
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatabaseConnectionInfoImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatabaseConnectionInfoImpl.java
new file mode 100644
index 0000000000..f595320a97
--- /dev/null
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/DatabaseConnectionInfoImpl.java
@@ -0,0 +1,115 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
+ */
+package org.hibernate.engine.jdbc.connections.internal;
+
+import org.hibernate.dialect.DatabaseVersion;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
+import org.hibernate.internal.util.StringHelper;
+
+import static org.hibernate.dialect.SimpleDatabaseVersion.ZERO_VERSION;
+import static org.hibernate.dialect.SimpleDatabaseVersion.NO_VERSION;
+
+/**
+ * @author Jan Schatteman
+ */
+public class DatabaseConnectionInfoImpl implements DatabaseConnectionInfo {
+
+ public static final String DEFAULT = "undefined/unknown";
+
+ protected String dbUrl = DEFAULT;
+ protected String dbDriverName = DEFAULT;
+ protected DatabaseVersion dbVersion = ZERO_VERSION;
+ protected String dbAutoCommitMode = DEFAULT;
+ protected String dbIsolationLevel = DEFAULT;
+ protected String dbMinPoolSize = DEFAULT;
+ protected String dbMaxPoolSize = DEFAULT;
+
+ public DatabaseConnectionInfoImpl() {
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBUrl(String dbUrl) {
+ this.dbUrl = dbUrl;
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBDriverName(String dbDriverName) {
+ if ( checkValidString(dbDriverName) && isDefaultStringValue(this.dbDriverName) ) {
+ this.dbDriverName = dbDriverName;
+ }
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBVersion(DatabaseVersion dbVersion) {
+ if ( checkValidVersion(dbVersion) && ZERO_VERSION.equals(this.dbVersion) ) {
+ this.dbVersion = dbVersion;
+ }
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBAutoCommitMode(String dbAutoCommitMode) {
+ if ( checkValidString(dbAutoCommitMode) && isDefaultStringValue(this.dbAutoCommitMode) ) {
+ this.dbAutoCommitMode = dbAutoCommitMode;
+ }
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBIsolationLevel(String dbIsolationLevel) {
+ if ( checkValidString(dbIsolationLevel) && isDefaultStringValue(this.dbIsolationLevel) ) {
+ this.dbIsolationLevel = dbIsolationLevel;
+ }
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBMinPoolSize(String minPoolSize) {
+ if ( checkValidInteger(minPoolSize) ) {
+ this.dbMinPoolSize = minPoolSize;
+ }
+ return this;
+ }
+
+ @Override
+ public DatabaseConnectionInfo setDBMaxPoolSize(String maxPoolSize) {
+ if ( checkValidInteger(maxPoolSize) ) {
+ this.dbMaxPoolSize = maxPoolSize;
+ }
+ return this;
+ }
+
+ private boolean checkValidInteger(String integerString) {
+ return checkValidString( integerString ) && Integer.parseInt( integerString, 10 ) >= 0;
+ }
+
+ private boolean checkValidString(String value) {
+ return !( StringHelper.isBlank( value ) || "null".equalsIgnoreCase( value ) );
+ }
+
+ private boolean checkValidVersion(DatabaseVersion version) {
+ return version != null && !( version.isSame(ZERO_VERSION) || version.isSame(NO_VERSION) );
+ }
+
+ private boolean isDefaultStringValue(String value) {
+ return DEFAULT.equalsIgnoreCase( value );
+ }
+
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append( "\tDatabase JDBC URL [" ).append( dbUrl ).append(']');
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Database driver: " ).append( dbDriverName );
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Database version: " ).append( dbVersion );
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Autocommit mode: " ).append( dbAutoCommitMode );
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Isolation level: " ).append( dbIsolationLevel );
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Minimum pool size: " ).append( dbMinPoolSize );
+ sb.append(sb.length() > 0 ? "\n\t" : "" ).append( "Maximum pool size: " ).append( dbMaxPoolSize );
+ return sb.toString();
+ }
+}
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 9df9807409..d1ce7d9323 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 javax.sql.DataSource;
import org.hibernate.HibernateException;
import org.hibernate.cfg.Environment;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.engine.jndi.spi.JndiService;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
@@ -38,6 +39,7 @@ public class DatasourceConnectionProviderImpl implements ConnectionProvider, Con
private String pass;
private boolean useCredentials;
private JndiService jndiService;
+ private String dataSourceJndiName;
private boolean available;
@@ -92,6 +94,7 @@ public class DatasourceConnectionProviderImpl implements ConnectionProvider, Con
+ "] configuration property"
);
}
+ this.dataSourceJndiName = dataSourceJndiName;
if ( jndiService == null ) {
throw new HibernateException( "Unable to locate JndiService to lookup Datasource" );
}
@@ -131,4 +134,9 @@ public class DatasourceConnectionProviderImpl implements ConnectionProvider, Con
public boolean supportsAggressiveRelease() {
return true;
}
+
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return new DatabaseConnectionInfoImpl().setDBUrl( "Connecting through datasource" + dataSourceJndiName );
+ }
}
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 bc6e8a8683..960e77f916 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,8 +28,10 @@ import org.hibernate.HibernateException;
import org.hibernate.Internal;
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.cfg.AvailableSettings;
+import org.hibernate.cfg.JdbcSettings;
import org.hibernate.dialect.Database;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.internal.util.securitymanager.SystemSecurityManager;
import org.hibernate.service.UnknownUnwrapTypeException;
@@ -67,6 +69,8 @@ public class DriverManagerConnectionProviderImpl
private volatile PoolState state;
+ private static DatabaseConnectionInfo dbInfo;
+
// create the pool ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
private volatile ServiceRegistryImplementor serviceRegistry;
@@ -132,13 +136,10 @@ public class DriverManagerConnectionProviderImpl
}
}
- if ( success ) {
- CONNECTIONS_MESSAGE_LOGGER.loadedDriver( driverClassName );
- }
- else {
+ StringBuilder list = new StringBuilder();
+ if ( !success ) {
//we're hoping that the driver is already loaded
CONNECTIONS_MESSAGE_LOGGER.noDriver( AvailableSettings.DRIVER );
- StringBuilder list = new StringBuilder();
Enumeration drivers = DriverManager.getDrivers();
while ( drivers.hasMoreElements() ) {
if ( list.length() != 0) {
@@ -146,7 +147,6 @@ public class DriverManagerConnectionProviderImpl
}
list.append( drivers.nextElement().getClass().getName() );
}
- CONNECTIONS_MESSAGE_LOGGER.loadedDrivers( list.toString() );
}
if ( url == null ) {
@@ -155,8 +155,6 @@ public class DriverManagerConnectionProviderImpl
throw new HibernateException( msg );
}
- CONNECTIONS_MESSAGE_LOGGER.usingUrl( url );
-
final Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( configurationValues );
// if debug level is enabled, then log the password, otherwise mask it
@@ -168,13 +166,7 @@ public class DriverManagerConnectionProviderImpl
}
final boolean autoCommit = ConfigurationHelper.getBoolean( AvailableSettings.AUTOCOMMIT, configurationValues );
- CONNECTIONS_MESSAGE_LOGGER.autoCommitMode( autoCommit );
-
final Integer isolation = ConnectionProviderInitiator.extractIsolation( configurationValues );
- if ( isolation != null ) {
- CONNECTIONS_MESSAGE_LOGGER.jdbcIsolationLevel( ConnectionProviderInitiator.toIsolationNiceName( isolation ) );
- }
-
final String initSql = (String) configurationValues.get( INIT_SQL );
final Object connectionCreatorFactory = configurationValues.get( CONNECTION_CREATOR_FACTORY );
@@ -188,7 +180,17 @@ public class DriverManagerConnectionProviderImpl
if ( factory == null ) {
factory = ConnectionCreatorFactoryImpl.INSTANCE;
}
+
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( url )
+ .setDBDriverName( success ? driverClassName : list.toString() )
+ .setDBAutoCommitMode( Boolean.toString( autoCommit ) )
+ .setDBIsolationLevel( isolation != null ? ConnectionProviderInitiator.toIsolationNiceName(isolation) : null )
+ // no standard setting for minimum size?
+ .setDBMaxPoolSize( ConfigurationHelper.getString(JdbcSettings.POOL_SIZE, configurationValues) );
+
return factory.create(
+
driver,
serviceRegistry,
url,
@@ -275,6 +277,11 @@ public class DriverManagerConnectionProviderImpl
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
@Override
public boolean isUnwrappableAs(Class> unwrapType) {
return ConnectionProvider.class.equals( unwrapType ) ||
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProvider.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProvider.java
index bc566d82f8..f1ce9617d1 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProvider.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/ConnectionProvider.java
@@ -8,6 +8,7 @@ package org.hibernate.engine.jdbc.connections.spi;
import java.sql.Connection;
import java.sql.SQLException;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.service.Service;
import org.hibernate.service.spi.Wrapped;
@@ -69,4 +70,9 @@ public interface ConnectionProvider extends Service, Wrapped {
* @return {@code true} if aggressive releasing is supported; {@code false} otherwise.
*/
boolean supportsAggressiveRelease();
+
+ default DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return new DatabaseConnectionInfoImpl();
+ }
+
}
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DataSourceBasedMultiTenantConnectionProviderImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DataSourceBasedMultiTenantConnectionProviderImpl.java
index db373bbb9e..415d08e12b 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DataSourceBasedMultiTenantConnectionProviderImpl.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DataSourceBasedMultiTenantConnectionProviderImpl.java
@@ -15,6 +15,7 @@ import org.hibernate.HibernateException;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.cfg.MultiTenancySettings;
import org.hibernate.engine.config.spi.ConfigurationService;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jndi.spi.JndiService;
import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor;
@@ -47,6 +48,8 @@ public class DataSourceBasedMultiTenantConnectionProviderImpl
private T tenantIdentifierForAny;
private String baseJndiNamespace;
+ private DatabaseConnectionInfo dbInfo;
+
@Override
protected DataSource selectAnyDataSource() {
return selectDataSource( tenantIdentifierForAny );
@@ -59,6 +62,7 @@ public class DataSourceBasedMultiTenantConnectionProviderImpl
dataSource = (DataSource) jndiService.locate( baseJndiNamespace + '/' + tenantIdentifier );
dataSourceMap().put( tenantIdentifier, dataSource );
}
+ dbInfo = new DatabaseConnectionInfoImpl().setDBUrl( "Connecting through datasource" + baseJndiNamespace + '/' + tenantIdentifier );
return dataSource;
}
@@ -119,4 +123,10 @@ public class DataSourceBasedMultiTenantConnectionProviderImpl
dataSourceMap = null;
}
}
+
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
}
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DatabaseConnectionInfo.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DatabaseConnectionInfo.java
new file mode 100644
index 0000000000..5537a301b3
--- /dev/null
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/DatabaseConnectionInfo.java
@@ -0,0 +1,30 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
+ */
+package org.hibernate.engine.jdbc.connections.spi;
+
+import org.hibernate.dialect.DatabaseVersion;
+
+/**
+ * @author Jan Schatteman
+ */
+public interface DatabaseConnectionInfo {
+ DatabaseConnectionInfo setDBUrl(String dbUrl);
+
+ DatabaseConnectionInfo setDBDriverName(String dbDriverName);
+
+ DatabaseConnectionInfo setDBVersion(DatabaseVersion dbVersion);
+
+ DatabaseConnectionInfo setDBAutoCommitMode(String dbAutoCommitMode);
+
+ DatabaseConnectionInfo setDBIsolationLevel(String dbIsolationLevel);
+
+ DatabaseConnectionInfo setDBMinPoolSize(String minPoolSize);
+
+ DatabaseConnectionInfo setDBMaxPoolSize(String maxPoolSize);
+
+ String toString();
+}
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/MultiTenantConnectionProvider.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/MultiTenantConnectionProvider.java
index 3305fde364..debb3045b7 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/MultiTenantConnectionProvider.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/spi/MultiTenantConnectionProvider.java
@@ -9,6 +9,7 @@ package org.hibernate.engine.jdbc.connections.spi;
import java.sql.Connection;
import java.sql.SQLException;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.service.Service;
import org.hibernate.service.spi.Wrapped;
@@ -89,4 +90,9 @@ public interface MultiTenantConnectionProvider extends Service, Wrapped {
* @return {@code true} if aggressive releasing is supported; {@code false} otherwise.
*/
boolean supportsAggressiveRelease();
+
+ default DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return new DatabaseConnectionInfoImpl();
+ }
+
}
diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java
index 0cc9afb633..ebb1332e63 100644
--- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java
+++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/JdbcEnvironmentInitiator.java
@@ -17,9 +17,12 @@ import org.hibernate.boot.registry.StandardServiceInitiator;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.dialect.DatabaseVersion;
import org.hibernate.dialect.Dialect;
+import org.hibernate.dialect.SimpleDatabaseVersion;
import org.hibernate.engine.config.spi.ConfigurationService;
import org.hibernate.engine.jdbc.batch.spi.BatchBuilder;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.engine.jdbc.connections.spi.JdbcConnectionAccess;
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
import org.hibernate.engine.jdbc.dialect.spi.DialectFactory;
@@ -33,6 +36,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.event.internal.EmptyEventManager;
import org.hibernate.event.spi.EventManager;
import org.hibernate.internal.CoreMessageLogger;
+import org.hibernate.internal.log.ConnectionProviderLogger;
import org.hibernate.jdbc.AbstractReturningWork;
import org.hibernate.jpa.internal.MutableJpaComplianceImpl;
import org.hibernate.jpa.spi.JpaCompliance;
@@ -120,8 +124,9 @@ public class JdbcEnvironmentInitiator implements StandardServiceInitiator mcp = registry.getService( MultiTenantConnectionProvider.class );
+ databaseConnectionInfo = mcp.getDatabaseConnectionInfo();
+ }
+ // most likely, the version hasn't been set yet, at least not for the ConnectionProviders that we currently maintain
+ databaseConnectionInfo.setDBVersion( jdbcEnvironment.getDialect().getVersion() );
+
+ ConnectionProviderLogger.INSTANCE.logConnectionDetails( databaseConnectionInfo );
}
private static JdbcEnvironmentImpl getJdbcEnvironmentWithDefaults(
diff --git a/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionPoolingLogger.java b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionPoolingLogger.java
index e700e12440..d7d8b5b53a 100644
--- a/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionPoolingLogger.java
+++ b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionPoolingLogger.java
@@ -47,37 +47,17 @@ public interface ConnectionPoolingLogger extends BasicLogger {
@Message(value = "Using built-in connection pool (not intended for production use)", id = 10001002)
void usingHibernateBuiltInConnectionPool();
- @LogMessage(level = INFO)
- @Message(value = "Autocommit mode: %s", id = 10001003)
- void autoCommitMode(boolean autocommit);
-
@Message(value = "No JDBC URL specified by property %s", id = 10001004)
String jdbcUrlNotSpecified(String property);
- @LogMessage(level = INFO)
- @Message(value = "Loaded JDBC driver class: %s", id = 10001005)
- void loadedDriver(String driverClassName);
-
@LogMessage(level = INFO)
@Message(value = "No JDBC driver class specified by %s", id = 10001010)
void noDriver(String property);
- @LogMessage(level = INFO)
- @Message(value = "Loaded JDBC drivers: %s", id = 10001011)
- void loadedDrivers(String loadedDrivers);
-
- @LogMessage(level = INFO)
- @Message(value = "Connecting with JDBC URL [%s]", id = 10001012)
- void usingUrl(String url);
-
@LogMessage(level = WARN)
@Message(id = 10001006, value = "No JDBC Driver class was specified by property `jakarta.persistence.jdbc.driver`, `hibernate.driver` or `javax.persistence.jdbc.driver`")
void jdbcDriverNotSpecified();
- @LogMessage(level = INFO)
- @Message(value = "JDBC isolation level: %s", id = 10001007)
- void jdbcIsolationLevel(String isolationLevelToString);
-
@LogMessage(level = INFO)
@Message(value = "Cleaning up connection pool [%s]", id = 10001008)
void cleaningUpConnectionPool(String url);
diff --git a/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionProviderLogger.java b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionProviderLogger.java
new file mode 100644
index 0000000000..8f5c17b928
--- /dev/null
+++ b/hibernate-core/src/main/java/org/hibernate/internal/log/ConnectionProviderLogger.java
@@ -0,0 +1,44 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later.
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.internal.log;
+
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
+
+import org.jboss.logging.BasicLogger;
+import org.jboss.logging.Logger;
+import org.jboss.logging.annotations.LogMessage;
+import org.jboss.logging.annotations.Message;
+import org.jboss.logging.annotations.MessageLogger;
+import org.jboss.logging.annotations.ValidIdRange;
+
+import static org.jboss.logging.Logger.Level.INFO;
+
+@MessageLogger( projectCode = "HHH" )
+@ValidIdRange( min = 10002001, max = 10002100 )
+@SubSystemLogging(
+ name = ConnectionProviderLogger.LOGGER_NAME,
+ description = "Used to log details of database access through `ConnectionProvider`"
+)
+public interface ConnectionProviderLogger extends BasicLogger {
+ String LOGGER_NAME = SubSystemLogging.BASE + ".connections.provider";
+
+ /**
+ * Static access to the logging instance
+ */
+ ConnectionProviderLogger INSTANCE = Logger.getMessageLogger(
+ ConnectionProviderLogger.class,
+ LOGGER_NAME
+ );
+
+
+ @LogMessage(level = INFO)
+ @Message(
+ value = "Database info:\n%s",
+ id = 10002001
+ )
+ void logConnectionDetails(DatabaseConnectionInfo databaseConnectionInfo);
+}
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 6d38b26de4..3047ce1276 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
@@ -13,7 +13,9 @@ import java.util.Map;
import javax.sql.DataSource;
import org.hibernate.HibernateException;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.Stoppable;
@@ -45,6 +47,8 @@ public class HikariCPConnectionProvider implements ConnectionProvider, Configura
*/
private HikariDataSource hds = null;
+ private DatabaseConnectionInfo dbinfo;
+
// *************************************************************************
// Configurable
// *************************************************************************
@@ -57,6 +61,13 @@ public class HikariCPConnectionProvider implements ConnectionProvider, Configura
hcfg = HikariConfigurationUtil.loadConfiguration( props );
hds = new HikariDataSource( hcfg );
+ dbinfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( hcfg.getJdbcUrl() )
+ .setDBDriverName( hcfg.getDriverClassName() )
+ .setDBAutoCommitMode( Boolean.toString( hcfg.isAutoCommit() ) )
+ .setDBIsolationLevel( hcfg.getTransactionIsolation() )
+ .setDBMinPoolSize( String.valueOf(hcfg.getMinimumIdle()) )
+ .setDBMaxPoolSize( String.valueOf(hcfg.getMaximumPoolSize()) );
}
catch (Exception e) {
throw new HibernateException( e );
@@ -84,6 +95,11 @@ public class HikariCPConnectionProvider implements ConnectionProvider, Configura
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbinfo;
+ }
+
@Override
public boolean isUnwrappableAs(Class> unwrapType) {
return ConnectionProvider.class.equals( unwrapType )
diff --git a/hibernate-proxool/src/main/java/org/hibernate/proxool/internal/ProxoolConnectionProvider.java b/hibernate-proxool/src/main/java/org/hibernate/proxool/internal/ProxoolConnectionProvider.java
index 0c87ee6cac..1b96f14be5 100644
--- a/hibernate-proxool/src/main/java/org/hibernate/proxool/internal/ProxoolConnectionProvider.java
+++ b/hibernate-proxool/src/main/java/org/hibernate/proxool/internal/ProxoolConnectionProvider.java
@@ -20,13 +20,16 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
import org.hibernate.cfg.JdbcSettings;
import org.hibernate.cfg.ProxoolSettings;
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.DatabaseConnectionInfo;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor;
import org.hibernate.service.spi.Stoppable;
+import org.logicalcobwebs.proxool.ConnectionPoolDefinitionIF;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;
@@ -61,6 +64,8 @@ public class ProxoolConnectionProvider
private ClassLoaderService classLoaderService;
+ private DatabaseConnectionInfo dbInfo;
+
@Override
public Connection getConnection() throws SQLException {
// get a connection from the pool (through DriverManager, cfr. Proxool doc)
@@ -115,8 +120,9 @@ public class ProxoolConnectionProvider
final String propFile = (String) props.get( ProxoolSettings.PROXOOL_PROPERTIES );
final String externalConfig = (String) props.get( ProxoolSettings.PROXOOL_EXISTING_POOL );
+ String proxoolPoolAlias;
// Default the Proxool alias setting
- proxoolAlias = (String) props.get( ProxoolSettings.PROXOOL_POOL_ALIAS );
+ proxoolAlias = proxoolPoolAlias = (String) props.get( ProxoolSettings.PROXOOL_POOL_ALIAS );
// Configured outside of Hibernate (i.e. Servlet container, or Java Bean Container
// already has Proxool pools running, and this provider is to just borrow one of these
@@ -188,10 +194,22 @@ public class ProxoolConnectionProvider
// Remember Isolation level
isolation = ConnectionProviderInitiator.extractIsolation( props );
- PROXOOL_MESSAGE_LOGGER.jdbcIsolationLevel( ConnectionProviderInitiator.toIsolationNiceName( isolation ) );
-
autocommit = getBoolean( JdbcSettings.AUTOCOMMIT, props );
- PROXOOL_MESSAGE_LOGGER.autoCommitMode( autocommit );
+
+ try {
+ ConnectionPoolDefinitionIF cpd = ProxoolFacade.getConnectionPoolDefinition( proxoolPoolAlias );
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( cpd.getUrl() )
+ .setDBDriverName( cpd.getDriver() )
+ .setDBIsolationLevel( ConnectionProviderInitiator.toIsolationNiceName(isolation) )
+ .setDBAutoCommitMode( Boolean.toString(autocommit) )
+ .setDBMinPoolSize( String.valueOf(cpd.getMinimumConnectionCount()) )
+ .setDBMaxPoolSize( String.valueOf(cpd.getMaximumConnectionCount()) );
+ }
+ catch (ProxoolException e) {
+ PROXOOL_MESSAGE_LOGGER.warn( "Error while obtaining the database pool information", e );
+ }
+
}
private Reader getConfigStreamReader(String resource) {
@@ -240,6 +258,11 @@ public class ProxoolConnectionProvider
}
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
/**
* Release all resources held by this provider.
*
diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/jdbc/ConnectionProviderDelegate.java b/hibernate-testing/src/main/java/org/hibernate/testing/jdbc/ConnectionProviderDelegate.java
index 390a52790c..3f50a01844 100644
--- a/hibernate-testing/src/main/java/org/hibernate/testing/jdbc/ConnectionProviderDelegate.java
+++ b/hibernate-testing/src/main/java/org/hibernate/testing/jdbc/ConnectionProviderDelegate.java
@@ -14,6 +14,7 @@ import java.util.Map;
import org.hibernate.cfg.AvailableSettings;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.ServiceRegistryAwareService;
import org.hibernate.service.spi.ServiceRegistryImplementor;
@@ -103,6 +104,11 @@ public class ConnectionProviderDelegate implements
return connectionProvider.supportsAggressiveRelease();
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return connectionProvider.getDatabaseConnectionInfo();
+ }
+
@Override
public boolean isUnwrappableAs(Class> unwrapType) {
return connectionProvider.isUnwrappableAs( unwrapType );
diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/jta/JtaAwareConnectionProviderImpl.java b/hibernate-testing/src/main/java/org/hibernate/testing/jta/JtaAwareConnectionProviderImpl.java
index 6804acb93b..d500726c31 100644
--- a/hibernate-testing/src/main/java/org/hibernate/testing/jta/JtaAwareConnectionProviderImpl.java
+++ b/hibernate-testing/src/main/java/org/hibernate/testing/jta/JtaAwareConnectionProviderImpl.java
@@ -56,6 +56,7 @@ import org.hibernate.cfg.Environment;
import org.hibernate.engine.jdbc.connections.internal.ConnectionProviderInitiator;
import org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.internal.build.AllowSysOut;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.ServiceRegistryAwareService;
@@ -178,6 +179,11 @@ public class JtaAwareConnectionProviderImpl implements ConnectionProvider, Confi
return true;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return delegate.getDatabaseConnectionInfo();
+ }
+
protected Transaction findCurrentTransaction() {
try {
return TestingJtaPlatformImpl.transactionManager().getTransaction();
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 4efdccbb96..b6be90c800 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
@@ -20,7 +20,9 @@ import javax.sql.DataSource;
import org.hibernate.HibernateException;
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.DatabaseConnectionInfo;
import org.hibernate.internal.util.config.ConfigurationHelper;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
@@ -46,6 +48,8 @@ public class UCPConnectionProvider implements ConnectionProvider, Configurable,
private boolean autoCommit;
private Integer isolation;
+ private DatabaseConnectionInfo dbInfo;
+
@SuppressWarnings("rawtypes")
@Override
public void configure(Map props) throws HibernateException {
@@ -60,6 +64,14 @@ public class UCPConnectionProvider implements ConnectionProvider, Configurable,
ucpDS = PoolDataSourceFactory.getPoolDataSource();
Properties ucpProps = getConfiguration(props);
configureDataSource(ucpDS, ucpProps);
+
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( ucpDS.getURL() )
+ .setDBDriverName( ucpDS.getConnectionFactoryClassName() )
+ .setDBAutoCommitMode( Boolean.toString( autoCommit ) )
+ .setDBIsolationLevel( isolation != null ? ConnectionProviderInitiator.toIsolationConnectionConstantName( isolation ) : null )
+ .setDBMinPoolSize( String.valueOf(ucpDS.getMinPoolSize()) )
+ .setDBMaxPoolSize( String.valueOf(ucpDS.getMaxPoolSize()) );
}
catch (Exception e) {
LOGGER.debug( "oracle UCP Configuration failed" );
@@ -183,6 +195,11 @@ public class UCPConnectionProvider implements ConnectionProvider, Configurable,
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
@Override
@SuppressWarnings("rawtypes")
public boolean isUnwrappableAs(Class unwrapType) {
diff --git a/hibernate-vibur/src/main/java/org/hibernate/vibur/internal/ViburDBCPConnectionProvider.java b/hibernate-vibur/src/main/java/org/hibernate/vibur/internal/ViburDBCPConnectionProvider.java
index 19da5bca44..519b2fe2ae 100644
--- a/hibernate-vibur/src/main/java/org/hibernate/vibur/internal/ViburDBCPConnectionProvider.java
+++ b/hibernate-vibur/src/main/java/org/hibernate/vibur/internal/ViburDBCPConnectionProvider.java
@@ -7,7 +7,9 @@
package org.hibernate.vibur.internal;
+import org.hibernate.engine.jdbc.connections.internal.DatabaseConnectionInfoImpl;
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
+import org.hibernate.engine.jdbc.connections.spi.DatabaseConnectionInfo;
import org.hibernate.service.UnknownUnwrapTypeException;
import org.hibernate.service.spi.Configurable;
import org.hibernate.service.spi.Stoppable;
@@ -50,10 +52,20 @@ public class ViburDBCPConnectionProvider implements ConnectionProvider, Configur
private ViburDBCPDataSource dataSource = null;
+ private DatabaseConnectionInfo dbInfo;
+
@Override
public void configure(Map configurationValues) {
dataSource = new ViburDBCPDataSource( transform( configurationValues ) );
dataSource.start();
+
+ dbInfo = new DatabaseConnectionInfoImpl()
+ .setDBUrl( dataSource.getJdbcUrl() )
+ .setDBDriverName( dataSource.getDriverClassName() )
+ .setDBAutoCommitMode( String.valueOf(dataSource.getDefaultAutoCommit()) )
+ .setDBIsolationLevel( dataSource.getDefaultTransactionIsolation() )
+ .setDBMinPoolSize( String.valueOf(dataSource.getPoolInitialSize()) )
+ .setDBMaxPoolSize( String.valueOf(dataSource.getPoolMaxSize()) );
}
@Override
@@ -79,6 +91,11 @@ public class ViburDBCPConnectionProvider implements ConnectionProvider, Configur
return false;
}
+ @Override
+ public DatabaseConnectionInfo getDatabaseConnectionInfo() {
+ return dbInfo;
+ }
+
@Override
public boolean isUnwrappableAs(Class> unwrapType) {
return ConnectionProvider.class.equals( unwrapType )
@@ -103,6 +120,7 @@ public class ViburDBCPConnectionProvider implements ConnectionProvider, Configur
if ( driverClassName != null ) {
result.setProperty( "driverClassName", driverClassName );
}
+
String jdbcUrl = (String) configurationValues.get( URL );
if ( jdbcUrl != null ) {
result.setProperty( "jdbcUrl", jdbcUrl );
@@ -133,7 +151,6 @@ public class ViburDBCPConnectionProvider implements ConnectionProvider, Configur
result.setProperty( key, (String) entry.getValue() );
}
}
-
return result;
}