埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
4 P- T8 x0 [- t3 T( x- q1 e
' i: Z- g, ~+ X: a谢谢$ t# M+ K7 T$ ~/ r; a6 j- {" n& U
% o" U/ i( K0 U$ A  q2 z* h  ~: f- x
<property name="current_session_context_class">web</property>
, U: U2 ~/ w- [6 p8 n1 A. Q3 x<property name="current_session_context_class">call</property>+ K$ ]1 G' h# c2 }9 a
<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 编辑 ' H* Q: N, ?" N7 e; I
. P9 a' I/ }- {0 F4 |  R- v
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
8 I! l5 A( [2 w+ [7 u, {; A1 k" L) Y/ T& \

0 m: P. c7 m3 {9 [6 HChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
+ i3 L& C2 s( a% z4 k& \( F2 y. F, w
7 |+ l3 n- B: I/ u! P, i7 V$ o" g5 S3 ]
Chapter 2.5 Contextual Sessions" I) \2 j( u  C/ z" D$ O0 d
gamahu 发表于 2011-7-14 21:56
9 ^. B7 d  T& y0 w& e1 p
! Y9 A6 w7 c# S- I
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.! o" T" V  j9 G- K+ }, }

4 d. l3 `" L2 x' w' 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 what4 j4 S$ z2 n' l8 B: F2 p
基本参数:
5 C& K6 T# z- u8 j' Jjta | thread | managed | custom.Class
$ V# a0 B/ B+ O/ ^主要是配合4 j( h& C! C8 o+ |
SessionFactory.getCurrentSession()$ Z, g3 t" v) u
来用的.
6 T" s1 o. {% `5 t. r. g$ yThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
. x8 k1 e) o7 u  [Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:6 d0 l% o/ @9 Q6 o% ]' D
context.BeginRequest += OpenSession;4 n: `& h4 _) T. Y" u/ b
.Bind(HttpContext.Current, SessionFactory.OpenSession())
6 }4 i, b* Y% J
$ f& d  A6 X1 ]  G3 k7 E: a//do transaction
; ?, s+ K" A( x+ P0 l3 @( Y  igetCurrentSession().Submit();
9 q7 p+ _' @+ _2 E" h  r1 xgetCurrentSession().RollBack();: o1 Z6 _( d2 P- m9 U
...
6 [3 C0 w& M- J  X* `& J7 EUnbind(HttpContext.Current, SessionFactory)% C2 C, J/ ]! l5 F/ V$ k9 d
; M, c0 q: w$ G) ^* s
context.EndRequest += CloseSession;
# v+ o& x# j' e" p0 o8 l9 z) [- h3 }  m" G, m  H! S
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-22 23:41 , Processed in 0.325267 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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