埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
. o% i, s# N, W% ?% W6 W& w, Q1 T1 ~$ _: G9 ]( T. t
谢谢; S8 f- }4 i. v6 \2 E
# ~) L$ e: F3 O, a* Y
<property name="current_session_context_class">web</property># H! O# Z4 U% t/ G4 R  p0 l% V& _
<property name="current_session_context_class">call</property>
0 A% G3 X1 u+ {/ |0 x0 u$ m7 S<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 编辑 $ H3 W( Q8 P8 r! f

3 f  P1 G  e1 h( L/ v. {Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
1 [& j; g1 ~3 O9 ?" t' H: G( v( X$ s9 n

9 A+ |0 n9 ]4 XChapter 2.5 Contextual Sessions
大型搬家
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
8 ]5 l3 Y$ e- }7 W! j+ R2 X0 ]% M, A% c: D
7 b, ]# j+ Y$ @
Chapter 2.5 Contextual Sessions
, X8 u) U8 `4 Q. n6 mgamahu 发表于 2011-7-14 21:56

1 D/ ]5 K  b. U' a2 s
% f2 B6 h# q5 e! l- D6 Y' T, }谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.; h0 B9 G% R' S. {1 h% k8 T& [

1 _1 K" d6 q5 u% {0 I- c现在还多了个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
8 ^3 W$ h5 j  J0 F/ F! U: O基本参数:1 b+ _) s5 E1 y
jta | thread | managed | custom.Class
+ Z0 ^" ]0 ^4 d, G8 o; E# I主要是配合
: R1 ^! U5 s9 v# oSessionFactory.getCurrentSession()
/ I4 G3 n, p$ H( u来用的.
' |7 h) l4 R0 s6 q5 |6 d2 B: CThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,: W1 b" t( [* n: y) R7 H
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:1 E( ?; J1 F. {# \/ _( |
context.BeginRequest += OpenSession;- [& n; I! N. P6 {- n5 r8 y
.Bind(HttpContext.Current, SessionFactory.OpenSession())
# y5 y( Q" w0 v0 \1 u, Q
, E9 D; m. `) Y, h: ^//do transaction* {( V: Z" Q& W3 Z9 r/ T( N
getCurrentSession().Submit();  ~9 i5 l+ J8 G
getCurrentSession().RollBack();
5 a2 L' x$ e" s% [6 _5 B, N8 [...2 N3 w0 i- D' r$ W8 n; W
Unbind(HttpContext.Current, SessionFactory)
+ S% ?$ N4 P: o6 [) q2 @) k! N
. \" K& r% C, c% x9 econtext.EndRequest += CloseSession;. G/ }. K; |" g9 k
) b! Y5 X5 F* n' e1 d# F7 M: w8 L
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-5-7 00:02 , Processed in 0.198139 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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