埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
8 c  Y! m: a4 |/ t, O6 u
3 n4 G% U( y) d. p  l, p5 H谢谢) P2 m) \8 i( r# [& D" k! ]( L

) c) \$ z5 p* l<property name="current_session_context_class">web</property>- s5 k' p6 n$ l7 z
<property name="current_session_context_class">call</property>
9 q3 o" A0 i: s3 `7 {<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 编辑 ) Y& z7 u, J* F' n8 B/ C6 o$ E1 W

  F3 v. r1 l1 }  C8 FPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf+ r9 G/ O! e/ @8 |7 B( d
. m5 x% U" S: F8 Z9 {

2 O1 p8 y7 y. `/ }0 i  D. |( Y' `Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
0 @2 i7 L6 o: ~6 w3 Y" {8 C5 D6 e1 y9 a; f/ S- ~1 \: z# l: d

. Q! F7 {- z' s; O9 qChapter 2.5 Contextual Sessions! i8 j0 p' C- _! l% U$ }
gamahu 发表于 2011-7-14 21:56

2 w& d( ?8 |3 C, X; R7 r  H
. z7 {- ?8 @+ y5 V谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.1 Z7 K3 V; G" c
2 O( y: i" S6 H! N- J8 i
现在还多了个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
6 k; \8 y- |: z, e. t4 X! l, C基本参数:. u# g2 e- K, ~) C0 g
jta | thread | managed | custom.Class
  y+ R$ K+ y0 N7 u4 d, ?1 z$ p4 L主要是配合
3 A) Z, u8 f0 z" }) L1 I! ~& gSessionFactory.getCurrentSession()
# J6 i; N) K" P+ t9 K- C9 z  @, N来用的.
3 A; P1 k+ H5 ?+ C( I6 E7 |Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
5 ]' J% c+ C! j/ {- K, Q* U7 c% ~- @Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
; Z% V- c0 C4 {8 Dcontext.BeginRequest += OpenSession;
! g5 ~" W/ g. q, P$ C.Bind(HttpContext.Current, SessionFactory.OpenSession())0 |$ q: X5 Q* V
3 F0 m  j" o! }9 m8 _) D
//do transaction
+ H" z: y7 U9 g3 E+ F( @6 IgetCurrentSession().Submit();. J3 ^$ Q8 b$ h7 g- F, E2 R
getCurrentSession().RollBack();! C) F- W# f6 T
...
4 K2 ^, m& W* p" ]3 M4 aUnbind(HttpContext.Current, SessionFactory). h9 C! ]) B; y. q- `

1 N1 Y- u% {3 Zcontext.EndRequest += CloseSession;
( V) {) d" O2 B5 S( }5 S! D+ ~2 s" k
" n: p" [& ]1 C+ G" _ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
理袁律师事务所
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-9-22 10:35 , Processed in 0.194670 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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