埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
' i2 O& n2 r% o- v% v3 o" G- B1 y( [( A6 U6 p4 B
谢谢
& r+ i9 L6 D1 W* }
3 @/ K" R6 h2 h6 ~5 @<property name="current_session_context_class">web</property>
9 V2 t2 K0 S! A+ ]% p6 }/ L<property name="current_session_context_class">call</property>' X( Z- @+ ~- J# S, }. Z
<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 编辑 0 j) G( |& q$ J" _0 x
& m6 d& D$ x3 K2 L$ l8 e6 m  t
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf; n3 |- n& J% v2 c$ ^2 ^

% n) W$ [/ t  M' O0 \2 y# G) ^% t" G1 T5 D
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf3 s$ Y& m% V9 @
2 ]4 i5 y- @" p4 W% o

7 v2 C' P9 [9 Z- Z4 H6 S5 \Chapter 2.5 Contextual Sessions
: v& W' n4 x/ {gamahu 发表于 2011-7-14 21:56

( P9 j$ j9 V* a( Y4 F; k# P& V  D$ Q8 B* x4 \3 l
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.5 U( M8 {- W3 j2 [( P/ z
( t' E6 d+ }2 ~1 @
现在还多了个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
# e- [. o' O+ b6 g: r基本参数:' O1 V- s6 t/ |2 A9 ?2 j) h/ b3 q, @
jta | thread | managed | custom.Class
9 F! q) ?$ A+ c0 @主要是配合
5 y7 B7 d4 Z  d% n0 OSessionFactory.getCurrentSession()
8 A7 x7 ]+ O: H0 A0 r+ M4 n来用的.9 j3 J& Y6 c  J5 s; `$ }, O  y2 r3 N
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确," T" w. @+ {" |  V
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:# z( L; x, J1 `' D  s0 X8 x
context.BeginRequest += OpenSession;2 ^6 X) u" K2 f0 }& R3 B1 s
.Bind(HttpContext.Current, SessionFactory.OpenSession())
& D0 i: V! H) M2 d! }$ H6 J. ~; o3 c. ~# a- p: h' \
//do transaction5 ~, _, G6 k: D+ R& x  y( D4 s
getCurrentSession().Submit();4 c" f1 Y. y# p5 m6 P# ^6 d. w
getCurrentSession().RollBack();9 F) ]% M6 N6 }; I& N+ |5 x
...0 O: ]5 A$ H) L7 y/ Q+ D3 e
Unbind(HttpContext.Current, SessionFactory)! a$ e! k3 _" {7 i) A8 E

/ E& R$ F* D* L% D5 I* K: g# icontext.EndRequest += CloseSession;4 U) m8 Q/ B( M" ]0 V$ h

9 I- Q) S) \' B$ ^ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-30 02:57 , Processed in 0.155657 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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