埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
; t3 a- E% D/ Y$ s4 i! U' G* g  B, R) j
谢谢
6 Q, B* m+ Z4 S. x7 Z) u; N& h0 i  s- t$ \1 [% w1 X4 ~
<property name="current_session_context_class">web</property>' s2 ?" x, o% m4 R) n9 `1 `. i
<property name="current_session_context_class">call</property>) E8 `* }9 r  H; Q6 o4 X+ ^
<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 编辑
2 M. _$ `6 J2 S( }; N* V
1 F/ @; a5 K( M3 y' Y3 \, APlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf. m8 ^/ [1 i3 f0 _2 L: A
% j, C% X) `% p8 N# c
$ Y. L/ v) I9 _' P4 y% H) W
Chapter 2.5 Contextual Sessions
大型搬家
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
6 w  E9 k0 N. q! U+ q9 i6 D  @5 l- ]8 z9 ~1 n* x9 g& B

: z2 g% E) r, A3 x; U! {5 ]2 OChapter 2.5 Contextual Sessions' J( k+ b+ v8 u9 l. |# l0 m( W
gamahu 发表于 2011-7-14 21:56
. S8 j% Z) }9 R% S- N

% x" q0 T. }; g8 P  E* r) ]3 i/ C谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.0 A, a3 c  i% I* p

& d/ j6 C, j1 C* j, m5 x: u现在还多了个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/ _4 H# e0 n4 \" d1 J8 `0 T
基本参数:
: A. ^) X* N1 T$ R6 l1 e3 w9 ~jta | thread | managed | custom.Class
7 f4 F; e& u& a1 y% W/ P) G主要是配合& E7 q' ^. `) h* n
SessionFactory.getCurrentSession()) a% f- j) M# j/ q0 L3 G$ M
来用的.& u' l! {) }# A
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,/ x5 P* s9 e& w9 ]0 Z
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:- h9 G: v8 j* W  H
context.BeginRequest += OpenSession;( `/ G$ O4 _* l0 I
.Bind(HttpContext.Current, SessionFactory.OpenSession())& t8 M- `/ W3 z3 t- I  s) w5 y0 ?/ F  u
0 P8 C4 r8 y6 l# A3 L$ y
//do transaction2 ]$ A& ]5 h1 l9 u& Y- g; j
getCurrentSession().Submit();! r+ v' z$ B/ d9 P: x4 J. W
getCurrentSession().RollBack();( M' _8 _: G# `3 C
.../ L# K7 I% H" V& \
Unbind(HttpContext.Current, SessionFactory)' E6 v2 c8 A* }: y' p( X
. B- Z3 ?3 h3 z" ]5 b
context.EndRequest += CloseSession;
& L+ a+ c* g9 A  q. L; M1 Q' |7 K- E4 z6 H6 A4 ?: ?( ?
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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