埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
) v- J0 Y5 h# g  F: f* ]9 Q* u. p& ~4 h/ A' y
谢谢, @; }# v/ \8 }# D( K  o
: ?+ `9 p; u1 d3 @
<property name="current_session_context_class">web</property>5 G5 ^2 K( B4 W2 L
<property name="current_session_context_class">call</property>- Y0 H9 H/ ^1 @- \4 p+ T! q
<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 编辑
* q% C& }- R; @$ C, v% q/ U7 V
/ \. b  K$ T3 d% G) t+ jPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
) {& @; g. k  F& E
& `' ~7 n4 P1 J( U( x$ H% y) c. C0 \; A  a. k8 _2 h
Chapter 2.5 Contextual Sessions
大型搬家
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf; P; X$ w+ w: Y; k; F
+ X' U8 F) b* J

* v( {' {4 h7 u5 u- nChapter 2.5 Contextual Sessions6 b4 c$ H  D* l" z! Q3 |# C6 P8 @
gamahu 发表于 2011-7-14 21:56

) Y( y: ?5 M$ I8 u& X8 V/ ~6 _' ]0 _6 W& z
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.3 \9 n6 S* I$ @: F0 }7 V3 m3 o

6 b9 C3 C  a3 o) y$ [* O+ K现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what8 P$ ~" ]5 y. Y1 Y2 U  \
基本参数:
4 v3 U+ k; j  i4 b5 e  i7 ]jta | thread | managed | custom.Class- l+ [7 o* r" ]' d& u9 U0 S; R
主要是配合
. t$ T1 [- K9 d  `5 f+ {SessionFactory.getCurrentSession()
3 S2 W, y. t& c来用的.
* r, p& _. N# v+ PThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,% P: y$ }8 e, `9 c7 S1 b& V
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:  ]  E6 Y- T/ ?% M8 C+ s
context.BeginRequest += OpenSession;; Z" l& F/ B2 G" g
.Bind(HttpContext.Current, SessionFactory.OpenSession()). G4 b% L5 I/ a  B. [. l
% r( [5 B6 v4 q* K( b. u
//do transaction) c* Y& k, ?* y# w5 S
getCurrentSession().Submit();
4 W) I4 [  J: M, YgetCurrentSession().RollBack();
, y& A) N5 [  g0 f5 U...$ W9 T8 L" v3 q7 S) z) ?
Unbind(HttpContext.Current, SessionFactory)
) l* Z" R- ^! M9 [# _. u- u7 ~1 i1 ^  F! [% ~! ?+ q
context.EndRequest += CloseSession;
' o  w+ U) b, l1 I% P3 _" p& k9 A3 R) R
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-17 20:37 , Processed in 0.185804 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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