 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what/ ^/ `2 i) B; K! e1 |0 n! F
基本参数:, |) x- h8 [0 R$ O
jta | thread | managed | custom.Class
5 @3 H) L0 h" i主要是配合
. i* Z- {: w3 u; d9 ASessionFactory.getCurrentSession()5 \: o9 `1 M) Q f Z2 O7 C5 k
来用的.
1 T2 N) R4 d/ B0 WThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
/ c8 t; w6 j0 m( j/ `5 g* UWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:1 w* ?# C+ T% p; c
context.BeginRequest += OpenSession;6 {3 M4 T# ^+ m
.Bind(HttpContext.Current, SessionFactory.OpenSession())
+ M# W: I2 O' s( C
$ n" G' r# e$ |4 L6 @, ~" M8 \! S//do transaction9 Z1 t2 q2 ^. I8 B* n8 c3 L/ M2 n
getCurrentSession().Submit();8 U5 h5 J3 Y2 Y/ ^2 P1 v4 u
getCurrentSession().RollBack();1 l! ]' U8 m" A1 [; R+ k: r
...
1 m2 r# Y5 U8 K9 O4 {, nUnbind(HttpContext.Current, SessionFactory)( D: A# `- n4 V
2 Z5 ^) D, i/ A3 q' Y8 [# { L# ]
context.EndRequest += CloseSession;
; a& |' a. C m* i$ L- t+ J3 M5 k8 v8 s, ]: L; I
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|