埃德蒙顿华人社区-Edmonton China

 找回密码
 注册
查看: 1109|回复: 4

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?) u; d- b( _) M/ q

* ]% t- j- V% \3 G5 ]. h1 w谢谢
' f+ k7 z8 O! \# p! I7 N/ E1 }
<property name="current_session_context_class">web</property>5 Y" u$ n: O5 i$ m* S3 i& y
<property name="current_session_context_class">call</property>5 m# R* t  S+ Q0 |  z
<property name="current_session_context_class">Thread_static</property>
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 20:52 | 显示全部楼层
自己顶一下,等高手出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-14 20:56 | 显示全部楼层
本帖最后由 gamahu 于 2011-7-14 22:47 编辑
2 T0 h# x# E/ i; p: p
: ]) z0 [" {5 Q8 O3 ~8 LPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
' z; M! t9 U/ T, C! |( c( n* w( f) n4 h# ]% F  e
2 s& {7 D; Q" h/ f' k# T
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf" R/ p$ j# m) J( V

* z; d; `6 Q  M/ }; C1 N
9 ~0 K/ P/ f0 ^* e% n# j. kChapter 2.5 Contextual Sessions
/ e: L0 m- B4 a% l4 Fgamahu 发表于 2011-7-14 21:56
# j+ x# _% u9 M' y4 Y$ @% Z6 D# Y5 A9 f
+ e  T( j  c# ^# {% K/ Y
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
! C. N1 Q6 D( Z# c8 L4 L
0 N% N' V$ T( s- e9 _$ D9 D8 \2 {# z* O现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what
/ u( ~; z: K4 e* A基本参数:
, B: {0 K# F  r7 G+ m2 m1 E% {jta | thread | managed | custom.Class" |8 J+ F4 T; [
主要是配合
+ N& C0 i3 |+ J! pSessionFactory.getCurrentSession(). I! {" w- w. E5 D
来用的.
4 g% b- Z. M! M5 k7 z# M+ cThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,% k5 [7 e' Y5 v0 I
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:2 L) ~2 ]2 h7 {: y# f9 D7 {6 @
context.BeginRequest += OpenSession;
2 y0 A8 {: L4 b/ f) y! _.Bind(HttpContext.Current, SessionFactory.OpenSession())9 _  }& _* Q9 R9 l) D  z. o
- P/ y( O' C; y4 x! f8 H
//do transaction
" S) r5 s1 U8 V) ~+ Q2 S6 IgetCurrentSession().Submit();
: ?, T- P! T" s  \% bgetCurrentSession().RollBack();3 e  H- g- ?+ a. H0 L
...6 e. r  Q# |6 n8 W# d3 `" ], i
Unbind(HttpContext.Current, SessionFactory)
% t) j9 f3 O2 L5 n4 d# U, ^- {3 k* E2 M* {% D+ C
context.EndRequest += CloseSession;$ H0 w' [; c! f( R8 u3 b4 [; D

7 }; f3 Y; O) T  P( U' n  [0 t 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|小黑屋|手机版|Archiver|埃德蒙顿中文网

GMT-7, 2026-4-13 22:38 , Processed in 0.315243 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表