From a23796c92dcef22bf9cc132eaf32fab173fc9976 Mon Sep 17 00:00:00 2001 From: Gail Badner Date: Tue, 12 Oct 2010 15:20:46 -0700 Subject: [PATCH] HHH-5618 : Support legacy connection providers --- .../internal}/C3P0ConnectionProvider.java | 5 +- .../internal/ConnectionProviderInitiator.java | 55 ++++++++++++++++++- .../internal}/ProxoolConnectionProvider.java | 3 +- 3 files changed, 57 insertions(+), 6 deletions(-) rename hibernate-c3p0/src/main/java/org/hibernate/{connection => service/jdbc/connections/internal}/C3P0ConnectionProvider.java (97%) rename hibernate-proxool/src/main/java/org/hibernate/{connection => service/jdbc/connections/internal}/ProxoolConnectionProvider.java (98%) diff --git a/hibernate-c3p0/src/main/java/org/hibernate/connection/C3P0ConnectionProvider.java b/hibernate-c3p0/src/main/java/org/hibernate/service/jdbc/connections/internal/C3P0ConnectionProvider.java similarity index 97% rename from hibernate-c3p0/src/main/java/org/hibernate/connection/C3P0ConnectionProvider.java rename to hibernate-c3p0/src/main/java/org/hibernate/service/jdbc/connections/internal/C3P0ConnectionProvider.java index 2cf67fc644..ba4f48ca52 100644 --- a/hibernate-c3p0/src/main/java/org/hibernate/connection/C3P0ConnectionProvider.java +++ b/hibernate-c3p0/src/main/java/org/hibernate/service/jdbc/connections/internal/C3P0ConnectionProvider.java @@ -21,7 +21,7 @@ * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ -package org.hibernate.connection; +package org.hibernate.service.jdbc.connections.internal; import java.sql.Connection; import java.sql.SQLException; @@ -38,6 +38,7 @@ import org.hibernate.HibernateException; import org.hibernate.cfg.Environment; import org.hibernate.internal.util.config.ConfigurationHelper; +import org.hibernate.service.jdbc.connections.spi.ConnectionProvider; import org.hibernate.util.ReflectHelper; /** @@ -98,7 +99,7 @@ public void closeConnection(Connection conn) throws SQLException { public void configure(Properties props) throws HibernateException { String jdbcDriverClass = props.getProperty( Environment.DRIVER ); String jdbcUrl = props.getProperty( Environment.URL ); - Properties connectionProps = ConnectionProviderFactory.getConnectionProperties( props ); + Properties connectionProps = ConnectionProviderInitiator.getConnectionProperties( props ); log.info( "C3P0 using driver: " + jdbcDriverClass + " at URL: " + jdbcUrl ); log.info( "Connection properties: " + ConfigurationHelper.maskOut( connectionProps, "password" ) ); diff --git a/hibernate-core/src/main/java/org/hibernate/service/jdbc/connections/internal/ConnectionProviderInitiator.java b/hibernate-core/src/main/java/org/hibernate/service/jdbc/connections/internal/ConnectionProviderInitiator.java index f59ab129c8..38317d408a 100644 --- a/hibernate-core/src/main/java/org/hibernate/service/jdbc/connections/internal/ConnectionProviderInitiator.java +++ b/hibernate-core/src/main/java/org/hibernate/service/jdbc/connections/internal/ConnectionProviderInitiator.java @@ -26,6 +26,7 @@ import java.beans.BeanInfo; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; +import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; @@ -54,12 +55,43 @@ public class ConnectionProviderInitiator implements ServiceInitiator LEGACY_CONNECTION_PROVIDER_MAPPING; + + static { + LEGACY_CONNECTION_PROVIDER_MAPPING = new HashMap( 5 ); + + LEGACY_CONNECTION_PROVIDER_MAPPING.put( + "org.hibernate.connection.DatasourceConnectionProvider", + DatasourceConnectionProviderImpl.class.getName() + ); + LEGACY_CONNECTION_PROVIDER_MAPPING.put( + "org.hibernate.connection.DriverManagerConnectionProvider", + DriverManagerConnectionProviderImpl.class.getName() + ); + LEGACY_CONNECTION_PROVIDER_MAPPING.put( + "org.hibernate.connection.UserSuppliedConnectionProvider", + UserSuppliedConnectionProviderImpl.class.getName() + ); + LEGACY_CONNECTION_PROVIDER_MAPPING.put( + "org.hibernate.connection.C3P0ConnectionProvider", + C3P0_PROVIDER_CLASS_NAME + ); + LEGACY_CONNECTION_PROVIDER_MAPPING.put( + "org.hibernate.connection.ProxoolConnectionProvider", + PROXOOL_PROVIDER_CLASS_NAME + ); + } /** * {@inheritDoc} @@ -75,7 +107,7 @@ public ConnectionProvider initiateService(Map configurationValues, ServicesRegis final ClassLoaderService classLoaderService = registry.getService( ClassLoaderService.class ); ConnectionProvider connectionProvider = null; - String providerClassName = (String) configurationValues.get( Environment.CONNECTION_PROVIDER ); + String providerClassName = (String) getConfiguredConnectionProviderName( configurationValues ); if ( providerClassName != null ) { connectionProvider = instantiateExplicitConnectionProvider( providerClassName, classLoaderService ); } @@ -137,6 +169,23 @@ public void processBeanInfo(BeanInfo beanInfo) throws Exception { return connectionProvider; } + private String getConfiguredConnectionProviderName( Map configurationValues ) { + String providerClassName = ( String ) configurationValues.get( Environment.CONNECTION_PROVIDER ); + if ( LEGACY_CONNECTION_PROVIDER_MAPPING.containsKey( providerClassName ) ) { + String actualProviderClassName = LEGACY_CONNECTION_PROVIDER_MAPPING.get( providerClassName ); + if ( log.isWarnEnabled() ) { + StringBuffer buf = new StringBuffer() + .append( providerClassName ) + .append( " has been deprecated in favor of ") + .append( actualProviderClassName ) + .append( "; that provider will be used instead." ); + log.warn( buf.toString() ); + } + providerClassName = actualProviderClassName; + } + return providerClassName; + } + private ConnectionProvider instantiateExplicitConnectionProvider( String providerClassName, ClassLoaderService classLoaderService) { diff --git a/hibernate-proxool/src/main/java/org/hibernate/connection/ProxoolConnectionProvider.java b/hibernate-proxool/src/main/java/org/hibernate/service/jdbc/connections/internal/ProxoolConnectionProvider.java similarity index 98% rename from hibernate-proxool/src/main/java/org/hibernate/connection/ProxoolConnectionProvider.java rename to hibernate-proxool/src/main/java/org/hibernate/service/jdbc/connections/internal/ProxoolConnectionProvider.java index 991af97687..bad85f36d2 100644 --- a/hibernate-proxool/src/main/java/org/hibernate/connection/ProxoolConnectionProvider.java +++ b/hibernate-proxool/src/main/java/org/hibernate/service/jdbc/connections/internal/ProxoolConnectionProvider.java @@ -21,7 +21,7 @@ * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ -package org.hibernate.connection; +package org.hibernate.service.jdbc.connections.internal; import java.sql.Connection; import java.sql.DriverManager; @@ -31,6 +31,7 @@ import org.hibernate.HibernateException; import org.hibernate.cfg.Environment; import org.hibernate.internal.util.config.ConfigurationHelper; +import org.hibernate.service.jdbc.connections.spi.ConnectionProvider; import org.hibernate.util.StringHelper; import org.hibernate.util.ConfigHelper;