埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
" K! u3 G: T& `4 P& X8 E. N  A; |2 a! o) m" b/ _* I# U6 \9 o
谢谢
8 K" C8 N) R. p* A$ v: @9 {# z
# z: [0 ]0 B3 m% S2 d5 B8 F<property name="current_session_context_class">web</property>
5 z! }& X# f7 R; N<property name="current_session_context_class">call</property>
' p/ W6 T( V' z6 F4 z<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 编辑 $ G/ ?5 |$ [9 _- }% l4 ^
1 c% S, Z1 Q8 I2 @
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  p& g, [* Q* @+ C
+ {8 f) I  R; S
& n* _+ u4 i' }( y1 m& D+ uChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
* @. u! w/ R: e7 [- j
. m4 U9 _+ l: n' r: Y3 p$ o( K5 \/ W* E/ Z4 h" @9 a
Chapter 2.5 Contextual Sessions# e$ t' |3 ^4 P9 d
gamahu 发表于 2011-7-14 21:56
4 F" y  N5 T: j/ S; Q" R+ a, {

2 ~1 x  a7 Z* t$ S- y% K7 @谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.7 S: o" ?+ \  E; e9 ~4 e

3 T- G6 l, R+ d8 H. D( [* E  X& A8 m现在还多了个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  z7 P/ J& i+ D3 M5 u
基本参数:
2 h6 s9 G. N1 P/ a% \6 f7 Bjta | thread | managed | custom.Class
0 x+ j, h$ Y! Q. S: c5 K主要是配合& I- [+ |* l# g$ s/ Y. T1 D" d. [2 }
SessionFactory.getCurrentSession()  ]  [0 S, {, {3 c1 [$ ]# A( [5 `
来用的.; {. R- Y5 c, X! a* X: H
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
9 {% ]5 @- `# O8 G( c) n- ~Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
+ L1 _1 R6 J7 f1 a) Bcontext.BeginRequest += OpenSession;+ K$ t7 [2 a4 v* S3 U9 ~, S' W
.Bind(HttpContext.Current, SessionFactory.OpenSession())
3 u$ ]. h/ V9 \
6 u/ @% A; b- e. T% p# p% w//do transaction; D0 K4 P* \) T3 o- W
getCurrentSession().Submit();! x  y0 g, D. e$ t5 i% U# Y+ M& x6 y
getCurrentSession().RollBack();+ c6 N1 ]8 }& F  ?! e+ v$ `
...0 @: ]2 B. @- s5 L! M7 {- q
Unbind(HttpContext.Current, SessionFactory)
: V, b+ B$ K7 H* B1 P4 w
; J0 F3 F0 X0 j7 m! q" qcontext.EndRequest += CloseSession;( M( f8 Z3 @9 Y7 ]
0 o6 M9 |3 n  l( g$ B" T
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-11 12:31 , Processed in 0.114462 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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