session的对象并不是线程安全的,所以,通常,在每次用户请求时创建,请求结束时丢弃。
这通常会用到servletFilter来完成事务处理操作。这里还会有一个问题,因为session是非单线程的,那么filter如何知道这个session是哪一个线程的呢?我们可以借助一个ThreadLocal变量来把创建的session对象绑定处理线程上去。
Session s = (Session)session.get();//取出当前线程副本中的值
if (null == s){
s = sessionFactory.openSession();
session.set(s);//重新设置当前线程副本中的值
}
不过,有些操作需要将多个请求放到同一个事务时,我们也可以用锁机制来实现
这通常会用到servletFilter来完成事务处理操作。这里还会有一个问题,因为session是非单线程的,那么filter如何知道这个session是哪一个线程的呢?我们可以借助一个ThreadLocal变量来把创建的session对象绑定处理线程上去。
Session s = (Session)session.get();//取出当前线程副本中的值
if (null == s){
s = sessionFactory.openSession();
session.set(s);//重新设置当前线程副本中的值
}
不过,有些操作需要将多个请求放到同一个事务时,我们也可以用锁机制来实现