埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
% ?1 I: ~- }& {# t
% R2 x- \& r3 K) [5 y5 W谢谢/ ?5 X/ @( t, `# w

1 i5 Z' ?& B. A- m, a5 M<property name="current_session_context_class">web</property>% D$ d' p4 _. u  m4 a4 U
<property name="current_session_context_class">call</property>
! I2 a( [- B4 `  s9 R& ^/ d<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 编辑
/ V, {& @6 o1 `! N  k2 Y" @
: ~+ A% J9 T  L' WPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  C# h6 M$ G# C5 W" I, {* i8 L( s! c* G" J
% l4 t4 r+ b5 u4 C
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf% w- W' j9 [9 h- ]/ k

# d) V1 i  C4 l2 f7 L( {7 D( i! f) h4 Z- |+ a" a
Chapter 2.5 Contextual Sessions  v3 J; p* u8 `" G) R! X# ~$ |. \
gamahu 发表于 2011-7-14 21:56
6 ?; B: T. h7 E! m) K
3 J% M1 l3 H/ G
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.! G: r: q# `9 o! K6 [4 R

: T1 g9 C  ~" o  L$ g" Q9 @) L+ j现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what1 d% {  ~/ [) I* j" o% Y
基本参数:! Y. |8 n$ G2 p5 M" e  h6 Q5 r
jta | thread | managed | custom.Class
- d! ]. K) l4 Y9 {" k主要是配合. f! n: R4 y' O& s" ^
SessionFactory.getCurrentSession()
9 ?( D5 E0 A* F0 C来用的.
) M0 r. m* i( b; Z' Q; P+ }0 VThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,: U' Y/ G8 F6 p8 a: i. p
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
! b8 r+ X. b3 W7 Z* q, W( Scontext.BeginRequest += OpenSession;
+ B+ D) C. \- \7 j- P- @.Bind(HttpContext.Current, SessionFactory.OpenSession())/ ]2 x4 N! c9 k2 ^2 c1 O/ m; |4 l

) [; b4 A  [' v# _& P//do transaction) J' B3 D) g2 [7 a( U+ c
getCurrentSession().Submit();
1 d9 q3 [" |% p! `0 u+ HgetCurrentSession().RollBack();
6 n4 F, W( [3 X5 f2 R4 Y+ R: M..., d7 n  ^: ?6 L$ `
Unbind(HttpContext.Current, SessionFactory)
; T5 |4 |; k' ]/ v9 E. p: K! q5 K; O, Z8 b/ f' `* C
context.EndRequest += CloseSession;) t- j/ Z. S' v
$ t: Q4 o- v* r  N
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-9 03:54 , Processed in 0.160464 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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