埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
& j# x, \6 _" e$ U( ?9 U) ^1 j0 x" z8 Q, i- }3 d
谢谢
. Z4 n% W3 V+ f/ |7 N5 \7 Z
0 O+ t. h) ]  O4 g2 R<property name="current_session_context_class">web</property>+ p; `9 e  `' ]* q
<property name="current_session_context_class">call</property>
# e" E  x+ I1 Z" l7 `2 C6 A" K<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 D8 t. s/ \/ e
" D7 j+ N$ R; k' {: s- p$ n) n& ^
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
8 j) b. |+ l7 Z/ {0 k+ K
. F" C- V* _# r
7 D9 s* z5 X2 t/ AChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf! z* {/ f" q; ~( h& S+ A, W
' L4 ~# ~: y5 l& d  N7 t

2 J& S. N; O9 U  V# P9 I) B: R: }, |Chapter 2.5 Contextual Sessions
: Y& a% F0 f6 \" |) xgamahu 发表于 2011-7-14 21:56
* x0 p( A! }1 h8 d

/ }: T1 X" d% k! q4 e% a谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.+ d, z' P. n9 l/ _! y% c0 X
* x7 h) O. j# f; F# _! p
现在还多了个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. E+ S0 l) u1 v& a6 T
基本参数:- G; A' o6 r* x7 L# c  C7 O4 U3 \
jta | thread | managed | custom.Class+ O0 @5 o0 p5 S% G. V/ \
主要是配合
# |# ?( H0 G" R% r; |, W( uSessionFactory.getCurrentSession()
% K( ~' r0 Y& W! l( G来用的.+ E. d+ b2 C# @
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
4 U$ v4 |% ~: E/ E' O1 \8 G5 |Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
5 w9 D* t" u- u3 q, pcontext.BeginRequest += OpenSession;
, p1 f3 B  F. v. {- D: z.Bind(HttpContext.Current, SessionFactory.OpenSession())
9 Q9 a3 r# I2 Q# G% I( q5 ]0 x
4 W2 i! E% b! e' J# ~+ ~//do transaction  U2 b$ u+ s, g
getCurrentSession().Submit();1 e5 D2 l& g6 I& E7 o& d
getCurrentSession().RollBack();9 b$ X# v7 b& E/ U# ]5 w# W
...
) G- |$ u/ n& ^5 p; w7 hUnbind(HttpContext.Current, SessionFactory)
# m1 a8 m( _6 L+ o( j2 R. `' r/ z* K' W* a
context.EndRequest += CloseSession;& J* a; ?' ?5 ~3 o- h3 Z

' r4 F; j' k, ]# Y; q! ?( R" {/ N 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-8 08:28 , Processed in 0.197499 second(s), 12 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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