埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?( C& q7 R' ~1 ^% O
; f1 l, L- P8 _! ]) M/ A
谢谢
2 I& |& ^+ ?+ Q0 l9 ?) H: h5 C# `' O, M. j% ~! A/ Y$ t
<property name="current_session_context_class">web</property>2 A5 D/ @. u, H, v* b/ V6 E; P
<property name="current_session_context_class">call</property>6 Z5 I/ M' v, Y8 R( }/ o* ]! K1 r! N$ c
<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 v1 @6 U/ T  K
0 _0 C3 ]1 b6 q; J2 t. l' X  ?! N
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
( |" s! J$ J, p& s) n# D5 x" T$ m1 y2 V; W

8 _+ f0 _( E; n! A2 V5 k8 e' BChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf+ e& @, Y$ i/ F4 [
/ `  T, ]' C! U# E4 B4 U  T

0 i1 Z) m8 t8 g1 }- C- G& CChapter 2.5 Contextual Sessions
" ~2 e, E) w! G2 z3 Hgamahu 发表于 2011-7-14 21:56

2 p; y! S/ X: n: g7 D7 E8 T' g: v+ T# ]1 e/ ^) o
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.3 ?/ L+ R2 L4 y; O/ d  i( _

% X7 J. w- h( G7 g3 @现在还多了个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 G0 q& O- o; b& p; g( t! Y
基本参数:
; b2 ^( \# n' G1 k3 ujta | thread | managed | custom.Class
$ ]" e' T6 c+ n1 p9 }主要是配合
9 r. L5 j. K3 ]" Q( T+ D! a0 s5 GSessionFactory.getCurrentSession(). d1 p& N5 |4 u5 o, i" T- V
来用的.- i. L/ {$ k4 B' N( ^8 h; i, P
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,4 X- x0 A0 y; B7 L% j9 Z
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:: z7 x" v0 x; t3 t/ p
context.BeginRequest += OpenSession;7 s7 l& \, @3 T0 Q. v
.Bind(HttpContext.Current, SessionFactory.OpenSession())) c1 s7 i3 `0 i# {" r+ a. L9 x
0 ~3 `' c& z! y
//do transaction% T* h1 w/ z7 q, r; `# s
getCurrentSession().Submit();; q/ G" W9 E5 ?
getCurrentSession().RollBack();
# q+ {8 w( @$ H/ O8 b5 g$ \2 g  j...
) `5 v* p: i% s+ ?* V$ \# xUnbind(HttpContext.Current, SessionFactory)2 _% b; `6 I2 Y0 g) J% E- j* g

" p; J# l8 }0 b8 Y0 a. I, G1 ?context.EndRequest += CloseSession;
  s! [) H% Z, ?2 k, b; k4 T, B
0 o, {" ^# T9 U2 {0 w8 ?6 N 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-6-9 12:44 , Processed in 0.151794 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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