 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what: h' A* A5 p! c' d
基本参数:5 x- P+ B0 j6 ^% o) j" X; p
jta | thread | managed | custom.Class, C7 R' l U5 d
主要是配合
" X# t( T( c/ N8 ^4 Q3 pSessionFactory.getCurrentSession()+ i/ M, |0 d1 g: K2 k
来用的.
% i8 m# q- W) F; pThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确," U U/ f( x# m4 _
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
' I5 z6 y- i+ f7 lcontext.BeginRequest += OpenSession;% |- Y2 A/ I' G! v
.Bind(HttpContext.Current, SessionFactory.OpenSession())7 p. ?1 h$ _7 [4 q0 Y) H
: [! Y, _1 c0 l2 J//do transaction
% v- I9 j( ?7 a5 o0 f2 O; Z& dgetCurrentSession().Submit();+ a- u- m* P- v) l
getCurrentSession().RollBack();
8 E$ ]1 Y1 `, N' v...7 Y! n& A8 @8 o: A; s
Unbind(HttpContext.Current, SessionFactory). E2 C6 s9 o# e8 S# G
& G1 A, `/ |8 O5 ucontext.EndRequest += CloseSession;. ?! j+ k" g& l+ l
& c: F+ l9 K6 u 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|