 鲜花( 2)  鸡蛋( 0)
|
current_session_context_class 主要是用来配置当前 data transaction session bind to what+ e6 w+ X/ F8 ]! y/ O5 D
基本参数:% E7 F1 j; N& M
jta | thread | managed | custom.Class
! }; w4 o* ^- p9 K0 ]主要是配合
[ G: q% ~0 e; s+ n! i9 ^ kSessionFactory.getCurrentSession()
% t# y7 l7 {. G' _来用的.7 v0 S; H* V8 y) s6 F/ T" {
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,1 ~' M) C( Y; M
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:* }+ ]# c- `% m
context.BeginRequest += OpenSession;
+ R9 n9 r6 H/ }6 @+ c6 x- p1 y.Bind(HttpContext.Current, SessionFactory.OpenSession())
: u) \8 e4 _/ A& E" z+ M
; a2 N/ W1 [) [8 U' y' H//do transaction
$ w' S# z$ J8 U/ P# `- t. r* K* YgetCurrentSession().Submit();
6 R* @* y5 x+ D; o0 Y: VgetCurrentSession().RollBack();6 [6 s/ n. T3 {% {- x$ B
...8 Q5 o% o1 J2 U# N, f
Unbind(HttpContext.Current, SessionFactory)
" D4 l0 j, T# [ _9 z( l) @6 E: g: ^' `, T6 G' a' k8 \
context.EndRequest += CloseSession;8 Z7 m6 \( \1 U' b& g7 |
6 {8 m; X" S% ]# b
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。 |
|