埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
( h5 G7 Q$ p; c  N% F) _7 f+ n7 i7 o% s7 b8 x5 T- n, Q7 M
谢谢( ^- K" u' t3 A5 X) z
; q: i# s1 p8 p' w+ F8 v
<property name="current_session_context_class">web</property>* [5 m/ m; Y; U' x6 z
<property name="current_session_context_class">call</property>, w3 s& W, `! D# M# H. T  _) j
<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 编辑
& g7 b# E1 t# Q  _( v+ d; o6 X# g: \7 n# |! s: I0 O/ V
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  L6 \/ a+ B/ `2 x
& W$ ?9 L2 c( Q# M( m
5 k* S" G3 V& l, f$ {Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf/ G1 U) u3 z  t  ^* v
, f- o! v* {2 |8 r2 f

) i, v+ T. V7 i# _2 X! IChapter 2.5 Contextual Sessions
& Y# L6 X  E6 k4 O( _# Sgamahu 发表于 2011-7-14 21:56

* E8 F* b9 G- P) M$ S  ?0 b/ U1 J  n, M7 h$ T& `" G1 a; g$ g
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.3 j& G( O" V$ G
: P) n$ u3 f4 m3 h+ E
现在还多了个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
& g- ~1 I  s: P$ M基本参数:& s5 W' c! Z6 m+ l; I
jta | thread | managed | custom.Class  }- `% z5 E+ H4 g% j& x
主要是配合
8 {1 L- w0 j2 r8 Y) ESessionFactory.getCurrentSession()6 Y  Z0 P. t2 V5 f5 ]
来用的.  c& n6 F5 w6 H2 ?* O6 K1 H, K
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,7 X) w. }" L5 s( `4 z
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:# h, s- W4 Z, i
context.BeginRequest += OpenSession;& o# x  v: t: ]. i
.Bind(HttpContext.Current, SessionFactory.OpenSession())0 p4 \" w% y" F5 d, u. L! g
9 w4 m2 x! a% _' \: j1 s" r
//do transaction
, ^6 J. [. x% V# K* K! @getCurrentSession().Submit();% V; [- i. y# \! O$ G6 a
getCurrentSession().RollBack();
# x$ C# ^$ M2 u& `4 }2 g, _' N# L...
& c6 @- b# [6 b. ^Unbind(HttpContext.Current, SessionFactory)
: X4 v$ [6 o- B/ ]9 z/ p
  k+ r* p5 Z& \0 {3 U6 lcontext.EndRequest += CloseSession;
* [, _1 x: W% S% \, Z: V# h" t" x6 @% I
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-6 19:13 , Processed in 0.148553 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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