埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?1 {7 |6 b- o% r' J
$ F) P0 F7 P5 P) o% f) f) m# v
谢谢, o9 N- C# K/ U* H1 B* p& i
  Y4 i, r* d, r8 Z$ u: Q( }
<property name="current_session_context_class">web</property>
& J9 }4 N$ D; F0 V3 h<property name="current_session_context_class">call</property>8 W9 C; q+ s) S9 ~7 [1 l
<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 编辑 3 d) ?0 R: x" I5 J' O
2 g1 M. j: K3 q
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf! m+ C% R; A/ T9 L1 d

6 `) |( L: X/ _1 a6 E% c6 m
5 k5 E9 D# D* Z" T' l# R3 MChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf9 B  w2 d& E8 J

& H2 m. L3 N( b9 s7 V- @+ l7 {3 k2 ~2 f% I" ?! t: ]% E
Chapter 2.5 Contextual Sessions
+ E& `. l, S9 H7 W! ?: _" zgamahu 发表于 2011-7-14 21:56

* [" c$ B0 @) i, @7 M; ?1 \- Q$ X; S2 L# Z( l0 D) M; v
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大./ I. Y, G  d! f3 I+ ?7 ?+ z
/ t0 y3 F$ ?4 Z6 v' 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 what2 j5 s. z* R' O$ k
基本参数:
0 j+ z% {7 D' x, x  F! M) Pjta | thread | managed | custom.Class
4 S' `" V: W* E2 c; \7 t主要是配合$ \* r( K+ W1 ^: E/ i- a% n; G
SessionFactory.getCurrentSession()
, h1 i" Y- M% F9 \' a" w3 I' n来用的.
# m5 r* g7 J1 p# [3 sThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,8 j5 `! A) a5 }! F; C
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
! b8 ], r6 {( N; gcontext.BeginRequest += OpenSession;
5 a6 T/ G* {9 Y5 j- Q( [1 ^1 K0 b( r.Bind(HttpContext.Current, SessionFactory.OpenSession())
' o2 B- O* |# v9 j6 a% ?; j
' Q% T; R: ]1 }7 ~$ r. j8 S//do transaction
! e7 \+ L: N* N; E6 N5 fgetCurrentSession().Submit();
/ e3 p# N1 Y7 h, Y* y4 B' R) a  S6 UgetCurrentSession().RollBack();# P+ ~' a# e6 i; E
...+ \0 ?& m" @5 g
Unbind(HttpContext.Current, SessionFactory)
  c/ d0 j1 f, }5 Z
+ z8 z6 J& E0 ~% Y! Gcontext.EndRequest += CloseSession;
0 u: Q5 Q6 t. G' ^9 K4 E# k) a( l: e0 z! i% E) p
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-24 18:34 , Processed in 0.211663 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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