埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?, r+ T6 N' [2 x3 [/ `3 q
0 n$ Q& c3 z3 G1 P9 ?/ Z! l
谢谢9 N" I- {3 c+ J* ~1 Q
, ], O/ \0 \, K7 C
<property name="current_session_context_class">web</property>, V2 W6 v" m5 j% O5 U  X1 R( L# ^
<property name="current_session_context_class">call</property>: x& H, q" E8 [
<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 编辑 9 ^  }- e: T0 Q" Y9 q' ]
( T- S- P( V- M8 p+ [4 i6 s( F7 A
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf( V3 V" Y! _. G" E7 }$ X
. g" A$ U% w( E3 Q7 b2 ]+ c/ i
) _, M# h4 ?: n; W9 u% M
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf: ?/ Y8 n- c, }5 v  y

4 t) E  y$ I& S" ^1 r
( H+ R2 T( H( ?, N6 @9 |/ ~' nChapter 2.5 Contextual Sessions# T5 q" C; [3 D- w" p
gamahu 发表于 2011-7-14 21:56

7 w- A9 e* }& M. n8 C
; h  N; B" T6 a9 x5 |: B2 ]1 H谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.% d2 C# H% ?) W/ I+ ]7 Z$ c
  @! n/ F1 m4 h' E# e2 W6 _
现在还多了个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
# z+ A, z; ~+ ^0 ], N/ q基本参数:
1 q: _  K& U3 Z" Y4 G* L0 fjta | thread | managed | custom.Class
& M, I: w8 j0 n5 |& l3 V5 B主要是配合
& i. a' L) `# U3 |# ]4 tSessionFactory.getCurrentSession()
( u  n4 ]; S) @8 o9 r# F! D来用的.8 q  m* n4 z  N9 ]: B
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,: m: J- n& Z! m* g1 L: H; x
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
5 v& |* \: d( l6 Acontext.BeginRequest += OpenSession;3 v+ n# n  u# j
.Bind(HttpContext.Current, SessionFactory.OpenSession())+ a: z- Z9 [& i9 Q# c

8 l/ |! \/ q2 j& ^- V//do transaction* F, j# I4 @0 m8 A
getCurrentSession().Submit();
5 x2 T$ A2 w; D; [getCurrentSession().RollBack();
; L; ?6 [% C) k( c* o7 r( K' w# S...( e  o2 Y5 X( p6 K5 g; [, {7 c
Unbind(HttpContext.Current, SessionFactory)/ |3 |. a0 B( V! H  d2 Y
" R7 D' |$ G$ O( k
context.EndRequest += CloseSession;. Y8 o$ q# g) R: X' P+ y/ e7 h6 w
6 ?# K3 o' d9 @9 N
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-2-26 01:01 , Processed in 0.137348 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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