 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
/ X2 v9 u. e! f$ ~基本参数:' w5 {& l0 ^7 q) U3 w
jta | thread | managed | custom.Class
5 {& J; t! A8 O$ V! a( _主要是配合
, Q8 y/ e$ J" V( m( }9 I8 G: pSessionFactory.getCurrentSession()0 M+ B; a& K9 h
来用的.# E5 ^7 R2 i9 _' V
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
- z1 G' B( x% q9 k4 T6 a' C2 p5 [Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
% g5 R# T) r4 z) ccontext.BeginRequest += OpenSession;
/ W. r9 @ X$ k.Bind(HttpContext.Current, SessionFactory.OpenSession())# D1 a5 j& W( r q3 N& M* R
. N9 f* q# L0 N; w4 F//do transaction/ o1 _! _8 N* S p1 E0 W
getCurrentSession().Submit();: A" a z8 S5 b- C
getCurrentSession().RollBack();
: i, W. t2 u) T1 k: O..., K# k2 K+ U" ?; b J0 n+ }
Unbind(HttpContext.Current, SessionFactory)$ l+ N G- M9 h$ J0 z# _& m
+ r& B6 X6 _' _
context.EndRequest += CloseSession;% s8 L# c1 C+ s7 _: v7 U- L( Z
c: k$ |. e4 m! K' _) u
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|