我有一个使用c3p0 0.9.1.2,hibernate 3.2.1.ga和
spring 2.5.5.问题是数据库连接没有自行关闭.这是日志:
[22 mars 2012 12:29:56,091] DEBUG com.mchange.v2.resourcepool.BasicResourcePool [“http-apr-8080”-exec-4] acquire test — pool is already maxed out. [managed: 20; max: 20]
[22 mars 2012 12:29:56,091] DEBUG com.mchange.v2.resourcepool.BasicResourcePool [“http-apr-8080”-exec-4] awaitAvailable(): com.mchange.v2.c3p0.impl.NewPooledConnection@15cc604
[22 mars 2012 12:29:56,091] DEBUG com.mchange.v2.resourcepool.BasicResourcePool [“http-apr-8080”-exec-4] trace com.mchange.v2.resourcepool.BasicResourcePool@6b0524 [managed: 20, unused: 0, excluded: 0] (e.g. com.mchange.v2.c3p0.impl.NewPooledConnection@15cc604)
这是数据源配置:
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >
${hibernate.dialect}
false
${hibernate.hbm2ddl.auto}
${hibernate.connection.autocommit}
${hibernate.transaction.auto_close_session}
${hibernate.connection.release_mode}
${hibernate.bytecode.use_reflection_optimizer}
org.hibernate.cache.EhCacheProvider
true
true
net.sf.ehcache.hibernate.EhCacheRegionFactory
...
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
这是我们的通用Dao
public class GenericDAO extends HibernateDaoSupport
implements IGenericDAO {
private Class clazz;
private Logger logger = Logger.getLogger(GenericDAO.class);
private static Session session;
public GenericDAO(Class clazz) {
this.clazz = clazz;
}
public void refresh(T instanceToRefresh) throws DataAccessException {
getHibernateTemplate().refresh(instanceToRefresh);
//getCurrentSession().refresh(instanceToRefresh);
}
public void saveOrUpdate(T instanceToSaveOrUpdate)
throws DataAccessException {
//getCurrentSession().saveOrUpdate(instanceToSaveOrUpdate);
getHibernateTemplate().saveOrUpdate(instanceToSaveOrUpdate);
}
public void persist(T instanceToPersist) throws DataAccessException {
getHibernateTemplate().persist(instanceToPersist);
//getCurrentSession().persist(instanceToPersist);
}
@SuppressWarnings("unchecked")
public T merge(T instanceToMerge) throws DataAccessException {
T instanceMerged = (T) getHibernateTemplate().merge(instanceToMerge);
//T instanceMerged = (T) getCurrentSession().merge(instanceToMerge);
return instanceMerged;
}
@SuppressWarnings("unchecked")
public PK save(T newInstance) throws DataAccessException {
return (PK) getHibernateTemplate().save(newInstance);
//return (PK) getCurrentSession().save(newInstance);
}
public void delete(T persistentObject) throws DataAccessException {
getHibernateTemplate().delete(persistentObject);
//getCurrentSession().delete(persistentObject);
}
@SuppressWarnings("unchecked")
public T load(PK id) {
return (T) getHibernateTemplate().get(clazz, id);
//return (T) getCurrentSession().get(clazz, id);
}
public void update(T transientObject) throws DataAccessException {
//getCurrentSession().update(transientObject);
getHibernateTemplate().update(transientObject);
}
@SuppressWarnings("unchecked")
public List loadAll() throws DataAccessException {
//Session session = this.getCurrentSession();
//return session.createQuery("from " + clazz.getName()).list();
return getHibernateTemplate().loadAll(clazz);
}
}
提前致谢.