埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?. g) w; l* x  b' |6 B* p( G
* `4 X% V, K/ `* _" C
谢谢
- S9 i' c) |* \0 \: A$ W/ U+ E5 T4 c. Q
<property name="current_session_context_class">web</property>
7 C% \( L- L1 Z2 k; D( X<property name="current_session_context_class">call</property>
0 e) P* o4 u  S9 b9 B) {<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 编辑
7 F2 G8 Q8 u; ?: |! y1 t2 I' I% a
0 y& u0 _2 j  H$ d: n+ u2 TPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
: v" g; {, z" K4 o1 E3 `! Q
' ?5 H9 F% Y- F5 W) V2 b
& s. f# Z" @9 Z/ `Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
, \) }( r' H; u: X* s3 ~
$ ^/ X4 j" A* ~7 {( B$ V2 w
3 ]  V7 @# `( m1 Y. D4 cChapter 2.5 Contextual Sessions$ ?1 n# j9 ]* s1 {9 t
gamahu 发表于 2011-7-14 21:56
; Z- a' Z4 K2 d
/ m' i+ K+ e  N
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.; N1 S4 @" V; A  \2 Q

5 t8 g' |: z& A# 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 what3 l+ d3 _4 K$ U- v+ ~; C+ k0 H
基本参数:
  w: W* q' k1 x0 ajta | thread | managed | custom.Class
: E. I. l7 R, R3 g5 _. Q主要是配合
5 ^6 @/ N2 P' gSessionFactory.getCurrentSession()( `* r& S4 s9 Z5 l, q0 m
来用的.$ q% H# N; ?# R+ t% [! {
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
- d. C+ X, W. B& n9 v9 h0 YWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:; ?$ C1 J3 M; ]
context.BeginRequest += OpenSession;
7 H5 Y3 A( h/ _.Bind(HttpContext.Current, SessionFactory.OpenSession())+ N3 R1 b5 C! s1 `5 t

0 O) C# ]0 F+ e7 R  ~2 c* s//do transaction/ y% M  {7 {9 O; m
getCurrentSession().Submit();
2 E/ v5 t$ ]+ u0 b7 A: y# X" jgetCurrentSession().RollBack();% ^) b- R8 _, s5 ]5 t  U
.... |# p. f6 ~# R# ?
Unbind(HttpContext.Current, SessionFactory)
8 j' t% g- \0 K" ]0 `- Y9 J1 [
' ^/ u! I; g- H* Gcontext.EndRequest += CloseSession;
% o4 [# m1 H7 f0 B
$ q: {6 l  W/ }9 V6 {6 o: f 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-13 00:32 , Processed in 0.095767 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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