埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?: O0 O% R4 r$ F, D& ]8 O9 c2 K

4 j* ^/ X3 k% k) a+ K谢谢) f( N. B" u, \* S, ^9 T
! P# ?7 h8 F) T' i( ]  N
<property name="current_session_context_class">web</property>
& k5 X( `3 l8 ^! Q% S<property name="current_session_context_class">call</property>
# x5 B) D+ t# X<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 编辑
" K$ E! w. n  q3 I( E9 E) C1 H& B" d) ^3 V7 x0 ]  ]3 m5 T7 [" S7 G: S* T
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf# {* x. ^1 X$ V4 s" N

3 S, X: W0 m5 ?' S/ b
" S$ O: t  u/ ^Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf# v( \' O4 l: p, q* a

* j! [' s7 f3 w) Q
3 o: j- A$ V% T, z/ SChapter 2.5 Contextual Sessions
6 ]1 t: o# g/ kgamahu 发表于 2011-7-14 21:56

  h( `, }3 s8 r* y, j* \  `! l$ Y& b1 d- |* D1 T
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
& v" J# m5 i& a/ J0 n
8 M- i* l6 D- R1 E/ j' G2 v现在还多了个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
4 ?$ f- _7 C! r1 Y5 E; B" h4 F8 T基本参数:
+ @) E5 T" ^7 h" K9 P, U& u3 O, T; Wjta | thread | managed | custom.Class' x6 W& u% O, n( [+ q6 U0 Q
主要是配合
" {) R" c8 l: n3 x6 OSessionFactory.getCurrentSession()4 C- C2 ?. a- j1 ], T: [! Q7 o/ ^
来用的.
+ n# I6 o' T5 S, bThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
8 g4 z3 x* p2 G( i7 ^8 `" K( j% eWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:$ g8 J* _' x! ^7 n
context.BeginRequest += OpenSession;
. m4 H$ q& [" R. Q.Bind(HttpContext.Current, SessionFactory.OpenSession())
! j+ I8 e6 y+ q- N3 A- z6 k! b: j) {4 ~1 y
//do transaction+ ^8 J' b& {( R1 C/ H7 N$ j
getCurrentSession().Submit();  b7 m6 T) G+ m" g
getCurrentSession().RollBack();
+ e' A) a- F$ x, r  h...0 o! _( E6 t2 f1 V, U$ R5 @: a# F
Unbind(HttpContext.Current, SessionFactory)& ^! l/ t( W3 t& z* N  C& N. c
& c( Q/ @8 j" a" a
context.EndRequest += CloseSession;
3 w, i. `% m' @3 ^& E
* D% b1 x! A( F: ?4 t0 |5 f+ H 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-12 02:34 , Processed in 0.202540 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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