埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
6 L6 B( h3 f; J* Z/ `- E' I) [" i) _' [) Z" q; A
谢谢
! h7 ~' j3 p, u/ L5 \4 h- p& g" o2 \$ v$ W" Q. |
<property name="current_session_context_class">web</property>& V( U; A* ^! ]$ {
<property name="current_session_context_class">call</property>: A& n) s5 j4 y  t$ F& W, 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 编辑
) @7 ~# ~, }; d1 q. A4 U1 t
: X7 P( P6 h$ C: c( pPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf& z; d' h3 c3 y4 T5 I
6 w7 y4 f& U" {* p" @
+ w$ L9 K& r$ G- G) B. C! p
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
. l3 B$ H6 H/ m! c4 V  S
6 {- k, x, w1 K9 v/ Q* J$ B  F$ i/ p0 R3 L2 N/ S+ P
Chapter 2.5 Contextual Sessions$ T# z. e0 \7 D2 V! r/ T3 h, E* L+ ]
gamahu 发表于 2011-7-14 21:56

4 v, y* l/ ^9 D+ P8 `3 q
* C7 y5 J; y# F; Z, U& V谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
3 E7 Z& l* L0 l" R( H6 o) U% j  h9 H( ?0 w/ f7 s
现在还多了个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
0 M# {2 {2 P2 m: g, Q2 H基本参数:  K& F6 f3 @' G+ t0 q& e, R# c
jta | thread | managed | custom.Class
' ?5 x2 d  i( X+ a主要是配合
  X3 a7 k: l4 n+ _' \- B1 K$ Z3 ]SessionFactory.getCurrentSession()
* w/ W* {, i& f" f( b来用的.5 F" X$ C% |4 M2 [! u
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,1 J* L% ~7 _8 c/ e! ?9 S
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:) i- z% P. Q" p- G) ^4 W* X
context.BeginRequest += OpenSession;# A$ l& l2 y6 U9 `% r& r! K
.Bind(HttpContext.Current, SessionFactory.OpenSession())
2 ^6 J* \& \" K
/ n) k! F/ Y( d/ q. u: ~- a5 e//do transaction
3 ^5 v, \+ s# N5 Q9 FgetCurrentSession().Submit();4 D( f; P9 t, \
getCurrentSession().RollBack();) W8 d* x$ f* ]5 s/ a
..." |% E! D- s4 ^
Unbind(HttpContext.Current, SessionFactory), q# A5 e3 o4 A0 W  I% X# N

# ]% W2 K/ r! |8 v& o5 Fcontext.EndRequest += CloseSession;
$ p2 A0 @* b0 e7 C! \+ A8 l4 C0 r4 R5 d& C
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-9-22 12:44 , Processed in 0.174827 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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