还没有得到个很好的回复。有没有哪位大侠可以发表一下关于这个Session线程安全的问题呢?
解决方案 »
- 急!在线等!!!在myeclipse下建的Dynamic Web Project在Run on Server时出错
- 关于struts-config.xml的一个问题
- CSDN社区的Session有效期问题
- 明天面试,高手指点
- JAVASCRIPT:)急
- 急---急---tomcat6.0 发布一个系统过几天页面就访问不了啦,请问是哪方面的原因!!!!!!!!!!!!
- 有谁用过WebLogical workshop 8.? 好不好用啊,
- hibernate 效率如何阿?
- 请教大家一个xml parser的问题?
- xml解析问题!!
- Struts2的页面获取查询list结果
- ERROR: Access denied for user 'root'@'localhost' (using password: YES)
Hibernate Session, 其作用无需多言.
在运用中为避免资源消耗,一般都会手动封装一个HibernateUtil类(未使用Spring管理的前提下).
该类的作用使Hibernate加载配置文件config, 创建sessionFactory等只运行一次.
实际运用中,经常需要将当前线程和session绑定.一般的用法为使用ThreadLocal: 在HibernateUtil类中封装hibernate的管理.通过openSession取得
session,并将其放入ThreadLocal变量中. 这样业务逻辑中仅需通过工具类取得当前线程对应的session.使用完毕后,调用工具类closeSession方法将
session关闭,当前线程的ThreadLocal变量置为NULL. 保证线程归还线程池复用后,ThreadLocal为空,以免出现导致其他线程访问到本线程变量.
而后,Hibernate的SessionFactory提供获取session的新方法getCurrentSession (获得与当前线程绑定的session). 内部通过代理封装,此方式得到的session
不仅和当前线程绑定,也无需手动开关. 默认在事务提交之后,session自动关闭. 需注意的是,必须在事务开启的前提之下才可使用此种方式获得的session.
此外hibernate.cfg.xml配置文件中也许配置
<property name="current_session_context_class">thread</property> 基于线程
末了,引入Spring之后.sessionfactory的创建等都交给spring管理.Spring也提供了HibernateTemplate,HibernateDaoSupport这样的封装方法.
用户可以不再考虑session的管理,事务的开启关闭.只需配置事务即可.
而所谓session关闭后,因延迟加载导致前台无法显示的问题以往解决方式为强制全部加载,现在也可通过在web.xml中配置
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter来解决.
你这里说的session应该是httpSession
httpSession对象会被多次使用,也会被同一个用户的多个页面使用,所以他对于系统来说是线程不安全的。