埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?% q; \4 H1 q6 W! q" A: f$ a

" i2 n9 F0 P( \7 P  F1 b5 o. @谢谢
' z7 T7 Z0 u' T4 l+ P. O
; A- f# f; N( w; B$ D( m" {<property name="current_session_context_class">web</property>
2 S* Y; ]" K# L# O0 t<property name="current_session_context_class">call</property>
" X8 [) b7 [7 {<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 编辑 7 r3 b. N0 M* I) Q/ \; O7 J

0 o) w1 F9 t  F$ b5 G- JPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf! C5 P3 `6 n0 C; h8 C
  e- G, X# A9 g; i6 z8 y
" {& C. q: F- v7 b# K( g
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf6 K, ?' A5 b, _: h3 I7 K9 k

* h7 G, L4 Z0 x; k
0 v* X0 ]+ b6 R/ c" z& d  y0 k( kChapter 2.5 Contextual Sessions3 k! k. [9 q2 J3 k1 [- k3 c; X
gamahu 发表于 2011-7-14 21:56
: H! ~( w, O0 h; b
4 c% L/ w% ^8 I7 Q: L) Y9 _( `
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
5 h1 _7 [% _, j8 O. [/ t& f! ?
3 ]9 _' |9 E" u" w* W+ F4 l( A现在还多了个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
- Q7 S& f; e* h0 V" q3 \5 l6 i基本参数:5 P7 @6 v+ V: Z* c! f; R
jta | thread | managed | custom.Class
9 F+ e% B0 s* D% m' L主要是配合+ h7 O! W0 s/ ^& ?/ q( w) f8 _0 \/ N
SessionFactory.getCurrentSession()
! S1 ^7 E- {) F2 P1 J来用的.; _$ ?" {) V4 y8 Y( F9 F
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
. F5 p  `6 M  e) w9 K# Y0 [( TWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:2 r8 @  @% {* @/ i( ^
context.BeginRequest += OpenSession;6 t2 g0 V7 L0 W% P& ^; N
.Bind(HttpContext.Current, SessionFactory.OpenSession()), G% N+ i$ x% n  i! Y  T

# g! n$ E# E1 C6 o7 D//do transaction2 ~7 }$ |1 f7 n$ C
getCurrentSession().Submit();
2 b8 ~- ^/ k- cgetCurrentSession().RollBack();
! S  r, a% o# g...
/ ^2 J7 V6 l" \: n3 T; ?; T9 @Unbind(HttpContext.Current, SessionFactory)+ `; O/ J! X* F

; h% A. w- }$ h5 acontext.EndRequest += CloseSession;
- ]  k5 M; u2 Y; A$ k
! ]; v# p% X  k4 ?& H% d$ O( G 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-6-9 18:56 , Processed in 0.212514 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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