埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?1 Q0 _" D2 M) u8 }, L
: B- ]9 t; A* ~5 T9 V
谢谢
* @+ M8 j9 w/ k9 j$ t
6 u0 A. c/ [/ c+ C<property name="current_session_context_class">web</property>; O$ C' b! F' a5 }' `
<property name="current_session_context_class">call</property>
9 x( H( t9 B0 n) l- R) R; _/ ?! 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 编辑 0 _7 d2 S  @8 F6 w) ~
3 D9 S2 U1 l6 F+ F+ x* z
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf# {  R  T1 V/ q( k1 A. e

$ `" h7 [5 ^9 }, V9 z, p* L* r+ D8 d/ H$ |: C
Chapter 2.5 Contextual Sessions
理袁律师事务所
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
2 p( v- y+ g* D0 z3 [: x2 v' @
6 ?9 n# i: u8 W
& m7 i$ p6 W- BChapter 2.5 Contextual Sessions
: K" L2 m7 Z0 Y; P6 Xgamahu 发表于 2011-7-14 21:56

& i- J, q4 ^4 Y2 Y4 K* G7 g6 t* W% L$ K. b" y  R* }9 z' g- p
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
5 O& y" \* n* G) g5 k7 A4 z- P
+ [' q/ b0 O) O现在还多了个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
. `/ S& a9 L$ m* G6 C基本参数:
8 q0 Y( P* D/ \  I- ]jta | thread | managed | custom.Class5 C( |0 d: x6 u4 g1 ], D* L$ A
主要是配合3 ?. I/ @1 z% j% h8 k
SessionFactory.getCurrentSession()
4 f2 [5 U5 ?, f9 O( K6 i2 r1 J来用的.( k1 _9 }5 P( z  j+ _( Q4 |
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
1 Q  o5 D0 _0 \! p% x8 pWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:; t& j* e6 b+ z9 ]1 q0 K# o: u, e
context.BeginRequest += OpenSession;7 `, W$ q  j$ \0 I/ e1 v6 ^+ Y) C
.Bind(HttpContext.Current, SessionFactory.OpenSession())9 Q- `$ {1 f& s3 K+ b

0 w: {3 u% H; i9 e5 ~) s//do transaction
- y/ q8 V1 U0 R& ^% O, pgetCurrentSession().Submit();' p6 m: u9 P$ \" `* n  ]/ c# N
getCurrentSession().RollBack();1 `# [8 `5 [* E" C
...
$ k! {7 J$ E# MUnbind(HttpContext.Current, SessionFactory)
% X" |1 z! g$ }- N" Q: K- w9 }( w
context.EndRequest += CloseSession;
6 r$ z( V: j3 K0 x1 O6 W/ ?) ]+ ?5 d
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-19 10:04 , Processed in 0.126136 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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