 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
$ I0 m2 y7 M: I基本参数:
7 K' N& K! w1 ?& u7 }9 Fjta | thread | managed | custom.Class2 i% e8 Z! F) j. A& e' d# h) d: p2 }
主要是配合- k. f0 a( w2 K9 ~
SessionFactory.getCurrentSession()
6 h7 i7 d2 h! c0 ?来用的.
( g4 H. B: E; G0 z4 VThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,1 y. R: Y! m9 I( s# P" H
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
& k# S4 A" \: l3 Y8 Hcontext.BeginRequest += OpenSession;' k; z" h* ~7 v0 [
.Bind(HttpContext.Current, SessionFactory.OpenSession())! y5 m) e3 @9 L! z/ C8 d
( N: H6 B R) B7 e+ u% v6 v
//do transaction
/ P) x, F( v' J' a1 A# y1 ]% `' UgetCurrentSession().Submit();# H& Q! `, w% Q8 C+ v- C
getCurrentSession().RollBack();
0 N5 ~0 K+ S i1 [( \...- i$ i4 [8 D+ Y5 Z+ x: X
Unbind(HttpContext.Current, SessionFactory) q( Z2 ~4 o7 [9 W V
6 u [' N9 I. T2 i( Z: O% Z/ L
context.EndRequest += CloseSession;
5 U) F* C5 ]6 S1 S; |) j2 c
. s9 j- {! q: u, F& M- \. b2 B0 F 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|