1.没有修改hibernate的默认配置文件的hibernate.cfg.xml里的预设的连接池设定。connection.pool_size默认为1,当在ServiceProxy(业务逻辑层代理)中开启一个事务后,执行原业务逻辑的方法后(Object retValue = method.invoke(target, args);),再对session进行关闭。但是如果在执行原业务逻辑的方法时出现错误,导致出现异常,session的关闭语句没有执行就直接跳转到错误页,再从错误页的连接点回首页时,如果再次去拿session开启一个事务时,会出现异常:
Caused by:org.hibernate.HibernateException: The internal connection pool has reached its maximum size and no connection is currently available!(内部连接池已达到其最大大小,并且没有连接可用)
这是因为session在上一次出错时,没有归还连接给连接池,需要等到过了超时时间自动回收,而这时connection.pool_size默认为1,所以连接池暂时没有连接可用,导致再次去开启一个事务出现这是异常。所以session.close();应该放在finally代码块中去执行。
Session session = HibernateUtil.getCurrentSession();
Transaction tx = session.beginTransaction();
method.setAccessible(true);
try {
Object retValue = method.invoke(target, args);
tx.commit();
return retValue;
}finally{
session.close();
}