埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
2 N) c4 r3 L, Y1 N- ?8 ]9 j# E4 O
谢谢4 O  j& ]9 ~* B: m. N. ]* y

, `) U9 K+ N' t6 n* t% P<property name="current_session_context_class">web</property>8 W' \: X; _. N) b1 V
<property name="current_session_context_class">call</property>: h$ w8 M* @: T
<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' ^8 N( `3 o1 ^6 ?) k
0 D9 r2 ~% P1 Y8 w9 u
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
2 i; b/ ^! z" F- }5 }( U# X: Z" f' I" W4 j7 o7 x1 y

$ E9 ?9 u. R$ S4 }5 x; d: Q; I6 |+ EChapter 2.5 Contextual Sessions
大型搬家
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf" M: A* |6 \/ L$ @/ _! b

( L, Z: Y2 C% x! @/ E0 _2 W
- s$ z( D; L: C, k) w, V3 _Chapter 2.5 Contextual Sessions3 O9 G: K0 U5 `9 ]4 [
gamahu 发表于 2011-7-14 21:56
- L! X3 D5 a3 {4 S4 {1 K

: s' C7 [- {8 ?& w谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.# M* X$ Y6 Q  Y! D. [2 }: ~9 ]

# A' ]9 h' E- N, k现在还多了个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
. Y8 i0 l' K! J& p基本参数:
/ R  H' `3 [8 G4 @3 cjta | thread | managed | custom.Class+ Z3 I: W" [8 ?- ?2 p6 ^" H% b
主要是配合# S# t% i; o$ V- Q$ Q
SessionFactory.getCurrentSession()
) d2 w. D5 `/ L, {0 r来用的.. V+ g# x8 `; j& u5 O; Y, M
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,3 Q- K7 F! @3 e
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
: x6 Z0 ]5 ]( bcontext.BeginRequest += OpenSession;+ _7 V5 e+ M6 g  K; Y
.Bind(HttpContext.Current, SessionFactory.OpenSession())" w) [3 S9 E" X# w) v

$ K; t* D7 X4 R9 d: B" p+ E7 I//do transaction
& f# y) Z, p9 {- p& Z+ x+ P/ p4 tgetCurrentSession().Submit();" c* L9 o( B/ p  e
getCurrentSession().RollBack();1 f8 q8 `- c- d
...
4 \4 L& D* M8 Y5 x6 u4 {Unbind(HttpContext.Current, SessionFactory)6 w6 I! J% l3 ~, j9 B
; l4 j7 m. `2 a
context.EndRequest += CloseSession;1 u3 ~/ F1 [0 E7 e6 i

- ~8 Z5 p8 V- K- X8 o4 L 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-29 00:48 , Processed in 0.126076 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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