埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
/ c" {, m! W: P) l5 r* v' X& d
谢谢
5 U6 @3 V+ H' o5 |) ^5 {
3 C7 k% k  x4 H1 i" K4 q" A. }<property name="current_session_context_class">web</property>* Y$ m) W" ^1 z$ b: `# B# P! m. h
<property name="current_session_context_class">call</property>
% L/ x% t7 M/ o  S0 h+ N<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 编辑
. c; U2 p/ G* U8 h& g! o5 I8 P0 s/ O
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf/ C  t1 j6 D0 |/ ^& s
5 A& {5 r* f9 {; n8 g0 P

: S# [! Z6 A. ~  B6 c0 NChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf* m( H" V- c5 d

( f/ L4 n) Q6 b0 d- H) N, N- |7 {3 t* d4 U, T: V' `" ^
Chapter 2.5 Contextual Sessions
) ?/ R/ q4 `8 X# u9 m  @6 c1 agamahu 发表于 2011-7-14 21:56

# ]3 z8 f# S2 T7 f1 o& b% Y
$ G/ a1 I* z. `& W3 y  |谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.2 h. t" U$ ]7 Y7 n
/ b0 w3 t/ _" z7 r* F5 \6 E# R
现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what7 m) V1 L& I5 x- Q
基本参数:# Y/ J( d+ y  i! X* Q: ^
jta | thread | managed | custom.Class
2 w' Y# p* ?# C' M9 M0 t& s主要是配合& }  K/ q8 g! i" b" z0 [+ i" a+ E" y
SessionFactory.getCurrentSession()# N8 k$ d  t* J6 e; P- W# U
来用的.
, Z0 n; Z# D$ t! c+ f# r/ g/ J8 qThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,0 j8 w1 K+ A) y" }
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
( c3 d& D1 x: e5 K% ?' D9 lcontext.BeginRequest += OpenSession;
7 g! a6 B3 q# a/ ^8 p% s.Bind(HttpContext.Current, SessionFactory.OpenSession())
/ a3 U: I6 Q+ y- ?2 C4 H2 o: }# }' k
//do transaction! h. F; y; g* A( G
getCurrentSession().Submit();
9 k! J0 y4 F8 B* d. \0 O$ |  H1 X, ]getCurrentSession().RollBack();
1 v9 }4 s1 O* t) M- H9 |...
! \& J% x9 I1 I8 o* l% PUnbind(HttpContext.Current, SessionFactory)+ o6 h9 X6 q/ R9 I) P! [

0 w$ S0 A& V! y2 Rcontext.EndRequest += CloseSession;
' ]4 @& _% f& ]8 h$ l0 q, d. }
2 G+ t# d0 n9 i* F4 u9 i* q& P( I 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
大型搬家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-6-11 03:32 , Processed in 0.107233 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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