欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

让Hibernate支持DBCP数据源,hibernatedbcp,老版本的 Hiberna

来源: javaer 分享于  点击 7591 次 点评:47

让Hibernate支持DBCP数据源,hibernatedbcp,老版本的 Hiberna


老版本的 Hibernate 不支持 DBCP 连接池,不过没关系,有了这个类就可以轻松搞定。

配置:hibernate.connection.provider_classcom.dlog4j.dbaccess.DBCPConnectionProvider

/** * DataSourceConnectionProvider.java of www.dlog.cn * 作者: Winter Lau * 时间: 2008-4-20 * 项目主页: <a href="<a href="http://www.dlog4j.com/">http://www.dlog4j.com/"><a href="http://www.dlog4j.com</a">http://www.dlog4j.com</a> */package com.dlog4j.dbaccess;import java.lang.reflect.Method;import java.sql.Connection;import java.sql.SQLException;import java.util.Iterator;import java.util.Properties;import javax.sql.DataSource;import org.apache.commons.beanutils.BeanUtils;import org.hibernate.HibernateException;import org.hibernate.connection.ConnectionProvider;/** * 让Hibernate支持DBCP数据源 */public class DBCPConnectionProvider implements ConnectionProvider {    private final static String BASE_KEY = "dscp.";    protected DataSource dataSource;    /** (non-Javadoc)     * @see ConnectionProvider#configure(java.util.Properties)     */    public void configure(Properties props) throws HibernateException {        initDataSource(props);    }    /** (non-Javadoc)     * @see org.hibernate.connection.ConnectionProvider#getConnection()     */    public Connection getConnection() throws SQLException {             return dataSource.getConnection();    }    /** (non-Javadoc)     * @see ConnectionProvider#closeConnection(java.sql.Connection)     */    public void closeConnection(Connection conn) throws SQLException {        if(conn!=null && !conn.isClosed())            conn.close();    }    /** (non-Javadoc)     * @see org.hibernate.connection.ConnectionProvider#close()     */    public void close() throws HibernateException {        if(dataSource != null){            try {                Method mClose = dataSource.getClass().getMethod("close");                mClose.invoke(dataSource);            } catch (NoSuchMethodException e) {            } catch (Exception e) {                if(e.getCause()!=null)                    throw new HibernateException(e.getCause());                else                    throw new HibernateException(e);            }            dataSource = null;        }    }    /** (non-Javadoc)     * @see ConnectionProvider#supportsAggressiveRelease()     */    public boolean supportsAggressiveRelease() {        return false;    }    /**     * Initialize the datasource     * @param props     * @throws HibernateException     */    @SuppressWarnings("unchecked")    protected synchronized void initDataSource(Properties props)            throws HibernateException {        Properties new_props = new Properties();        Iterator keys = props.keySet().iterator();        while(keys.hasNext()){            String key = (String)keys.next();            if(key.startsWith(BASE_KEY)){                String value = props.getProperty(key);                                new_props.setProperty(key.substring(BASE_KEY.length()), value);            }        }        try {            dataSource = (DataSource)Class.forName("org.apache.commons.dbcp.BasicDataSource").newInstance();            BeanUtils.populate(dataSource, new_props);        } catch (Exception e) {            throw new HibernateException(e);        }    }}//该片段来自于http://byrx.net
相关栏目:

用户点评