埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
$ X8 {8 R; T  |# d+ ^# ~. L& s/ O' C  M7 b* }  e9 {' s4 c; t, C9 D
谢谢! s2 ^0 o! B7 S! L4 y
9 Y: j! n2 A% ]8 r5 k- h/ N! e) D& U
<property name="current_session_context_class">web</property>0 R3 @: _* ?5 w  \
<property name="current_session_context_class">call</property>
! |  ~' Y, }5 }' ^4 H<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 编辑 & I! L! Q' G8 M% c% F0 s

# i& `. ]5 J) u: C# [( }Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf9 z+ a- P+ j. T* \- x4 K
& w7 @; {/ R. C0 _' f
* T4 m* t0 ?% X' I, ~6 A
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf3 d( \" Y; H# o  x$ X; {5 p/ L+ I
3 `0 ^" g- M) x
9 J2 y4 A# F; Z
Chapter 2.5 Contextual Sessions
% b- x& E& P9 Q$ b2 Y/ s& U- p% |1 vgamahu 发表于 2011-7-14 21:56
3 J+ h# {6 g( d- `& N; w

* \) H# ]# ^) Z- k! K; Q% w谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
9 N4 W* X5 V. ^7 m  l0 m3 {% p& ]% A3 Z0 V) k( y5 X' 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 what
( g% w  _2 E) }基本参数:+ y; s3 c6 m0 c. x0 h( O& y
jta | thread | managed | custom.Class
* N0 q9 F! |! y主要是配合
! z' \) v2 l* n8 XSessionFactory.getCurrentSession()
' m) Y, N' `. o7 v' R" c2 b来用的.
) |8 D# u# V3 E5 L8 i0 OThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
7 o2 h2 a1 s" W5 B- N4 @4 i; PWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
  H0 o/ I/ i) D3 V4 ocontext.BeginRequest += OpenSession;6 m/ L% g0 K9 O
.Bind(HttpContext.Current, SessionFactory.OpenSession())
0 U( Q* D9 @# |. g5 V1 P) y# l$ ?1 y% h3 }( U, `
//do transaction
* p* y, m  d* b3 l  K6 IgetCurrentSession().Submit();
$ y8 g* `9 \* i* igetCurrentSession().RollBack();
. s$ [# k$ R$ b' |5 B4 ~.../ V9 W9 {4 b# D( b7 l4 B0 @
Unbind(HttpContext.Current, SessionFactory)
8 n! P" |' |! y; b/ C- |5 Q% P2 P- i* \: r& \
context.EndRequest += CloseSession;
' C" P& C3 }" W! W& V; l2 S: S' l4 y1 d' t
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-21 00:03 , Processed in 0.180933 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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