 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what
& q3 Y$ G4 N0 }% z, o q基本参数:
@+ n8 t2 G& c Y8 y; Ljta | thread | managed | custom.Class
- O7 [- `2 n. F+ t& A8 L F主要是配合* M+ I S2 Y8 A
SessionFactory.getCurrentSession()
( p9 j' z8 _9 D2 Q7 g3 R! W来用的.3 b6 Q# b' q( p: f4 u& h, T
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确, c1 w* t7 m% f i+ h
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
0 t* J5 }& h3 b: c% N+ Q% Z! k acontext.BeginRequest += OpenSession;6 D4 J9 |6 _3 ?# M( z! z+ E& y
.Bind(HttpContext.Current, SessionFactory.OpenSession())
" a( u0 `! E) h& e
! d1 b$ K# V$ w5 E) R5 E+ V, Z//do transaction
/ T; h' @$ T7 S( t4 r3 h( egetCurrentSession().Submit();6 e R2 q {/ o* P* B7 t1 q: r
getCurrentSession().RollBack();
" A% H' ]- U$ s2 _$ z+ M...3 j! \6 }& r6 p
Unbind(HttpContext.Current, SessionFactory)( W+ I% \8 Y# g/ s5 B0 ~( V
4 [" n4 J% B2 Z$ K
context.EndRequest += CloseSession;; \! u( b$ `! e* @$ E( _
1 [% X) ]7 t ^/ D" I) H% I
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|