 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what: I8 i1 P3 O8 P& X
基本参数:
* j2 ~. a1 _# L6 E1 ]- k9 qjta | thread | managed | custom.Class E8 i5 N4 Y0 E$ r
主要是配合
4 K+ v' L q: r$ J0 g1 \ a% k: wSessionFactory.getCurrentSession()5 l% D2 _2 J5 F3 W) C4 e3 l
来用的.6 W6 l/ V* r# e7 M9 \: _1 Q2 m2 c
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
9 f4 n1 z8 ^8 t* @Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
^) j( X& Q: |, E$ O9 ?context.BeginRequest += OpenSession;
1 I4 [8 ~) e) _5 s3 [.Bind(HttpContext.Current, SessionFactory.OpenSession())
( I. K; l; }; ]
L$ x1 O+ {: F$ F" u( z//do transaction5 | ^: [7 R/ l& C& d g. @
getCurrentSession().Submit();2 o! L7 O0 l7 q7 ?/ }1 s. }- ]
getCurrentSession().RollBack();
2 N1 e; P7 D3 Y' q...( m% F6 v3 ^3 m$ U+ i0 N, B1 y
Unbind(HttpContext.Current, SessionFactory)
" \% |7 [! j6 e1 C% @8 X1 e9 l& @1 G `8 g9 L
context.EndRequest += CloseSession;+ C7 _/ T8 p& h% k- @
& R, C) X# E0 t) [' s# V 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|