埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?5 J! {3 v& k: J3 V, t! N$ Z, S

8 q3 O, ~" m' W0 A& z3 f谢谢
% s# O  h; t. {+ I" u. h: G* O5 h# |9 u' o
<property name="current_session_context_class">web</property>
6 w( R2 Q0 R% u; z  E. o0 h<property name="current_session_context_class">call</property>
- S4 X# ?/ h1 R) S: E, @<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 编辑
6 s  |7 Z) D1 m# A
! }/ b  o- ?5 H. Y- `6 tPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf) p( J0 Q5 r/ ^: T2 t. T
; O/ L! m$ l) [. F) i1 O
  e$ i+ W2 Q% R6 e+ v! z
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf- u1 O& p. |. \
. a& A! [$ O% h

! Y/ c' M) I9 {Chapter 2.5 Contextual Sessions
$ K  B  i) y  H) o$ v' @$ h2 u8 Sgamahu 发表于 2011-7-14 21:56
( z: M. Z2 g- U$ H

" B( p& T: d) @& l% q谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.* ?2 d0 `: W' P! i6 v9 `: |0 m/ i
+ G6 ^9 J; K! Y( o, n4 v4 i' S
现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what7 l5 S6 z3 K9 F0 i* L# m' V
基本参数:
+ |; Z8 c$ {" V: F  mjta | thread | managed | custom.Class
: p3 u/ `: n: @2 {5 ?' g$ V主要是配合# ?( r6 }% z5 P2 v1 E
SessionFactory.getCurrentSession()4 |4 W7 x4 I% ^2 |
来用的." [2 h* t- ~4 |  ^' P) h) {' W
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确," N, |$ {6 N4 Z" p! k7 B
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
6 D" K8 Z# a$ O0 j" ocontext.BeginRequest += OpenSession;
- _0 q4 D3 |8 }- N.Bind(HttpContext.Current, SessionFactory.OpenSession())
9 }- h% F; ^/ f5 i  L9 m5 v/ r3 @7 ~# t$ }* q
//do transaction* X' b1 t4 a5 Q  i/ Z
getCurrentSession().Submit();
& b" |  j& C7 n2 C; W( pgetCurrentSession().RollBack();; y$ {0 D" T) E7 q8 f3 F
...6 x. L" ^* B. w
Unbind(HttpContext.Current, SessionFactory)
- @. L- z' }* x  a
1 i  X! ~- @( o/ T, X1 Xcontext.EndRequest += CloseSession;( E% Z) ^, d( W0 v$ z

3 z) X) n  R2 ]9 t9 ~9 L: V5 x- x 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-16 12:58 , Processed in 0.232550 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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