埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?; p6 I+ C, \0 z/ t0 a' b

+ c9 A( q% J1 @$ z8 P* X& z- s& m谢谢
5 M, _& x: S* v6 O* x3 J) R  e; @2 w+ l* b! m
<property name="current_session_context_class">web</property>7 S" V/ o: L: k+ p8 f: l
<property name="current_session_context_class">call</property>
" I0 e" Q, m) r" o0 Y4 {<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 编辑 1 j! ^) N9 M8 K1 i4 b+ ?

& h% L+ c7 }6 C# I+ f- F  E1 P  ^( M$ mPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
4 b; a/ a9 H* h( E6 H* j' g! S6 Q' u3 G5 i
  K; |) ?$ H. o" B5 p
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
5 C9 s: W! [: ^8 s! f" O1 H2 H
* p/ m/ R5 q) ?: @! _* U4 D# i1 z, p3 E: ]: {+ D, X. T
Chapter 2.5 Contextual Sessions0 G- P1 o( E. I& n' R# b
gamahu 发表于 2011-7-14 21:56

6 t9 c& O- N: \7 O5 g) b5 |8 `4 v7 I0 @. t7 Y; l/ I9 Y2 ?2 J0 ^8 I, I
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.  ~1 o, U" w  o
3 ?; |8 [9 W3 b3 ]% q8 `$ \
现在还多了个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 U  N7 s3 u0 c3 m  r基本参数:
1 a5 h& v) m/ b8 A9 U6 ?7 ~9 Jjta | thread | managed | custom.Class* I- ~/ Y0 [: Q3 M1 X
主要是配合
+ s9 {3 E/ V" z4 B/ b! BSessionFactory.getCurrentSession()
9 |9 M+ s' A& x% m" e" ~) u来用的.% z% L. v- [! C" M: b' v  S" d
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,, ~' m' y3 n" D0 K) ^" d& O$ X7 H" @
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:+ l0 r$ U# b/ w- o4 c! r  A9 h4 T2 f
context.BeginRequest += OpenSession;+ f4 l9 T- u) M! S4 O7 g' L
.Bind(HttpContext.Current, SessionFactory.OpenSession())
4 o9 g& l5 T; K, r2 I
5 O4 r1 @  G( [9 A  F//do transaction
* r5 x) Q; u5 x6 m7 y- ngetCurrentSession().Submit();9 }6 w3 J* y1 a& q8 G9 I
getCurrentSession().RollBack();2 {5 }. B7 s( ~/ Q: \# ~8 B# x
...
- j, R7 V' a6 W  F4 {" c' \2 W, }  }Unbind(HttpContext.Current, SessionFactory)
0 w, L# H6 r! E; j- q0 ?' ^
4 L- T: L$ c2 P) L  q2 N2 Dcontext.EndRequest += CloseSession;+ D" [3 x& H$ R4 Z2 _: x, ?/ |6 T
7 z/ J4 ?( @  N" ]
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-18 09:32 , Processed in 0.133570 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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