埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?% `9 O) e, q& ~% B8 O1 C  y8 b
8 j+ c- j. G; Q5 i# v8 t' p9 k
谢谢5 F% C; i4 D0 D4 [
) [. v+ e# V6 H
<property name="current_session_context_class">web</property>/ U& T  d) }1 G' j' @
<property name="current_session_context_class">call</property>
' G" r3 q# s" l1 X6 A' }. g<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 编辑
. H6 H* T4 `4 X, d& `
2 E- Q% ^9 v: t% sPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf: g# M0 ~- t# c* `( l- t

- E) d9 K( _5 F2 G  u, g& M  _& e; k( z5 r7 I0 T
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf& M  ~% `; h6 C- M8 J
9 r* O0 y1 u/ ~

, y5 Q) a8 E( R2 \/ \Chapter 2.5 Contextual Sessions. b* F5 C; `- v; U3 M5 _
gamahu 发表于 2011-7-14 21:56
2 \! F( s' ?) k. A4 K+ V; s6 `
2 Z/ r3 D3 k" x$ x9 L, M6 s
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.7 \# K+ k8 \; b
0 |/ w7 N1 c: h& C! O3 J3 n7 j4 n; A
现在还多了个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$ y9 \8 Q5 J, T9 S) }+ l
基本参数:
. u# n" T6 h/ Z0 _jta | thread | managed | custom.Class6 D/ g: {2 V3 s# [) J2 {% e
主要是配合
1 \' V; W" W( F, B0 zSessionFactory.getCurrentSession()( U9 Q! V9 ~0 L9 D1 m* u0 ~
来用的.% t! M( c. Z, [8 n! C" g
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
3 g% N0 {9 Y5 Z' a9 }Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
8 M% E0 T4 L$ g/ ?( Hcontext.BeginRequest += OpenSession;
; F9 e* v! @9 I8 p' |.Bind(HttpContext.Current, SessionFactory.OpenSession())- V/ a( e' i. M' j

- g% F1 h& e1 m. t* k+ V8 u//do transaction# o2 T, Q/ [; g
getCurrentSession().Submit();) ^1 c1 _1 d: A4 H, \: w2 Y
getCurrentSession().RollBack();# x$ f$ O+ J: f+ D' g& j
...
5 h. j4 {7 ?" C! G6 ^) n: wUnbind(HttpContext.Current, SessionFactory)
4 C( c+ Y2 N4 w! k+ T
- B: L6 B% v0 k& l( {context.EndRequest += CloseSession;
0 K+ j( Y  I# M8 X; e- h( F
, Y# O$ U" w2 k9 Y/ `$ z, D 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-10-13 15:05 , Processed in 1.141274 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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