埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?# c3 e1 n$ ]$ U1 o: t
0 p+ U4 h1 T" W" Z* M6 F
谢谢
0 ^" w/ S: q1 J6 k. k
" N0 F$ f) M. M- E. N, I* V<property name="current_session_context_class">web</property>
% }1 P) v4 E4 a) k  A" V<property name="current_session_context_class">call</property>" i; r( A4 i( G/ M
<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 编辑
; f* ~1 C3 Z" Y; T6 r+ f7 b3 h9 T2 {' J/ n* z
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf: ~* i/ ~' y$ m6 @2 {
( T+ [  b; F% l' k) C
* K  j* |: w: ~% V
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf: Z) ~0 H. L$ C1 f4 [
" C* t1 j+ q6 C  E( d0 y( U. h- }

. \9 [' b& B5 y/ ^/ n' WChapter 2.5 Contextual Sessions5 [1 F$ R4 a  @! T
gamahu 发表于 2011-7-14 21:56

8 d' I- Z8 W! R" m4 r* [! Q
# u6 C% D2 @1 u9 v0 j. F6 d谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
- l. p, F$ q* Q; t! p, ~" n1 x" y4 b
现在还多了个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. v$ i9 m% x% |4 W3 K" I; K. N
基本参数:
! t& z7 P9 x( e& D: r, Fjta | thread | managed | custom.Class
8 u  C/ N/ ]8 {( t" e1 F" y6 T主要是配合! n2 B8 j7 @9 ?2 D
SessionFactory.getCurrentSession(). u9 k) X4 x+ M' b8 m3 m/ f
来用的.
! K5 X' z. `- z6 H. JThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,9 S0 [! m* S8 h, s! i6 t& ^& \
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
. C8 k$ \. e1 O6 J# w. d5 q1 wcontext.BeginRequest += OpenSession;
) Y! }5 [0 g! p5 a" h. o$ {.Bind(HttpContext.Current, SessionFactory.OpenSession())9 t" a; }( L! Y. j  i' z  [
; [4 ^/ p, V# _4 V0 J& `+ z
//do transaction
  |3 |* x5 i/ E' _3 J# s5 ]+ y8 w- VgetCurrentSession().Submit();
) i( S$ C" V& g* {; V7 y" F: tgetCurrentSession().RollBack();& U  f+ s( G- s+ Z& o1 N1 O
...
/ W0 b  [8 E( Y$ g8 A9 h7 D1 DUnbind(HttpContext.Current, SessionFactory)
, x% \* s2 p' s+ r: |0 [8 G4 C. I5 Q  k; L9 c6 K1 t
context.EndRequest += CloseSession;1 ?! v/ T" c3 Y

  @0 R1 g0 e+ O7 n4 Y 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-13 19:41 , Processed in 0.196811 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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