 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what. [ N& T8 l/ Q% K/ k) e
基本参数:& f, F1 Y- [* g% e( t3 B
jta | thread | managed | custom.Class" A0 d N$ ?2 U) v0 ?( W
主要是配合& m% p) }' a3 O# n* m g
SessionFactory.getCurrentSession()% ~0 v8 y: ?, H
来用的.8 Q" F# x" } q, @* G2 M3 f
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
8 H* b6 ]/ n' q+ b4 FWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:2 Y7 l& p3 G3 X$ G* L
context.BeginRequest += OpenSession;
- E3 R. Q; H9 D6 O# c.Bind(HttpContext.Current, SessionFactory.OpenSession())* ^& S q, y: _1 X
+ ]- v' V! D% Y0 d2 X# B//do transaction* Q9 v Z6 X' v1 Y
getCurrentSession().Submit();& R8 g( k* P' |/ {. D! A& O# d$ W
getCurrentSession().RollBack();
+ U: x. @ j5 c0 K8 U4 c...4 j0 u% w9 ]" ~ ^% E: F- d
Unbind(HttpContext.Current, SessionFactory)
7 Z/ j! C% u+ x- q: Y) H) O& q9 ]: P
2 G8 x- V+ i6 x' ]context.EndRequest += CloseSession;
; W! K( h# s3 k; s+ d9 K: H3 n! T4 }2 U U: h: T$ V% W) s5 y
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|