diff --git a/pom.xml b/pom.xml index 66812daa50..071ab11dd3 100644 --- a/pom.xml +++ b/pom.xml @@ -513,7 +513,7 @@ org.hibernate hibernate-core - 4.1.4.Final + 4.1.8.Final test diff --git a/src/main/java/com/alibaba/druid/pool/WrapperAdapter.java b/src/main/java/com/alibaba/druid/pool/WrapperAdapter.java index ddcf045192..28fbda4dbd 100644 --- a/src/main/java/com/alibaba/druid/pool/WrapperAdapter.java +++ b/src/main/java/com/alibaba/druid/pool/WrapperAdapter.java @@ -24,7 +24,7 @@ public class WrapperAdapter implements Wrapper { } @Override - public boolean isWrapperFor(Class iface) throws SQLException { + public boolean isWrapperFor(Class iface) { if (iface == null) { return false; } @@ -38,7 +38,7 @@ public class WrapperAdapter implements Wrapper { @SuppressWarnings("unchecked") @Override - public T unwrap(Class iface) throws SQLException { + public T unwrap(Class iface) { if (iface == null) { return null; } diff --git a/src/main/java/com/alibaba/druid/support/hibernate/DruidConnectionProvider.java b/src/main/java/com/alibaba/druid/support/hibernate/DruidConnectionProvider.java new file mode 100644 index 0000000000..7e5983a42b --- /dev/null +++ b/src/main/java/com/alibaba/druid/support/hibernate/DruidConnectionProvider.java @@ -0,0 +1,61 @@ +package com.alibaba.druid.support.hibernate; + +import java.sql.Connection; +import java.sql.SQLException; +import java.util.Map; + +import org.hibernate.service.jdbc.connections.spi.ConnectionProvider; +import org.hibernate.service.spi.Configurable; +import org.hibernate.service.spi.Stoppable; + +import com.alibaba.druid.pool.DruidDataSource; +import com.alibaba.druid.pool.DruidDataSourceFactory; + +public class DruidConnectionProvider implements ConnectionProvider, Configurable, Stoppable { + + private static final long serialVersionUID = 1026193803901107651L; + + private DruidDataSource dataSource; + + @SuppressWarnings("rawtypes") + @Override + public boolean isUnwrappableAs(Class unwrapType) { + return dataSource.isWrapperFor(unwrapType); + } + + @Override + public T unwrap(Class unwrapType) { + return dataSource.unwrap(unwrapType); + } + + @Override + public Connection getConnection() throws SQLException { + return dataSource.getConnection(); + } + + @Override + public void closeConnection(Connection conn) throws SQLException { + conn.close(); + } + + @Override + public boolean supportsAggressiveRelease() { + return false; + } + + @SuppressWarnings("rawtypes") + @Override + public void configure(Map configurationValues) { + try { + DruidDataSourceFactory.config(dataSource, configurationValues); + } catch (SQLException e) { + throw new IllegalArgumentException("config error", e); + } + } + + @Override + public void stop() { + dataSource.close(); + } + +}