埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
5 q1 \+ R& ]0 s% d$ s4 {. F  m$ v; K4 o- O6 j
谢谢0 u% k: P  K$ U7 j. d7 D$ H

; n* I: O1 e7 C<property name="current_session_context_class">web</property>
- C- Y) C$ X/ r3 `2 {+ @: v& Q% o, l<property name="current_session_context_class">call</property>/ R9 R" ]) c6 g
<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 编辑 $ T+ @8 T- \4 e

1 {1 X, Y0 a$ w5 r- S+ d/ RPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf/ r( d7 E# M* I% g0 Z% N7 y3 Q
  I7 V2 X) z$ e% M" a( N

8 x0 Y* b7 ?. U4 q( `) i/ EChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
# D( w6 d, C7 v3 ^# i% x2 ~& e  I( {
' E# J, h" g, H) I' R9 j1 i9 W  y
# l( v7 S  T2 i  KChapter 2.5 Contextual Sessions
9 L; T& F. m$ q" ygamahu 发表于 2011-7-14 21:56

& V( A" V2 w* W; H9 I, u/ t' k. \0 F. I5 _( M# Z0 \
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
# `  d$ y, H9 E. e" }: G9 C- n" ^2 f3 [
现在还多了个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
, C% H% W, `# c' J+ @' U$ Q基本参数:
0 A+ ^4 d% A! p& A' e* Yjta | thread | managed | custom.Class
$ z3 k; b& u0 D1 r: Q2 H主要是配合5 h3 l7 N& \3 P) m. o  v
SessionFactory.getCurrentSession()
7 B" e4 y" p" j) W# e来用的.# b* G/ V) x- H7 S: ]* ~/ a
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,8 g9 e$ t9 T7 ^+ o+ L* Y4 S
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:2 w; y; A5 c7 A  H- M
context.BeginRequest += OpenSession;
- J( X6 t8 u4 ~.Bind(HttpContext.Current, SessionFactory.OpenSession())& a" z; g- V# O4 ~, w% |8 {$ j

6 g: a$ }2 x- Q* X& Q2 P  r# V7 E% {//do transaction& B' H. C% |5 J
getCurrentSession().Submit();
1 j4 R" D& M" l! B8 x: A! kgetCurrentSession().RollBack();: w: }# k6 F* s& g6 h. B- n1 C. H
...8 H% @" p# b/ y7 Z% A$ Q1 @" W
Unbind(HttpContext.Current, SessionFactory)0 t3 m& }) K3 s/ p' q
$ l' x  j& L) D3 F4 s6 F: H( w, [
context.EndRequest += CloseSession;
/ a1 `; v; d9 j/ ?$ O8 y+ h( o- @% P2 n! C
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-22 13:22 , Processed in 0.099826 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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