埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
+ p: X) e) e( Y1 e& G/ f8 {2 g- F* ?
. |" L) ?! [/ g! h5 ?% X- ]$ ^谢谢
# z, o" t4 j7 A+ g. R; F) ]2 K" l# P8 z& g$ m
<property name="current_session_context_class">web</property>
2 s$ h' C$ z" ~% [3 v' T+ U# o8 F<property name="current_session_context_class">call</property>) L6 P: a! O/ E" J1 C, r) ]" |  [5 L
<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 编辑 3 y& D. N4 G1 K9 s' h
0 ^$ i( w2 ?0 F9 b% B+ n
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
0 N. u2 R% X$ T
1 \6 C. y7 b3 \* I0 @) G% \& z/ M& q" ?
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
( `. L+ J7 _7 D4 Q7 T5 W$ @. Q  y# a

4 `5 P  i7 v/ n/ x5 f! D2 GChapter 2.5 Contextual Sessions
: W& D3 m) j; [5 B5 q% ~gamahu 发表于 2011-7-14 21:56
. W. m- J3 y4 l2 i( f
9 k* f: v" k4 x, C! s' X
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.: w9 @) P& G; F8 ~6 A9 @/ o
4 J! Q- }! F% R$ ?: n$ E' J1 Z
现在还多了个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
$ k2 m7 V4 _) u* }- z基本参数:
) z2 V- J# n7 }' Z/ N; Cjta | thread | managed | custom.Class( P8 I! W$ n' ]. {- e. ^
主要是配合" V$ p% S8 N% U+ ?9 a% [6 i
SessionFactory.getCurrentSession()
9 x  I  C$ A0 `& k6 K$ P来用的.
, t- e- ~6 U8 y1 ?Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
% Q( X; q1 d+ e) |) uWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
; d7 Q) d4 f# P, C) D! Bcontext.BeginRequest += OpenSession;
0 o7 d4 `& V0 c.Bind(HttpContext.Current, SessionFactory.OpenSession())
7 {; A9 G7 m8 w$ G8 p4 _, q9 M. j1 E8 j6 i9 N1 O6 K. U* m
//do transaction
7 A# s! `9 @9 V; a! [3 K% R2 xgetCurrentSession().Submit();
' K* w) |* k9 z  D4 }getCurrentSession().RollBack();6 J- i3 x8 E; i4 n7 \3 O
...# ^* ^8 p1 U, q
Unbind(HttpContext.Current, SessionFactory)
# d6 f6 z- [7 ^% i% U5 j% [0 g3 X  N' c" ~& s; V3 ]# z/ V
context.EndRequest += CloseSession;
* p8 i4 L9 v" W, P8 J2 w! n% l9 F0 [1 y2 P) S# U; ^! W# @
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-4 08:14 , Processed in 0.111946 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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