埃德蒙顿华人社区-Edmonton China

 找回密码
 注册
查看: 1079|回复: 4

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?4 {" C" w; Z1 |. M3 A+ P
" v; }& a  J7 x3 E" i
谢谢5 t1 _+ L2 I2 O# v! V" b! \5 }% |

" ?; ]( X% F4 @. I8 A* }1 m<property name="current_session_context_class">web</property>
  c# X. Y: b$ }7 @2 ^) _<property name="current_session_context_class">call</property>/ n5 _" i8 @) k4 ]; Y' v- P
<property name="current_session_context_class">Thread_static</property>
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 20:52 | 显示全部楼层
自己顶一下,等高手出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-14 20:56 | 显示全部楼层
本帖最后由 gamahu 于 2011-7-14 22:47 编辑 , S' Y+ @* S( v9 D- r3 V

6 O0 F7 Z1 _( Z3 ?Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf- P1 c+ F  B* E5 U1 ^$ m
* i, p& E1 d, ~/ k% C

" ]) W+ C1 R4 T  e8 a) ~/ i0 NChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf$ V3 m7 g& u6 r! ]- f- {3 R

* u) n1 ]' w2 x5 A8 T5 H# a+ D5 T6 a8 n- y- e. j: h7 [8 [2 E
Chapter 2.5 Contextual Sessions2 Q2 I$ P% ?* C, D- Q9 x) S
gamahu 发表于 2011-7-14 21:56
/ b2 o; f! c* J
  }( `+ g* m! A& @- Y' g
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
! @% _7 }, J( |7 {, ^* K" J: n. n; d% Q1 }' F1 I. Y! E. I0 a
现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what
. `7 B& e/ _& E7 O! G基本参数:
+ r4 F. G- r$ t: b$ _3 Djta | thread | managed | custom.Class
' m$ ]- [* \! M4 w, m, h. v主要是配合
0 }+ U& e/ q; m2 H) CSessionFactory.getCurrentSession()" u( c' d! u% I3 H- l$ K7 M# m  \
来用的.2 U6 t* f% L, u( Y$ W9 f
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,' R/ s# S* v' I# V3 [3 z
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
  E5 K( O, G) w# k/ \) T( Pcontext.BeginRequest += OpenSession;
8 g+ ^% F# t2 ~: {  h1 u- y# I.Bind(HttpContext.Current, SessionFactory.OpenSession())
0 s) N$ X2 J% M
: }' W2 v7 g1 q! K//do transaction
( S5 p; K$ Q. `getCurrentSession().Submit();: `; u& Y/ k: o; o4 Y
getCurrentSession().RollBack();4 I4 ~& [, ~; X) P2 V5 W
...
# f0 L6 n- u* XUnbind(HttpContext.Current, SessionFactory)/ \9 Q* ~/ {4 I+ A1 T

, D3 ~: c6 W) H6 ?: o, kcontext.EndRequest += CloseSession;
  y6 C$ Y' \2 @8 q- H( J3 w3 z. n5 [" q. P% U0 V7 X
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
大型搬家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|小黑屋|手机版|Archiver|埃德蒙顿中文网

GMT-7, 2026-4-5 07:48 , Processed in 0.181525 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表