<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-57  評論-202  文章-17  trackbacks-0
          這一節是非常實用的一節,我在閱讀此書的時候,一直在迷惑,究竟應該怎樣管理Session呢?因為Session的管理是如此重要,類似于以前寫程序對JDBC Connection的管理。看完此節后,終于找到了方法。
          在各種Session管理方案中,ThreadLocal模式得到了大量使用。ThreadLocal是Java中一種較為特殊的線程綁定機制。通過ThreadLocal存取的數據,總是與當前線程相關,也就是說,JVM為每個運行的線程,綁定了私有的本定實例存取空間,從而為多線程環境經常出現的并發訪問問題提供了一種隔離機制。
          下面是Hibernate官方提供的一個ThreadLocal工具:


    import net.sf.hibernate.
    *;
    import net.sf.hibernate.cfg.
    *;
    import org.apache.log4j.Logger;

    /**
     * <p>Title: </p>
     *
     * <p>Description: Session的管理類</p>
     *
     * <p>Copyright: Copyright (c) 2005</p>
     *
     * <p>Company: </p>
     *
     * @author George Hill
     * @version 1.0
     
    */


    public class HibernateUtil {

      
    private static final Logger log = Logger.getLogger(HibernateUtil.class);

      
    private static final SessionFactory sessionFactory;

      
    /**
       * 初始化Hibernate配置
       
    */

      
    static {
        
    try {
          
    // Create the SessionFactory
          sessionFactory = new Configuration().configure().buildSessionFactory();
        }
     catch (Throwable ex) {
          log.error(
    "Initial SessionFactory creation failed.", ex);
          
    throw new ExceptionInInitializerError(ex);
        }

      }


      
    public static final ThreadLocal session = new ThreadLocal();

      
    /**
       * 根據當前線程獲取相應的Session
       * @return Session
       * @throws HibernateException
       
    */

      
    public static Session currentSession() throws HibernateException {
        Session s 
    = (Session) session.get();
        
    // Open a new Session, if this Thread has none yet
        if (s == null{
          s 
    = sessionFactory.openSession();
          session.
    set(s);
        }

        
    return s;
      }


      
    /**
       * 返回Session給相應的線程
       * @throws HibernateException
       
    */

      
    public static void closeSession() throws HibernateException {
        Session s 
    = (Session) session.get();
        session.
    set(null);
        
    if (s != null)
          s.close();
      }


    }


          針對WEB程序,還可以利用Servlet2.3的Filter機制,輕松實現線程生命周期內的Session管理。下面是一個通過Filter進行Session管理的典型案例:

    public class PersistenceFilter implements Filter {
      
    protected static ThreadLocal hibernateHolder = new ThreadLocal();

      
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        hibernateHolder.
    set(getSession());
        
    try {
          
          chain.doFilter(request, response);
          
        }
     finally {
          Session session 
    = (Session) hibernateHolder.get();
          
    if (session != null{
            hibernateHolder.
    set(null);
            
    try {
              session.close();
            }
     catch (HibernateException ex) {
              
    throw new ServletException(ex);
            }

          }

        }

      }

      
    }
    posted on 2005-07-29 19:43 小米 閱讀(3939) 評論(1)  編輯  收藏 所屬分類: Hibernate

    評論:
    # re: 《深入淺出Hibernate》讀書筆記(9)——Session管理 2005-11-06 15:07 | jiniboy
    這都是你總結的嗎   回復  更多評論
      
    主站蜘蛛池模板: 亚洲综合最新无码专区| 成人性生交视频免费观看| 69影院毛片免费观看视频在线| 在线观看免费视频资源| 无码乱肉视频免费大全合集| 日韩人妻无码免费视频一区二区三区 | 国产精品美女免费视频观看| 免费在线观看一级片| 和日本免费不卡在线v| 国产资源免费观看| 亚洲精品无码久久久久去q| 亚洲美女免费视频| 亚洲国产成人久久一区二区三区| 一区二区三区精品高清视频免费在线播放 | 67194国产精品免费观看| 精品国产免费一区二区| 中文字幕亚洲一区| 亚洲人成网站在线观看播放动漫| 国内成人精品亚洲日本语音| 国产成人AV免费观看| AV大片在线无码永久免费| 又粗又大又猛又爽免费视频 | 亚洲爆乳精品无码一区二区三区| wwwxxx亚洲| 精品国产免费人成网站| 青青视频观看免费99| 亚洲综合色视频在线观看| 亚洲一区二区三区不卡在线播放| 牛牛在线精品免费视频观看| 9420免费高清在线视频| 国产亚洲福利一区二区免费看| 亚洲国产精品国自产电影| 久久亚洲AV成人无码国产电影| 国产精品99久久免费观看| 国产精品深夜福利免费观看| 久久久国产精品亚洲一区| 男男gay做爽爽免费视频| 在线观看永久免费| 亚洲色大成网站WWW久久九九| 亚洲欧美成人av在线观看| 久久午夜无码免费|