埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
# k" T6 S9 i7 K4 G& r* m: f
- b" r4 _! v7 X! H( ]谢谢1 I) ^. E5 [  j" [2 R

$ g8 k# G8 }6 l4 w<property name="current_session_context_class">web</property>, P' G6 U: X( P/ e$ h
<property name="current_session_context_class">call</property>8 N2 ]" Q( a8 i! z) o3 ~+ A
<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 编辑
  k9 `9 B  F. D( p. ^9 P2 h* q: S- Q8 @# `0 c
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
8 b$ b$ W) w% t0 x9 d) \0 O" z5 |* u# \5 n$ e& K; g' o1 o
/ u# r5 m9 N: e) J! O, j
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
7 _  \* V" ]7 l! c' e2 q+ o: ?9 D! H  Q
( V& g! ?7 m2 F1 X, b! v
Chapter 2.5 Contextual Sessions7 U3 _1 F6 Y) Z, N, o# t8 N" q
gamahu 发表于 2011-7-14 21:56
. F7 s7 C7 v3 O  P* m
! t0 }& n/ R1 {
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
) k0 }5 r6 X& U; u5 |4 R2 o" i  y5 A; p9 {# W) 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
4 x. f8 M8 \+ A基本参数:
6 E, P5 X8 ~% N7 n: v1 Ljta | thread | managed | custom.Class
, Z% {5 |& G3 d) a1 q8 c主要是配合+ Y+ y, |! `( V  S6 ]1 b" R" a+ R
SessionFactory.getCurrentSession()
& j+ q. u$ C4 y+ X% q/ e% J* _来用的.
! s& _4 B* A3 _0 n; P" ^  lThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
3 M% B! X& i, S2 S- V/ GWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:0 k' g9 s+ G! f- M' _0 k
context.BeginRequest += OpenSession;
# {$ p9 x" L# g.Bind(HttpContext.Current, SessionFactory.OpenSession())2 s. [! l2 c; n" |5 i1 v
7 k& A1 S1 m* F2 U
//do transaction- |1 z. G5 d# m/ K: P7 M
getCurrentSession().Submit();
. D# z) a+ j, n5 F( EgetCurrentSession().RollBack();
, D3 v! d' l, i  o0 v; }...6 L7 p# I  e& L3 e
Unbind(HttpContext.Current, SessionFactory)/ J2 C3 [' O' Z: P4 [* P1 c7 z7 v

6 n5 W0 |8 e9 }5 t" N: j3 y, ^1 T: bcontext.EndRequest += CloseSession;
9 u% M0 x+ ~9 p- R
: F+ L% M! S' F 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-21 09:41 , Processed in 0.123828 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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