埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?1 s$ q8 F& b' ~8 c. G; M) P7 w
& a% R5 N1 ]( h$ N4 P; [+ ?
谢谢7 G( }0 c. ^: [( l$ {6 a1 m9 W

, G* N' r& u+ H1 Y<property name="current_session_context_class">web</property>
: \4 A! I+ D# w7 i  y<property name="current_session_context_class">call</property>
. x; d2 b5 M& g. K<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 编辑
$ @! o8 Q' C8 \& D4 B& g: D3 {, U) m' O  y5 }
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf3 E. p% o. T* ^( N5 ~7 T$ A* ^5 E
4 ^" R( d$ e$ E& `9 W
. S/ X/ d* |( @+ {; K) S  l' K5 L
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf$ E1 J& w4 `, V/ d2 k3 Q7 @1 F

! t, U  s! V0 O) P: p$ p8 G( U5 \5 a. t* [% R
Chapter 2.5 Contextual Sessions; w& R! E/ a8 ]
gamahu 发表于 2011-7-14 21:56
2 i& Z$ e$ n0 u, @1 {

6 Z  P, x% w% }5 z+ E谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
' q$ o. [' d' m- B. x+ C
) j/ Y# G  ]" a现在还多了个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& I+ R) p4 N/ u( `
基本参数:
4 M1 S, e" s& I$ n- p1 n7 Bjta | thread | managed | custom.Class
; T) A- K# w6 Q  w主要是配合, D. V! Z: m/ e* B# R2 c
SessionFactory.getCurrentSession()$ N6 A% ]7 d- {$ l( A6 C
来用的.
: Y* [$ A4 Y6 l1 M7 y; e/ ]5 Q, YThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确," k+ }" x. [$ W( q4 G
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
# |8 g5 [3 T4 y* Hcontext.BeginRequest += OpenSession;8 }& t5 h* D6 v: h
.Bind(HttpContext.Current, SessionFactory.OpenSession())
( U7 ]) u: D* R, N" K: `8 j
. ]# X+ T" p* @//do transaction/ R3 ]- G+ p& k. A4 w
getCurrentSession().Submit();4 J6 G/ ~+ b4 J  f" ^6 |
getCurrentSession().RollBack();
) p! t; M+ o+ Y* c* R- l...7 W0 l9 L- s; z8 b+ Z/ W4 Y
Unbind(HttpContext.Current, SessionFactory), H; S& c2 v. [: s* A6 i

* B/ W( X9 M# h3 k# J0 P; ?( [context.EndRequest += CloseSession;* a) I* Q$ c4 U; R  l
! O) z6 P+ C  A6 m1 H5 T
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-8 23:11 , Processed in 0.363235 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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