埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?6 l# Q4 x$ @( D6 |! @
% F6 p5 a# I3 a5 Y" y! v% r
谢谢8 k5 H6 }7 L  _3 o, q% v, |' o% S

* c# b! R) E9 x+ U7 e<property name="current_session_context_class">web</property>: J+ J2 s3 g2 Q5 \7 q7 x9 ]6 z6 H
<property name="current_session_context_class">call</property>6 A7 P4 _( k) H
<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 编辑 : n, O2 C4 A, e. U# `
3 V) f7 C) h% k& S
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
' b$ O# _) x/ H  l5 m& P& v$ t# |5 [
) ?, \( v' J& u5 n$ I- {
7 U9 X% X5 k- f! K* u6 UChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
# c! K5 d  n2 b5 h+ e1 v( F, e: s$ x3 V3 O

/ Z1 G" z4 ]* s# ]' j  CChapter 2.5 Contextual Sessions+ j* J) k' j' R3 ^
gamahu 发表于 2011-7-14 21:56
* a( [* C* O, i" S

) `+ C- h3 X2 _( F; |7 f% h7 ]谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
' F- a4 @8 @' z
" U% ~7 }& o1 w/ e3 E现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what1 j0 j' {. V7 r# m2 U$ [6 c4 J
基本参数:
5 h7 |  [( j& ~4 F5 f# ajta | thread | managed | custom.Class
4 W) B% z' ~* `* ?) b. ?" ?! f主要是配合
3 u+ i3 _' [6 b: y6 H# iSessionFactory.getCurrentSession()( ^' s9 v' o: x4 {& l6 n9 m
来用的.( R; ^. _! f* q: X. t% \
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,; |6 U6 F: h# I3 A# }
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:% Q: k' N, H" _  P. U
context.BeginRequest += OpenSession;9 \6 F) u# e: K# _% P0 j  O
.Bind(HttpContext.Current, SessionFactory.OpenSession())
9 |/ x! u3 F$ ^* s- }& P5 I7 u
; v$ H7 m& Y" C4 ]//do transaction
, v: [$ D/ l9 QgetCurrentSession().Submit();
" x0 n8 s: A% o2 G/ R9 L7 n2 A1 agetCurrentSession().RollBack();' v3 |/ i( T" D
...
+ e" V! k: Z4 s5 n% F, LUnbind(HttpContext.Current, SessionFactory)8 f- G: D: U- W% j8 K
3 T" y. |) O6 H% P+ M2 R
context.EndRequest += CloseSession;
$ n0 J% X' o3 p4 B' I
8 k  k4 ]/ q( z9 _" g: u( A  p. ^ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-16 23:16 , Processed in 0.076958 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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