埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
$ y4 t; \7 [1 ~7 [' f
# t# I3 K  I' R1 ]  t, n5 b+ L4 v4 X谢谢( k- Z9 o0 w; J' t
3 S" a( ]; @: t* o2 ^3 }# A
<property name="current_session_context_class">web</property>0 Z5 S1 s* H7 g' P1 z3 f
<property name="current_session_context_class">call</property>$ b& k" }% ], v# X) E# T% i
<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 编辑
$ ]9 M4 m( C  N3 B5 @/ \! |, n3 d) p, d
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf# @, y% W" u* d$ O
' x+ H6 r2 u' t9 f( p& k
  K  p5 X3 a, K. [8 D  D( P
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
+ H! \3 V3 Q. C/ _; r
( n$ c0 m3 C0 c. y% a( ~  @2 n/ I. R
0 _+ q% T3 O1 u5 w% G: RChapter 2.5 Contextual Sessions
) m, [$ Z9 |1 c9 _! {gamahu 发表于 2011-7-14 21:56

9 M  L% {. a9 t! U) i$ t: Q5 _2 {  ^& M0 J: S8 u) X3 C9 s* n
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大./ U0 U5 X7 L' @  ~% l/ h
7 u% p- {# B) D' {9 K3 \
现在还多了个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
2 w% {+ \2 q6 n& y- K) Y4 j; ]基本参数:* x/ B2 s- L, h" G' {0 T% @7 |
jta | thread | managed | custom.Class( @2 E- X8 R' V9 p
主要是配合
: b6 E$ Q7 t' t$ B% \# O% jSessionFactory.getCurrentSession()4 q% p" r( X2 a1 N' w) j
来用的.
- N$ w9 v& _% F2 Y1 {, O* L' BThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,) W; w7 O4 P+ d' t
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
# `. h1 ?& C% P- Qcontext.BeginRequest += OpenSession;
6 S, q) q( T1 h$ y# D# G9 m.Bind(HttpContext.Current, SessionFactory.OpenSession())
7 ~' A+ a, m8 X9 w- X& w  x5 ]: F" I' p1 v
//do transaction
0 l' W" V2 M) a9 ygetCurrentSession().Submit();
4 F2 I) y, x7 mgetCurrentSession().RollBack();8 b1 \& d2 D% K# P
...5 K( i: z  i) H* k2 E* h
Unbind(HttpContext.Current, SessionFactory)
9 \: K3 Y/ b7 L2 J# i( A3 C8 R" v. J$ r3 G! A9 i# C8 X4 O! k& ]" F
context.EndRequest += CloseSession;" P- c# }9 ^" y# m5 O- @. S6 _
0 X* w' D% ]) r) Q- q
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-25 19:41 , Processed in 0.145184 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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