埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
7 ], H/ w2 \5 W/ h) m' q8 L4 V" D  _; `' H6 y4 F
谢谢# e: b+ U9 F& A3 y5 p

( z6 r/ P6 T/ W* I! S7 |0 c<property name="current_session_context_class">web</property>
% e+ V, ^$ `2 h: K+ ?7 m<property name="current_session_context_class">call</property>! R5 }& V# h3 b
<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 编辑
4 t7 l( z5 t3 v3 ~$ F* f( `- e5 l- D$ s$ I# `. Z3 a
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
3 }0 _) l, g- C5 G: [  s
5 @' ]  q/ n, t7 o$ T$ ~. V
& [* K  S1 s; ~$ O3 N, I0 HChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf% ~  D2 n* a" |/ D3 W0 ~

+ U& U+ @8 x$ z) I0 z
- b# |2 G3 R7 CChapter 2.5 Contextual Sessions
! G, Z% f! Z* }  ~  E) H4 \- y9 J; kgamahu 发表于 2011-7-14 21:56
( g- ?( t+ ~  x" T# L
5 z8 h0 k) d9 [. x5 D+ [( r' |
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
1 c& ?- q9 Z7 ]& m7 ^
- V+ t, o  @  G# h& }现在还多了个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
6 k; q% f- O3 f& |基本参数:3 O6 T) o" n5 L; z# `  u
jta | thread | managed | custom.Class
$ h3 l+ T. X- B% N. e" u. `4 p; @" S主要是配合# o' }, g7 g* A9 N* B
SessionFactory.getCurrentSession()
1 _7 Z5 q# @* e* e: k$ H; D来用的.
3 d0 g" W$ D6 m7 B* q5 AThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
, R7 \" F: B5 A, I: _; vWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
4 h" c8 ]% _6 y( n5 mcontext.BeginRequest += OpenSession;
* ~5 C( n3 s. ~  @: x1 i.Bind(HttpContext.Current, SessionFactory.OpenSession())
+ E' |, ^% `( \0 M
# K0 c5 ]$ f# e! n* o& n//do transaction
: j; z4 H! n4 Y* W9 P: a0 ]getCurrentSession().Submit();& v( r0 r; W' x. I
getCurrentSession().RollBack();
+ b$ K" p. J0 m7 ~...
4 |: P  [7 h+ L1 c: i3 m5 dUnbind(HttpContext.Current, SessionFactory)% w# d9 G% M  O5 W( \5 |

' V& ]% Y. U4 z) Zcontext.EndRequest += CloseSession;
8 ]8 j% @( C6 `# \/ e
6 d9 a" n/ z/ E5 T$ l& K 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-16 11:43 , Processed in 0.123935 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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