<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
    這都是你總結的嗎   回復  更多評論
      
    主站蜘蛛池模板: 亚洲国产精品无码第一区二区三区 | 亚洲人成影院在线高清| 国产成人免费网站| jizz在线免费播放| 亚洲精品在线不卡| 四虎亚洲国产成人久久精品| 无码日韩精品一区二区免费暖暖 | 免费国产在线视频| 亚洲国产精品网站在线播放 | 亚洲精品无码鲁网中文电影| 黄页网站免费在线观看| 一个人晚上在线观看的免费视频| 久久综合亚洲色HEZYO社区| 国产中文字幕免费| 久热中文字幕在线精品免费| 黄色一级视频免费| 亚洲国产精品综合久久20| 亚洲色中文字幕无码AV| 在线a人片天堂免费观看高清| 精品国产污污免费网站| 国产成人亚洲午夜电影| 91情国产l精品国产亚洲区| 免费看国产曰批40分钟| 亚洲毛片免费视频| 两个人看的www免费| 亚洲1区2区3区精华液| 久久综合亚洲色HEZYO社区 | 亚洲天堂中文字幕在线观看| 亚洲日本一区二区一本一道| 久久综合AV免费观看| 国产一精品一av一免费爽爽 | 国产免费牲交视频| 97在线观看永久免费视频| a毛片免费播放全部完整| 免费福利资源站在线视频| 久久精品国产99国产精品亚洲| 亚洲国产精品无码久久一线| 亚洲国产成人久久综合一区77 | 亚洲人成高清在线播放| 久久精品国产精品亚洲毛片| 亚洲精品成人片在线观看精品字幕|