 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what# E& c! P- ~0 X3 y+ q* \. g- J* `
基本参数:7 T6 H' O+ f2 ?1 [
jta | thread | managed | custom.Class
, \/ X* \, X4 w7 G! ?5 L主要是配合7 h) i5 p$ Z R2 ]8 V: x8 h
SessionFactory.getCurrentSession()
: m. q+ J) Z" }7 e来用的.7 L2 ?6 P) i1 x/ T/ v) }' K/ ^# u
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,# O+ }7 w: M& Y3 Z- W5 c
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
* d! u, ^. ]% U) [, a! p3 T% Ocontext.BeginRequest += OpenSession;
7 w8 ~9 v% Q3 W.Bind(HttpContext.Current, SessionFactory.OpenSession())
* `2 h. | p( \# R4 T4 I& C7 B0 V; f9 E }
//do transaction
f. l8 E- w5 ~7 X$ U& wgetCurrentSession().Submit(); _6 m% C* P6 O/ n: f% ]
getCurrentSession().RollBack();# C1 Z) I" W+ F! ]
...0 ?$ _) p0 A9 g& ]# U/ ^
Unbind(HttpContext.Current, SessionFactory)% E. |! Z% y) Q9 v. w! i
9 |+ D+ C& N( f7 P9 _. p0 m
context.EndRequest += CloseSession;, \+ d" B1 } c- X5 [ c
' p5 p! V% a x( h% Z, E
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|