<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 小米 閱讀(3938) 評論(1)  編輯  收藏 所屬分類: Hibernate

    評論:
    # re: 《深入淺出Hibernate》讀書筆記(9)——Session管理 2005-11-06 15:07 | jiniboy
    這都是你總結的嗎   回復  更多評論
      
    主站蜘蛛池模板: 国产精品免费看久久久| 成人免费午夜视频| 亚洲资源最新版在线观看| 国产福利免费观看| 国产午夜成人免费看片无遮挡| 亚洲国产精品综合一区在线| 亚洲av无码乱码在线观看野外 | 成年免费a级毛片免费看无码| 亚洲国产一二三精品无码| 亚洲成人在线免费观看| 国产亚洲精品欧洲在线观看| 婷婷亚洲久悠悠色悠在线播放| 成年女人免费碰碰视频| 国产自国产自愉自愉免费24区| 亚洲成人激情小说| 久久青草亚洲AV无码麻豆| 在线免费一区二区| 久操视频免费观看| 国产天堂亚洲精品| 亚洲成人午夜电影| 亚洲精品无码乱码成人| 高清国语自产拍免费视频国产 | 4虎永免费最新永久免费地址| 美女被羞羞网站免费下载| 亚洲精品在线电影| 亚洲精品国产福利一二区| 亚洲免费网站观看视频| 黄网站免费在线观看| 猫咪免费人成在线网站| 国产精品亚洲综合久久| 亚洲综合在线成人一区| 亚洲色偷偷综合亚洲AVYP| 免费一级大黄特色大片| 成人男女网18免费视频| 99re在线精品视频免费| 中文精品人人永久免费| 欧洲精品码一区二区三区免费看| 亚洲综合国产成人丁香五月激情| 亚洲欧洲中文日产| 亚洲第一视频网站| 亚洲春色在线视频|