埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
& v9 z) m5 j# v; R. P3 [( v1 [  V
' ^# A; K4 P) }* K$ a谢谢
3 O4 W# o' F' l- p& Y, P# P- J; `
<property name="current_session_context_class">web</property>& m2 Y) j5 O; O' ?
<property name="current_session_context_class">call</property>- F+ t. |6 Y5 Q: h" w2 P5 e
<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 编辑
' u( J' j8 \. x1 J1 k
8 z3 d+ [1 K# L8 r0 a+ N/ }; q  {1 LPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf1 q. D: K6 u; f* \5 P
3 Q4 Z+ g- L% V. p- _( J

4 I% B# B/ d. ?. L+ T$ VChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
$ Y, ]0 A) b$ U: [% h" G# j* ^! `$ s$ K
5 {9 b, b$ l& k  M! L$ x
Chapter 2.5 Contextual Sessions8 S7 @' f0 n7 x( W
gamahu 发表于 2011-7-14 21:56

3 }  Z% u' P3 u5 I: o( d) h: A2 w$ O3 e
: H9 I- H; G2 M1 z谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
$ p" F0 g7 `; o/ G! R+ _8 {. V6 ?6 B; _
现在还多了个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
, P; f1 O6 |2 u8 `基本参数:
6 }% Q) d5 G; n' e' Xjta | thread | managed | custom.Class7 p( p  M9 _$ a+ Q
主要是配合
4 z6 }# u) K* PSessionFactory.getCurrentSession()
* f4 d% W2 p! b, ?/ e0 O来用的.
( Q( f5 v+ g* E! m, j: F6 H1 z2 v' uThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,2 ?% R% G  u; h9 s* Z' O
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
/ z4 c& e- o7 q1 w+ X* `/ ^context.BeginRequest += OpenSession;( c" v0 ^4 D9 ~' x
.Bind(HttpContext.Current, SessionFactory.OpenSession())" _6 t7 s$ o- ^/ [' i* {

/ N9 H' {) R; o//do transaction/ _: Y& P3 W$ Z
getCurrentSession().Submit();3 a; W3 q, Y, B5 m1 S( b4 w
getCurrentSession().RollBack();, u" W, ]/ _- E4 \5 w
...: f" h. [# ~/ X: j
Unbind(HttpContext.Current, SessionFactory); y8 q) [4 p3 K
) q, J$ f+ n. r% ^
context.EndRequest += CloseSession;# u9 h! ~  @& t% W

. B2 h6 u) a( v 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-7 07:00 , Processed in 0.124896 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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