首页 > 解决方案 > HTTPSession 自动关闭而关闭休眠会话

问题描述

我遇到了一个问题,

当我关闭休眠会话时,httpsession 也会自动关闭。

示例代码供参考,

类 TestAction

public class TestAction extends Action{

public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,    HttpServletResponse response) throws Exception {
    HttpSession session = null;
    String forward = "";
    try {
        //session validation
        session = request.getSession(false);
        if (session == null)
            throw new InvalidSessionException("Unauthorized Access");
        AuditDAO dao = new AuditDAO();
        ArrayList list = dao.getAuditTrail(sc);

        session.setAttribute("results", list.size());

        forward="searchResult";

    } catch (InvalidSessionException ise) {
    }
    return (mapping.findForward(forward));
}
}

类 AuditDAO

public class AuditDAO extends HibernateBase{

public ArrayList<AuditVO> getAuditTrail(SearchCriteria sc) {

try {

    Query query = getSession().createQuery(
            auditDetailMap.get(constructed query));

    return query.list();
} catch (Exception ex) {
    System.out.println(ex);
} finally {
    closeSession();
}

return auditDetailList;
}
}

类 HibernateBase

public class HibernateBase {

private Session session1;

public Session getSession() {
    try {
        if (session1 == null || !session1.isOpen()) {
            Context ctx = new InitialContext();
            Object obj = ctx.lookup("HibernateSessionFactory");
            SessionFactory sessionFactory = (SessionFactory) obj;
            setSession(sessionFactory.openSession());
        }
    } catch (NamingException ex) {
        System.out
                .println("Failed get HibernateSessionFactory object from Context");
    }
    return session1;
}

public void setSession(Session session1) {
    this.session1 = session1;
}

public void closeSession(){
    if(session1!=null && session1.isOpen()){
        session1.close();
    }
}
}

注意:我没有关闭 httpsession。

关闭休眠会话后,我尝试从 httpSession 获取值我得到了异常..任何人都可以帮助我

标签: hibernateservlets

解决方案


推荐阅读