埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?& W  ]6 T) S6 _9 m2 T+ B8 R( {% W
; I8 H2 y; x) K* C/ C9 y
谢谢4 H4 s# w; k/ G) o7 {' m; {5 E, w

; d1 t" x' `7 C) I% n8 |# v' n. O6 @<property name="current_session_context_class">web</property>  m  \; V* c  U
<property name="current_session_context_class">call</property>
3 i& W$ t% O  b: Q9 U; Q; u6 u<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 编辑
9 A( W7 D5 d2 k1 n, c
$ _9 k* k. z3 y- k7 k5 S( A3 ePlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf+ F7 H$ A' I! _0 ?
4 O) d& ^6 f1 I: a
- `& [' a+ \6 [  _$ l
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
1 _- Q. k, `- e- e5 o! j8 a3 K2 }& l( }' w6 s& e. A) O* f
0 g  ~& _3 L2 ^# m& b5 W9 b0 _
Chapter 2.5 Contextual Sessions
6 N& u- S. C/ V4 g- W7 `gamahu 发表于 2011-7-14 21:56
7 x) _$ d* X# Q( p& ^

# a/ Y- i5 C% D: I谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.; b) v3 C# v0 w! |

  F& L/ @6 A' Z  M; \  ^现在还多了个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% s4 b8 X% l# E- R( N2 A5 @; J4 a/ u
基本参数:
2 N. l. D/ K/ ~. n9 D2 x5 z: Wjta | thread | managed | custom.Class
3 J, o% A) I2 B: N% _1 y3 R# h主要是配合8 N7 ~: A7 w! c0 s; A. I& ]+ E0 }
SessionFactory.getCurrentSession()" u: M4 f. S& j0 |% u: q
来用的.
, r, R, a' v) IThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
- j2 v) L8 U- oWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
1 T+ t/ U  W& t: f9 dcontext.BeginRequest += OpenSession;
0 [& J. k; z; s$ x$ p.Bind(HttpContext.Current, SessionFactory.OpenSession())
, q0 z2 h; @% D: g# q8 o
1 d6 S& `$ K" r1 q//do transaction2 n; e- R9 g: b4 ?
getCurrentSession().Submit();
4 ]; f, ?; r- I( H( b# m4 YgetCurrentSession().RollBack();
) S# `" B3 z, h( J9 p4 ~...4 Z+ o, |* d! W# R
Unbind(HttpContext.Current, SessionFactory)
1 q1 f; Q7 L  f+ K* R2 T8 }
3 l* |; S+ L) }, n  M4 M  tcontext.EndRequest += CloseSession;7 U' r8 g6 ?& d, y
1 P/ ~) e$ ]2 l7 g$ A
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-8-11 22:54 , Processed in 0.127144 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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