 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
: W3 K `9 P5 G! T& ]基本参数:
. k! O( l/ P! E qjta | thread | managed | custom.Class
6 Q! x W, {# Z3 }0 f主要是配合
) Y! s5 I/ ]8 H1 u7 m1 USessionFactory.getCurrentSession()
, ?1 l: H' k0 Q4 k6 w来用的.
2 J9 ^) z6 K+ \& {( \: wThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,* g% |, Z; f( w. ~4 j
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
. ^$ e' R& q9 g% Jcontext.BeginRequest += OpenSession; S0 C* q6 s8 {' \8 Y( N$ D
.Bind(HttpContext.Current, SessionFactory.OpenSession())7 {% q& y' e; `$ x
: X# a- g- z$ R* p J3 ]//do transaction6 X# ?/ T( i+ W) Y! k
getCurrentSession().Submit();
' H& o0 E) K1 K e% LgetCurrentSession().RollBack();! z1 B5 |* b: w7 r
...# | A# R5 ]$ \& Y$ d! |( x
Unbind(HttpContext.Current, SessionFactory)
1 p) E, p8 V6 O) I
+ ]/ s0 F# Q0 {context.EndRequest += CloseSession;
8 i/ i1 v7 @. W0 B7 r
) t+ ^5 }+ o5 D* f" r 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|