 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what$ C$ `- r; l9 {# V7 I
基本参数:: U+ O. x1 Y: L+ q! r3 @1 e4 l, ^6 D" K
jta | thread | managed | custom.Class
/ K8 T5 i0 S& |# B主要是配合
) z+ A( }) p; J3 q, j& pSessionFactory.getCurrentSession()
7 m0 P* j: L/ a: W来用的.% V( o" j- {: O/ Q* G1 U8 k3 ]
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,. c7 D$ F9 O% q
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:1 F7 o) U; H; B2 p7 B/ N% {$ G
context.BeginRequest += OpenSession;
1 I2 y3 x4 {& g( l9 B, h.Bind(HttpContext.Current, SessionFactory.OpenSession())- z* A2 B1 s7 p" A5 l2 d
`- B! N" f8 L' t/ T% b) w0 j
//do transaction
+ R2 E( p1 e: V. M; n" _getCurrentSession().Submit();7 a2 `$ v; O2 j0 N! m( J3 [4 k' q
getCurrentSession().RollBack();
" N& c, @2 C0 }: V9 ~$ ~( }... \* d8 e* d$ p# a& q
Unbind(HttpContext.Current, SessionFactory)
& V( A6 j% V' b5 r3 \) ]1 k5 L" Z7 }: l+ h3 O9 q
context.EndRequest += CloseSession;
% J# q. @4 L7 v: I# o- X p2 X m- U# o* D8 l
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|