埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?6 k% u* t$ e3 {* G5 c! Z% Y( {

* e; C4 Z$ \3 {( h& c谢谢2 q5 C+ a: u6 j& a

: ^3 ~+ @( ]! W! E  C% I$ I<property name="current_session_context_class">web</property>& v; W) K- Q+ i% [, S# N
<property name="current_session_context_class">call</property>9 _' ~" R4 [  m# v) z7 N" o% ]
<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 编辑
1 ?& r3 C) k. Q  Q7 j. e
$ _: L% N; t) z+ Z6 J9 O% J$ APlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf  D# Q) o& `" L# B9 B, N
' V* P' J7 E! Z

, P# p0 o6 L- J/ a0 v: p# Z! WChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
0 `  q6 q% @8 v& d5 q, R7 @. |5 @: {, i% P: S9 \; g

% b  ]/ E5 e7 s- R( i' rChapter 2.5 Contextual Sessions
1 M3 l+ h' M5 tgamahu 发表于 2011-7-14 21:56
# W" B' s% e" O) M. t# V

. L) Y% R0 `/ F* L( V( a0 b谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.2 Y1 E4 t# m+ z+ u* w& C
* H8 ~: L" g- Z( Q& a1 n
现在还多了个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
2 _" z- G3 n* y4 d5 I基本参数:
$ ?4 P' h- W/ v7 F: |jta | thread | managed | custom.Class
! K3 S. n9 Z; b7 V: ~- D7 N3 S主要是配合8 s6 O8 `! G! h. i
SessionFactory.getCurrentSession()! I' A$ P( O1 Y6 I! Z
来用的.7 c/ \! l+ e) Y) n* B: V( Z
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
) e$ V2 k" }" i1 j8 R1 J/ cWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:9 t4 X! W# _: ~* g: A( w
context.BeginRequest += OpenSession;5 I1 x& z0 N. i# f2 H# v
.Bind(HttpContext.Current, SessionFactory.OpenSession())
& f) v& j+ K0 r
& j  N6 n# p' M; e( ^4 a//do transaction
# h/ V; Z, _( o- {- N4 kgetCurrentSession().Submit();
6 H$ p; ^- k+ I5 }' d) }9 E" {getCurrentSession().RollBack();# i3 d9 V8 \. s: `, K
...( S* E- {* X! L/ x9 h) z! T  y
Unbind(HttpContext.Current, SessionFactory)0 X! \2 {3 Q8 i( g$ W

6 `9 k% Z3 n* Z. acontext.EndRequest += CloseSession;
- f4 ^: D: w. x; ^! L$ V7 X' c% @$ B. R; f- B
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-15 09:03 , Processed in 0.080333 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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