埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?2 r8 d, w& s. v1 x# Z
3 Y* u* K7 [3 `' O6 J; s6 P; w
谢谢; p, g! x! i4 M- G" m1 H) j
* w3 O. v* J/ N- U5 s! ]% Z
<property name="current_session_context_class">web</property>
) p* k3 |/ A+ _9 e3 s. n0 `<property name="current_session_context_class">call</property>
8 |8 i8 @) N6 A1 r& s<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 编辑
0 @6 p, C6 K- p$ j3 T7 s4 q. \2 A3 X4 V" N0 z
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf- B+ v- t4 \# u0 Z9 ?5 A" Q
+ [: c0 Y1 {- p1 m- a
6 u( p* e4 ]6 a; `0 `
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
' K9 b; Y8 O& Q, k& Q6 A! a
$ g4 m5 p% L. C5 n! y& A' o" r! R: n, v, V
Chapter 2.5 Contextual Sessions: ]( S( U- R" y; M8 S6 o6 F
gamahu 发表于 2011-7-14 21:56
! M6 ^( `5 D$ G: u
! u  H, m) G+ S1 ~, O5 I
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
1 c1 Q( L- r& I& w
6 V" Z* c$ j( |# E9 f: W0 O4 k现在还多了个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
3 y  F% D! Z- @+ o2 B基本参数:6 b2 E) X3 g$ x
jta | thread | managed | custom.Class
+ D% A/ V0 p7 `4 D8 q6 ?0 R+ r主要是配合" Y' l# L3 Y. v/ s( U  l
SessionFactory.getCurrentSession()
" D1 w: Y6 y+ @! t; F. x1 M- k来用的.7 o0 m- r$ U# M8 e! q6 g+ D% S; c
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,: N2 N$ X) T. `" m1 G; {+ y7 G
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
, _5 P2 |( E6 p& L- zcontext.BeginRequest += OpenSession;
1 L' i: L- \* {9 r4 Z.Bind(HttpContext.Current, SessionFactory.OpenSession())9 T0 z4 ]7 e, C2 I6 F+ j% ]

$ w: [& X4 r3 k# ~//do transaction
- z) ~: t8 X- u1 rgetCurrentSession().Submit();9 L3 X/ i3 t7 Z- K
getCurrentSession().RollBack();' [9 h) N0 k" X9 P& p" T6 N
...9 y' j' P- s3 ]* ~
Unbind(HttpContext.Current, SessionFactory)
: n; H' f8 z8 `& D, _
+ P3 }, z- Y" C* F4 \  @context.EndRequest += CloseSession;
- V! z1 u6 f! n( g7 t8 F: O
% q6 D5 n" A5 L# y; \+ w& W 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-5 15:32 , Processed in 0.083605 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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