埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
$ x- Z6 W; Y# o: \, e7 b. `. d
3 J' l% ?+ i4 \6 a2 C谢谢; i: H2 k* D7 l! G, o, f
. \6 O2 I, y4 p
<property name="current_session_context_class">web</property>
* w* Q7 Y& _8 c' p0 q$ _<property name="current_session_context_class">call</property>& {5 q2 U+ Q8 V& J9 I  n4 H
<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 编辑
# Q8 m, g# N* f$ N& Y" C  F
: p5 _7 A5 ?. e9 s" @9 H! TPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
) g3 P- r: e  K8 O; e# A1 U; }4 Y/ ~

$ F$ x  n* \. m. [; ~! p7 X6 }. lChapter 2.5 Contextual Sessions
大型搬家
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf& s* H6 B! k3 ]! n# W3 r

* a0 r2 ^5 _$ A3 f7 z0 j$ G" E
& Q$ \+ b& V+ g6 H: |  KChapter 2.5 Contextual Sessions* a5 a) Z8 j2 F
gamahu 发表于 2011-7-14 21:56

3 z7 A) ?/ x1 E0 R. [) I2 |& U( N! s& f2 R$ j
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.( @) b/ }# H2 A% W& g" B% H6 t

9 R! \# x- h+ X) Z5 A3 l现在还多了个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/ w3 {# }, t0 A& i
基本参数:( q9 j( i; ^/ x- y5 t4 m. ]
jta | thread | managed | custom.Class
* G% i) o! x0 |% L5 j主要是配合. G) q$ _: V3 M' d; Y8 I
SessionFactory.getCurrentSession()0 w: z$ q" b3 s2 e  Y4 O* g
来用的.# v6 Z' F5 s# f0 T
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
# Q# u4 P$ x' xWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
& _1 y* t5 |4 b* \: i4 v/ X  Scontext.BeginRequest += OpenSession;
; ~" Z" h1 k, [+ L.Bind(HttpContext.Current, SessionFactory.OpenSession())
- r- y  L# k( q2 ]0 S7 f
3 K: }. R0 o+ j. H//do transaction
7 ~4 z% Z* q6 |, C0 S% GgetCurrentSession().Submit();% t% }1 p. n7 q. @3 N
getCurrentSession().RollBack();
' K# H3 @* X: V7 H) X9 Q...
6 s/ _, e& U6 ^3 U2 J0 ^8 G- gUnbind(HttpContext.Current, SessionFactory)
1 W, u. x/ _5 ~! S( L4 Z1 a$ y8 m: c% O% {4 u
context.EndRequest += CloseSession;: c& W( `( l& X  X  t
5 @4 @- u/ Q: L3 x9 P
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
大型搬家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-10 04:24 , Processed in 0.148150 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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