讲解HibernateThreadLocal

Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate ThreadLocal,包括介绍Hibernate官方开发手册标准示例等方面。

目前创新互联建站已为上千的企业提供了网站建设、域名、网站空间网站托管、企业网站设计、禹王台网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

Hibernate ThreadLocal

它会为每个线程维护一个私有的变量空间。实际上, 其实现原理是在JVM 中维护一个Map,这个Map的key 就是当前的线程对象,而value则是 线程通过Hibernate ThreadLocal.set方法保存的对象实例。当线程调用Hibernate ThreadLocal.get方法时, Hibernate ThreadLocal会根据当前线程对象的引用,取出Map中对应的对象返回。

这样,Hibernate ThreadLocal通过以各个线程对象的引用作为区分,从而将不同线程的变量隔离开来。

Hibernate官方开发手册标准示例:

 
 
 
  1. public class HibernateUtil { 
  2. private static SessionFactory sessionFactory;
  3. static { 
  4. try { 
  5. // Create the SessionFactory sessionFactory = new Configuration().
    configure().buildSessionFactory();
  6. catch (HibernateException ex) { 
  7. throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );
  8. public static final ThreadLocal session = new ThreadLocal();
  9. public static Session currentSession() throws HibernateException { 
  10. Session s = (Session) session.get();
  11. // Open a new Session, if this Thread has none yet if (s == null) { 
  12. s = sessionFactory.openSession();
  13. session.set(s);
  14. return s;
  15. public static void closeSession() throws HibernateException { 
  16. Session s = (Session) session.get();
  17. session.set(null);
  18. if (s != null) s.close();
  19. }

通过filter实现session的重用:

 
 
 
  1. public class PersistenceFilter implements Filter { 
  2. protected static ThreadLocal hibernateHolder = new ThreadLocal();
  3. public void doFilter(ServletRequest request, 
    ServletResponse response, FilterChain chain)
  4. throws IOException,ServletException { 
  5. hibernateHolder.set(getSession());
  6. try { 
  7. …… 
  8. chain.doFilter(request, response);
  9. …… 
  10. finally { 
  11. Session sess = (Session)hibernateHolder.get();
  12. if (sess != null) { hibernateHolder.set(null);
  13. try { sess.close(); } catch (HibernateException ex) { 
  14. throw new ServletException(ex);
  15. ……
  16. }

分享标题:讲解HibernateThreadLocal
本文路径:http://www.shufengxianlan.com/qtweb/news19/47319.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联