 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
0 |) s( A: q6 {( n9 `# m基本参数:
" j3 m/ I) B1 q, ajta | thread | managed | custom.Class; h9 u- [9 J0 x7 F" v0 _. c8 _
主要是配合
" @* P2 _( m7 }4 {0 z# x$ g. NSessionFactory.getCurrentSession()
5 [ Z& R* W- V; T% _/ C2 g来用的.
" p+ y# y( L: s% M3 @9 BThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,! c9 I. v5 G) }5 X v& M) e% m
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
0 G- a1 ^* g$ }& ^6 R' hcontext.BeginRequest += OpenSession;! `0 X: V ~+ H4 A) N' L6 F0 q& ?
.Bind(HttpContext.Current, SessionFactory.OpenSession())' r5 o0 a+ o$ i' Q: p
5 j5 [* `5 p( Z Y0 R) ]& ^% S* B
//do transaction. v" U1 k6 N- x7 k7 ~
getCurrentSession().Submit();
. X" p4 B- h! v( sgetCurrentSession().RollBack();
4 |9 o" m7 ?3 | W.... L2 p5 S+ l7 X" R9 d5 ~
Unbind(HttpContext.Current, SessionFactory)
7 i" O p" c$ C3 p
+ ^7 ^' E" U* z( j3 dcontext.EndRequest += CloseSession;! a8 f+ A1 f5 y
1 ]$ x8 X8 _7 R1 O; k! r 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|