用Struts2+Hibernate開(kāi)發(fā)Web程序
發(fā)現(xiàn)網(wǎng)站老是一動(dòng)不動(dòng),在DAO中用 Statistics stats = HibernateUtil.getSessionFactory().getStatistics();
查看了統(tǒng)計(jì)結(jié)果,發(fā)現(xiàn)打開(kāi)50個(gè)Session只有20個(gè)關(guān)閉了.
看結(jié)構(gòu)也沒(méi)有什么問(wèn)題,我使用兩個(gè)ThreadLocal 存放Session 和Transaction,再用一個(gè)Filter去關(guān)閉,各個(gè)配置表面上也是沒(méi)有問(wèn)題,可是做測(cè)試的時(shí)候才發(fā)現(xiàn)關(guān)閉Session的Filter根本就是沒(méi)有運(yùn)行,或是有時(shí)運(yùn)行,有時(shí)不運(yùn)行,
仔細(xì)想了想,調(diào)整了一下sessionclosefilter和Struts2的filter的順序如下,終于可以關(guān)閉了
<filter>
<filter-name>HibernateSessionCloseFiler</filter-name>
<filter-class>com.hitecin.struts2.filter.HibernateSessionClose</filter-class>
</filter>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionCloseFiler</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>