埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?+ t. ^- h. t4 `5 F5 G0 {- D
! C' p& [$ a  {6 Q1 {- V9 [
谢谢' C$ }8 v% Y6 c* w/ a
# p. S+ C0 S% m5 |0 F
<property name="current_session_context_class">web</property>
2 Y. U3 _& X3 |( {9 l0 O+ }3 G0 c<property name="current_session_context_class">call</property>2 `# U- S$ c  j0 `  Z
<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 编辑
+ ~! h1 V. B9 K! X" D; |# ~0 a
% x4 O) d( m) {6 GPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  o: @' Z% N2 ~4 {* ]! R7 u5 b
+ U) x2 z. T( Q4 Y' L; g" K0 d
  o+ L# L2 A/ Z4 Q2 }Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf5 s  G$ g) E- z( }7 x2 H

% U0 ]" |: {# B" C) R: C
6 S% B5 G- K, n2 v% ?! F  NChapter 2.5 Contextual Sessions8 ^# t$ h: q3 C& X% \) g
gamahu 发表于 2011-7-14 21:56
2 B2 B( P5 m- ]% K
+ c3 ?2 S$ e. A/ J/ b+ {
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.' u6 H; q# X, ~3 S9 P
7 A3 @5 W5 z6 f( ?3 c8 W! R( K" L
现在还多了个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( X) F2 h( o7 V4 X# Y3 [
基本参数:
  u! H6 ~) a  W& G" {  [9 djta | thread | managed | custom.Class1 E6 V2 U( A. _& x2 Q/ z7 p9 }9 E* z
主要是配合
- T5 _! N) \7 D, z( y( dSessionFactory.getCurrentSession()8 K) Q' I- D* r2 W2 |7 A
来用的." ~/ [0 R" ^: w8 Q0 X. ^, }
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,' m( T; |$ r* \7 L
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:. S0 I% X8 _/ @
context.BeginRequest += OpenSession;9 P4 k2 Q1 {" [# g+ ^
.Bind(HttpContext.Current, SessionFactory.OpenSession())% G. r' v+ P' O$ f, g1 x
) F$ x8 o" g  Z
//do transaction
6 K$ @6 V% z' a4 E$ l7 [getCurrentSession().Submit();- @& L5 f3 Z2 u
getCurrentSession().RollBack();$ m% y+ g2 W2 G* \/ g8 |
...2 D5 ^8 Z$ Z4 m0 }" A; X3 N
Unbind(HttpContext.Current, SessionFactory), d8 }1 \7 X# R  ?2 q- {
7 v; L/ S, D& k6 I! y. O
context.EndRequest += CloseSession;
3 R2 H6 j4 N0 w7 s, D/ ^, @
- D' i& i7 }: H  }9 R 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-13 07:38 , Processed in 0.086588 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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