 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what& }6 f2 h5 n9 q4 N6 Q) M! x8 [) u' W
基本参数:- x/ x8 K- R# j9 l Q" `# I& r4 U0 P
jta | thread | managed | custom.Class: d: j, a" ]1 W3 }
主要是配合
* O$ \4 f- Q; l" uSessionFactory.getCurrentSession()6 w$ N5 }+ A+ l: R) C
来用的.) I2 f. p5 D( F; O1 ?: H# `
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,! I( K7 z2 A2 u6 n% Z% F
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:% o9 N! D& b! ]
context.BeginRequest += OpenSession;; S: m' P! \/ P
.Bind(HttpContext.Current, SessionFactory.OpenSession())
$ s! _& v# q, d r1 a$ ~6 c
% [- Y3 P/ x# `) \8 Y+ }//do transaction) c1 U7 z/ n: @* d* n7 K! G: q
getCurrentSession().Submit();1 Y+ h. n1 E( J. K+ s9 F& }
getCurrentSession().RollBack();5 b A# S# k) r% w7 n* Q# C
...
; ~3 Z1 z7 v+ rUnbind(HttpContext.Current, SessionFactory), I& D, k7 E) [$ Z
* Q' s7 p( W4 T- pcontext.EndRequest += CloseSession;
) |" V0 z1 a ]. D& n* E; S Y) r! A( M6 d) X# X& ^) ^/ ?
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|