埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

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

( s+ x& K9 ~. d5 g/ H+ J; t) p谢谢
' I, _- U1 f+ h- V- S" b, Q2 @" m) k7 \  F' ^8 w; Z, [& @# A) ^4 X
<property name="current_session_context_class">web</property>7 _& p! h% q$ d$ \5 D/ I% m) B
<property name="current_session_context_class">call</property>+ P8 D, M9 E# E' a8 d" {% C# i+ Z7 r
<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 z3 k" E; i% h6 S' U: b  Y
& M+ Y" a: X9 n1 r4 _. O
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf' P( T3 }1 u8 [0 z
; {$ S8 I+ D" R" R* r

( v1 z) N7 |$ F9 \  P! KChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
$ ~$ |% T& b0 |, f6 Y7 r3 ^; |9 ?% n" M1 b. T- i2 w

2 i( }1 e& s5 tChapter 2.5 Contextual Sessions* h$ K9 G% k9 {' U. L
gamahu 发表于 2011-7-14 21:56
, h' w; q- j6 {; w3 _  K" F

. W" ?2 y6 ~) z4 o谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.. s5 T- J" n) ?+ x3 G; p* P4 P

- `- d8 v. Z6 c/ q: X# Y现在还多了个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
3 Q3 G  ?0 P3 {: l基本参数:( f( h* ^# q& P5 r$ F* A' u
jta | thread | managed | custom.Class
& a/ U. l9 c" t3 [) ?, r& G: b6 F2 K主要是配合9 c) L* _) b5 N( G. K4 A
SessionFactory.getCurrentSession()
+ |! o: d( s! d  F. y5 Z: Q来用的.% T6 s" B: \" `% r4 K' u/ Y" V/ ?/ [! ]
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
2 y3 T- b, p  T' Y( cWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:* H$ @5 S4 y2 k7 w0 D
context.BeginRequest += OpenSession;8 [7 a* l; I2 g% q( g9 I* f& l$ ]
.Bind(HttpContext.Current, SessionFactory.OpenSession())
1 g: B' y) D( x6 `$ c  R* z1 }& B: D2 G7 f8 x! m  a4 v( [- i
//do transaction, \8 ?0 N5 |4 e  h. Q" q0 Y
getCurrentSession().Submit();" n: u) n1 ]0 `' O- u1 f
getCurrentSession().RollBack();' f( F+ y9 L2 m/ q& R
...
% @9 X  R. E7 l6 PUnbind(HttpContext.Current, SessionFactory)
0 P5 f: _; [6 l0 Q# l, ^, o2 |; a2 y1 `! y% `; H
context.EndRequest += CloseSession;
8 L3 ]7 ?0 m; J+ ^/ ?) f- Y9 i
" c: l. ]/ l/ {; l, r 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-5 18:36 , Processed in 0.556185 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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