埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

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

  D; g! D) u# Q$ `谢谢
/ }; X7 V$ r, O/ \! S
; u9 R( g: J! j6 F2 l<property name="current_session_context_class">web</property>7 O3 v! T6 i, n4 n' z: U
<property name="current_session_context_class">call</property>
% d; t& T5 F6 m5 y3 m/ c2 Q2 O<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 编辑
1 c1 Y6 X) i" r5 I! P- w) {% Q5 ^% L) G$ N5 Y# f+ T
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
, t9 X1 K( d7 {8 g) c; ~; `3 ?; n% Y: c" o

, [9 `7 _1 S& w8 OChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf, _) z; [/ \" f6 i
) P5 ]- r' h$ a$ C8 n9 s
8 _2 J% Z5 g6 }  G% |2 W# b
Chapter 2.5 Contextual Sessions
7 P: o" a# {+ u! p2 j( {9 wgamahu 发表于 2011-7-14 21:56

1 Y' E0 s7 q1 @/ l, n- W
, \) M" k4 B7 E谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大./ P5 O! v: q) C; m! b  U4 Q! H$ a0 M6 {

+ B/ d5 d0 V; Q! 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 what
$ ^! T, c5 Z& N6 v4 n基本参数:
0 M, ?8 n" W1 ?4 L7 |jta | thread | managed | custom.Class7 _# A( n. `( ?
主要是配合
& k* O$ z/ v. ~( q, o: j! ISessionFactory.getCurrentSession()" L, \3 w: C/ \7 p4 F
来用的.' d2 f/ x; z4 f+ z
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,- i) G& G. [* Z+ |0 _
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
  ?; W& [/ R3 \1 S( xcontext.BeginRequest += OpenSession;
  k" [0 q: G1 ^0 s. g.Bind(HttpContext.Current, SessionFactory.OpenSession())
: v& Z( q" I3 \6 V. ?6 r: l) @7 }3 y
//do transaction
: N* o( ?/ q4 h8 |) x" J) \3 `1 n* igetCurrentSession().Submit();
2 ]. q, p! N8 M" X5 ygetCurrentSession().RollBack();+ U8 H( `1 v: Y% ]( p9 N' i' k
...
  a* J/ N- i: ^+ a: `# fUnbind(HttpContext.Current, SessionFactory)" l; Q% h; Y9 p2 Z7 i9 E# h( _

# ~* g# R  O+ ?1 G0 {" mcontext.EndRequest += CloseSession;
! }# ^2 s/ f2 p0 M* c- ^' Q" w% ?9 ~; h
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
大型搬家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-23 07:48 , Processed in 0.137689 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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