 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what+ F2 R& @; T$ Z: c% s# p
基本参数:( g5 A) c# Z* p
jta | thread | managed | custom.Class: P, {- v. k& l3 H/ t
主要是配合
2 ]" l8 A# e; s) |SessionFactory.getCurrentSession()
7 r/ A! A" L { C5 e来用的.: p E y7 f* Z* T4 x* A
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,+ A6 A* I+ G( a8 {. `4 S9 S
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:. @& T# F8 X. m" j& w
context.BeginRequest += OpenSession;$ |# c: H1 D+ i" D( U1 G' ~. e# n% r
.Bind(HttpContext.Current, SessionFactory.OpenSession())+ a$ H) F/ {$ F4 c9 c( [+ ]
2 ^# `; B( Z* u0 |5 K$ Q0 ]: A+ G, D
//do transaction2 @9 j' I2 l' T
getCurrentSession().Submit();: y y6 g1 b5 q6 W7 o$ S# D
getCurrentSession().RollBack();, _0 D5 \7 v# Q) u. W, Z* y
...
. {! g2 K# ~7 PUnbind(HttpContext.Current, SessionFactory)+ o' F- Y7 C/ ~
$ Z, \; h# i4 Q3 H& A1 K1 z' D
context.EndRequest += CloseSession;
" @* a- N4 h2 ]) i* j3 k" p' Z7 F3 R5 G" @ K3 u- X- [4 Y+ \8 A
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|