hibernate中,sessionFactory是线程安全的,可以被所有的应用程序共享,而session不是线程安全的,被多个线程共享时会出现不可预知的后果,那么对session 采用ThreadLocal实现共享会出问题吗?
public class HibernateUtil {
	    private static SessionFactory sessionFactory;
	    static{
		try{
		    sessionFactory = new Configuration().configure().buildSessionFactory();	
		}catch(HibernateException e){
		 throw new RunTimeException("Configuration problem:"+e.getMessage());
		}
	    }	
	   public static final TreadLocal session = new ThreadLocal();
	   public static Session currentSession() thrwos HibernateException{
	  	Session s = (Session) session.get();
		if(s==null){
			s = sessionFactory().openSession();
			session.set(s);
		}
		return s;	
	   } 
	  public static void closeSession() throws HibernateException{
		Session s = (Session)session.get();
		session.set(null);
		if(null != s){
		    s.close();
		}
	  }
	}


这个是《深入浅出hibernate》中关于session管理的实现, 有些不明白。如果各位有比较好的对session管理的方法,大家都来说说。
评论
uidin 2008-01-10   回复
关注,对这个也有点不明白
ghujki 2007-12-14   回复
如果有lazy呢?
myworkfirst 2007-12-12   回复
建议你采有事务机制
NicholasBugs 2007-12-12   回复
明白了一些,Tomcat会维护一个Servlet实例,而
Servle的执行是多线程的,会被多个并发请求调用,
为每个线程维护一个ThreadLocal型的session,
保证了session的在线程安全前提下的共享。
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

NicholasBugs
搜索本博客
最近访客
最近加入圈子
存档
最新评论