埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
7 O* R! H# K, I4 d" L! }2 K
! f( o2 z' p" c谢谢
( J4 z% n% A; z; f1 A- o7 L
5 M4 l6 k& E6 F<property name="current_session_context_class">web</property>
" Q( n# {; i4 V* K$ U# f9 u- G* u0 M<property name="current_session_context_class">call</property>/ q- g2 j3 s9 _4 q6 Q6 K
<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 编辑 ; B  e/ t7 [) w8 u
( [: x+ b4 M/ V$ T1 m
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
! W$ o: S9 u( m
5 Q/ I* x- F0 p# i3 n9 }
$ m3 \4 W# q) y& p# e  QChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf5 K: b! d: y, c! ?0 ?5 }
! d; z* Y6 E8 B) L; R$ f

7 F  k5 j! Q, }$ A! B- E- EChapter 2.5 Contextual Sessions, V; V& Y: U: L& Y& y3 M
gamahu 发表于 2011-7-14 21:56

. u+ n8 s5 I2 w7 E, S& O1 Y8 q- P0 M; c5 t7 J. J! U" q
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
2 O# r3 M4 l3 q3 |* A. n% @9 f6 r# z- |$ f. r
现在还多了个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
6 A9 _" a4 P5 M6 m( Q) w0 J* q基本参数:
6 R! x% \: N5 t$ r$ }* @% bjta | thread | managed | custom.Class
! E& S" C* O3 C! h0 y2 A. ~主要是配合3 m5 T5 o0 B, c/ q
SessionFactory.getCurrentSession()
! ~; F. S2 A! l" j, ~) ?  S来用的.) Z4 F( ^' S( S
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,1 P) ?. n  W3 Z. G* |
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
) @$ n  v+ _: b% F( b; l8 _" @' p2 x3 Zcontext.BeginRequest += OpenSession;
# w7 N1 D% G3 J0 q+ Q.Bind(HttpContext.Current, SessionFactory.OpenSession())
; S- V- g3 J; e7 t3 n
) [6 _" A9 |' c7 L4 e4 t5 c+ \2 r2 f//do transaction9 @7 ~2 K  p% U, N
getCurrentSession().Submit();+ S* e, }  l  D7 m
getCurrentSession().RollBack();1 a5 R0 I* C7 X' i8 }1 m+ p. a
...
) ~( V, I- b. ]0 YUnbind(HttpContext.Current, SessionFactory)% n6 t( J/ [4 O: W* M  F8 ?% k3 t3 N
' E, @* Y- y, _: j, e
context.EndRequest += CloseSession;
0 X, _; h* W" d6 F5 J/ P: B* ?9 F% I7 b1 \% ?4 w8 @3 Y/ v
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-16 06:28 , Processed in 0.095097 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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