埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?3 k1 b8 B) \% }/ h* s1 E  T$ D
5 g4 _: j7 Z0 K2 N4 i6 R7 G
谢谢! v* T$ z, j% I- T* o5 W
, v( i! w" ?9 i) u7 r* c  v; A
<property name="current_session_context_class">web</property>
' X3 c/ k* x$ y. n" h<property name="current_session_context_class">call</property>$ D, ]1 a/ R5 }. F: v
<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 编辑
$ w9 q3 j1 N5 s6 }; ?$ o+ B4 s
' ^* j% l& F" c+ A; Z  ~Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
' K$ o* Z( J* e
' w3 F( Z; Y# y6 }' g. y$ `1 ?3 x4 X, V+ G9 k
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf3 n3 h7 a! }$ v6 A0 e/ F" C

! Z6 ^! ^3 O, m6 s* N4 u4 |) p# A& ^
Chapter 2.5 Contextual Sessions0 f2 ^# Z2 Y8 k# u. T% ]# K
gamahu 发表于 2011-7-14 21:56

, X% N# m" r' y1 \: P9 i
8 p4 D, \) I* d, |1 H谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
0 Z( P  ]- ~$ x2 j, }7 z% C- V$ d$ R) u/ W; ]! t$ q: n
现在还多了个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
; I( X$ R* j/ U' Z! y基本参数:5 ^) y& k. `& F5 v2 n4 p
jta | thread | managed | custom.Class% n6 u1 W$ Y1 ]' R
主要是配合
1 Q3 l9 X2 R& z/ z3 s' {% @SessionFactory.getCurrentSession(). m" A& V  l$ l0 n1 z; Z3 _& z
来用的.
3 F$ t9 b+ @+ ?7 zThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
8 |; J1 F- a: q0 Y9 i! wWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
# l( |9 z; k) l/ U0 n7 x' o' _& ocontext.BeginRequest += OpenSession;
- B9 Q# b& g1 J.Bind(HttpContext.Current, SessionFactory.OpenSession())+ V& i. H7 P. }8 k" M7 X/ l3 w

. s4 Q9 d& n. T7 a' G//do transaction
3 {8 R5 Y9 B, Y# |, X- A3 IgetCurrentSession().Submit();
8 _0 |: Y4 a& |5 H8 k. QgetCurrentSession().RollBack();
" ^2 Z) g$ B7 U; Z1 N/ u: X...
2 q1 m6 ~9 S+ v6 gUnbind(HttpContext.Current, SessionFactory)# s$ P/ c9 z9 c4 }

% H- a- J2 e6 @3 h# t2 O/ c/ ccontext.EndRequest += CloseSession;% S9 J. l( w, @4 |1 x1 @

" C+ W* O1 u; V3 q* j" f 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-6-11 03:33 , Processed in 0.123280 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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