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();
+ }
+
+}