埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?, {. V! V. \) T. b
% y( Z! l+ ^  A; X0 _
谢谢* h& }$ v3 M" |! A# J. f
$ x  ~9 B! a/ r% J4 G
<property name="current_session_context_class">web</property># v# e+ w0 a5 c3 V
<property name="current_session_context_class">call</property>; m# t& S0 q6 P' g3 v  _  g
<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 编辑
5 [" Y+ t! R& ?' X
3 w3 W9 m* R& uPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf6 M/ v, |6 F2 y6 N0 w+ z  s

" P3 c/ S2 r0 |* R1 }: d8 o0 F0 E% L; o& M6 n% Q1 S
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf, v, x7 W. ?" F3 q- N. y" F% g

7 A. T& o: Y/ X0 e# {
. o8 S& ?  t2 c2 x$ iChapter 2.5 Contextual Sessions
: K: n& v1 `6 r3 O* ggamahu 发表于 2011-7-14 21:56
4 ^) K3 H' ~+ o& a  o
- u" P( z9 r- V0 r! t1 g
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.. x9 f/ Y/ q6 J* @: @
4 ?3 m5 p4 \6 K# o0 h- U- q
现在还多了个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
+ C' `& n& t3 P, v基本参数:
4 D  Z/ N! [* D2 ?3 \, }0 c& Kjta | thread | managed | custom.Class# J5 K9 s2 m$ q" a' [, q: h, _
主要是配合# R( O) i; a" W6 P2 P  }
SessionFactory.getCurrentSession()
( p# |7 ]$ [# f0 b8 \( ~来用的.% t9 X# n# C$ S& M: Q2 Y( {4 g  a
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,$ p. D( R* U& |) c" Q: z
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
! d; }$ Y; d$ Y9 k9 {4 f& \context.BeginRequest += OpenSession;
% A2 e' F- r- {# t5 X2 ~.Bind(HttpContext.Current, SessionFactory.OpenSession())4 w6 x/ s2 ]3 |. u+ z5 s) I

. V% w  b: z( Q" @* Z" {2 l//do transaction1 u4 C% s/ x- o" z
getCurrentSession().Submit();5 s/ c/ O4 n+ o5 `9 R2 Y
getCurrentSession().RollBack();5 k% U8 J( J  G6 U6 {8 U; ~9 w
...; ^% w3 q, J7 q7 F5 [
Unbind(HttpContext.Current, SessionFactory)) n$ x5 h# I3 H, U, K0 A3 S

! A5 h8 H6 ^, D0 g( Kcontext.EndRequest += CloseSession;
2 K$ \% z5 ?" w9 i/ V1 _! M+ R
7 W, o( `* W' e/ L7 }+ m( E 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-23 00:19 , Processed in 0.114691 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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