埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
2 t0 [! {* ]. ^. d+ `+ }2 }/ s5 d8 h6 C" Q- c: w% x7 @: f
谢谢3 l% d) S( H: A& Q
8 O, r) P  V9 I. U6 p
<property name="current_session_context_class">web</property>
: a8 r4 |9 @* d+ ]6 }% j9 O% [<property name="current_session_context_class">call</property>
2 W( L# _) a# o3 V% P4 q2 Q8 ]6 {<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 编辑 & ?; P8 b( d- c: W; H  Q% F: Q. w

, u7 ^2 p7 p& \, e! s3 ^* O( PPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
2 c0 \) l' O3 E: R3 \0 M: R
6 q; D7 ?0 u) Z9 w
( S2 b, k: |. ?/ d; Z; X% XChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf: O, T! r& @0 `/ L$ [

0 e/ |# B- r/ d2 d8 ]' Q5 c3 l* l, L1 b+ c# Q! L
Chapter 2.5 Contextual Sessions* }: S; E4 z, A6 ]) E, `
gamahu 发表于 2011-7-14 21:56
: P- I1 _! o5 z" C9 w
  v- b$ ]8 d1 A: e/ a/ n
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
3 h( e6 Q; c* ]+ h( z& H- S: s
9 R; N1 V6 n! U6 V! n1 e4 S) W现在还多了个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  q3 R+ V! R) x5 e/ [
基本参数:* Z5 p, ~( P% d' R5 \
jta | thread | managed | custom.Class/ `) ]: Y. e/ H' J" Z% b: M( j
主要是配合
! X# k; z! L8 N& S6 USessionFactory.getCurrentSession()) M0 ^4 o# H6 A4 U# f
来用的.
# h. ?! z, Z" A' E/ kThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,$ X+ X$ {$ z% N
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:, R: _7 ^8 Z$ D9 k2 K
context.BeginRequest += OpenSession;
: ]9 F% S$ \( K( w+ @& E2 Y4 N8 H* ?2 ~.Bind(HttpContext.Current, SessionFactory.OpenSession())
' B* ~6 \+ e1 v% v6 L
* v/ M  N) `4 y( O) t//do transaction% _+ ]& z9 Y3 ?4 W7 C: \
getCurrentSession().Submit();
0 A; c, e$ m+ o/ qgetCurrentSession().RollBack();& X  ]9 Y( F3 x1 t- p: C9 F4 j
...' x8 a* W, p6 Z; m& w" a9 N
Unbind(HttpContext.Current, SessionFactory)) D7 c' U) s% e5 q* J
3 d2 h" ^* Q# H- m8 g7 s
context.EndRequest += CloseSession;
5 C# V3 G7 ^% Y. f8 _, k
" T8 [5 V8 d- ~8 z% j$ | 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
大型搬家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-17 06:58 , Processed in 0.136364 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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