1. 程式人生 > >Hibernate中session為釋放,導致tomcat死掉

Hibernate中session為釋放,導致tomcat死掉

應用程式採用struts2 + spring2 + hibernate3架構 
連線池配置使用的是c3p0, 最大池大小為20, 很顯然是連線池耗盡導致的。 增加連線池大小隻是飲鴆止渴,總還有耗盡的時候,必須找到根本原因。


Dao類的分頁查詢方法如下:

java 程式碼

public List getTopics(int perPageStartNum, int perPageShowNum, long f_id) {  
   Vector vector = new Vector();
Session session = getSession();
try {
String sql = "select * from " + username + ".R_Dl where sbh=" + sbh + " and sjlx=" + type;
Query query = session.createSQLQuery(sql);
vector.add(query.list().size());
query.setFirstResult((pageNumber - 1) * pageSize);
query.setMaxResults(pageSize);
vector.add(query.list());
} catch (Exception e) {
e.printStackTrace();
} finally {
releaseSession(session);
}
return vector;
}  

我嘗試在獲得list之後,使用getSession().close()關閉,沒有效果。

geSession()是org.springframework.orm.hibernate3.support.HibernateDaoSupport 中的一個方法,
它可以從當前事務或者一個新的事務獲得一個hibernate session. 
通常使用releaseSession(org.hibernate.Session)方法與getSession()配合。
如果沒有繫結執行緒,releaseSession關閉由這個DAO的SessionFactory建立的Hibernate Session。