埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
: u# g. B+ z4 Q, ]# f" f# R0 y/ g
( |  I  I' Z8 n7 }, F# y7 J; t谢谢
: I$ A( X0 N. }. S, N: ^9 x& p0 j1 z0 ~8 h
<property name="current_session_context_class">web</property>) M9 ^0 u7 o1 K( \; o/ T
<property name="current_session_context_class">call</property>& ?+ p5 s, u$ _9 ~- y8 h* Q
<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 编辑 . d2 x8 M) v% l3 m" B

0 a' R6 N( F1 `0 N, a2 c$ O, C/ H5 |Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf6 ?4 z/ o6 T& a/ k, j
& h" {5 M+ V; k
/ R& Q6 K0 u) g2 e8 x: Q! u4 p
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  o9 Z. U4 A+ {& |. d' D. R
) ^4 j# d  o8 R' e# e* `9 x3 ^6 ], }
Chapter 2.5 Contextual Sessions
4 s6 b6 C" p4 |. Bgamahu 发表于 2011-7-14 21:56

3 G7 Q3 s# L  k5 d6 j
6 _) ]3 i4 R* F& `" S谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
" K$ j" v5 w. K$ S1 @9 z0 \- g' J, |
现在还多了个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
. G3 @6 u0 S* \8 n7 I* y基本参数:
, Y3 S+ q2 x# O- Sjta | thread | managed | custom.Class# i8 o9 q" ^- y" o: r# x/ b  t
主要是配合% l! P' {4 P& {7 g0 V
SessionFactory.getCurrentSession()% @! S- L$ O* k$ I* |
来用的.2 k  H3 y/ b7 m1 R
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
- g% O" ~- K( E7 l- _4 {; w2 }Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:' P$ n. P8 C# x
context.BeginRequest += OpenSession;1 `/ B* d/ b$ K8 I1 S( c8 I
.Bind(HttpContext.Current, SessionFactory.OpenSession())
$ G! c4 J$ v7 y+ f) W
: S* U# H# X; t. i& v, j  d) T//do transaction' ~' N/ M* H; n
getCurrentSession().Submit();; x- \( F& E4 W/ `: j/ a" S
getCurrentSession().RollBack();
  m( Z4 \% v* g* _! }3 k...2 ?) i3 X4 g/ U8 [$ p( N! |* ?
Unbind(HttpContext.Current, SessionFactory)! i3 Z5 d; V2 ]% Q, H
  \. W+ s2 `' v  V4 S! t" Y5 n
context.EndRequest += CloseSession;1 s4 z. w! F+ h; A6 U0 B* |

+ ~% A0 u" b; o; M 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-9-22 03:07 , Processed in 1.326436 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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