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

    評論:
    # re: 《深入淺出Hibernate》讀書筆記(9)——Session管理 2005-11-06 15:07 | jiniboy
    這都是你總結的嗎   回復  更多評論
      
    主站蜘蛛池模板: 亚洲色WWW成人永久网址| 国产成人免费一区二区三区| 亚洲精品无码久久久| 亚洲爆乳大丰满无码专区| 毛片免费视频在线观看| 亚洲国产区男人本色在线观看| 中文字幕影片免费在线观看| 亚洲午夜在线一区| 午夜免费福利在线观看| 看全免费的一级毛片| 亚洲视频人成在线播放| 91在线免费观看| 亚洲bt加勒比一区二区| 猫咪免费人成网站在线观看| 亚洲天堂一区在线| 国产精品无码一区二区三区免费 | 国产免费AV片无码永久免费| 国产午夜亚洲精品不卡| 国产日产亚洲系列| 99久久精品免费精品国产| 亚洲另类古典武侠| 国产gav成人免费播放视频| yellow视频免费看| 亚洲国产美国国产综合一区二区 | 精品亚洲成A人无码成A在线观看| 毛色毛片免费观看| 一级成人a免费视频| 久久精品九九亚洲精品| 国产高清在线免费视频| a级毛片免费完整视频| 亚洲人成网站在线观看播放动漫| 免费网站看v片在线香蕉| 青青操免费在线视频| 亚洲乱码在线视频| 亚洲一级特黄无码片| 亚洲一级免费毛片| 一级毛片不卡免费看老司机| 亚洲人成免费网站| 国产亚洲色视频在线| 色窝窝免费一区二区三区| 久久久WWW成人免费精品|