埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
" K5 Y% i' ^2 J7 t- i( z# m9 b9 e5 A  r
谢谢
$ Z/ S1 \6 t/ k6 `7 {4 q, J9 i! x0 D$ m0 n
<property name="current_session_context_class">web</property>7 l% K2 w  p1 {% b7 l3 @
<property name="current_session_context_class">call</property>
; J8 \! t1 y9 O. W4 A' y% X0 ]) T<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 编辑
; P+ \7 F+ Q7 o7 A  A! O* Z  x: G: \8 ~
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf" }# n9 D0 U- C0 p# ?6 S$ `8 L" ]

% o6 J" k! `, |$ L
+ ^1 f! ^) `( z  y: rChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
- ?. F$ J5 U6 A3 k! Q4 O5 r; d# O$ P3 F) L* F1 I. Z* o" n7 Z

5 Z8 W$ c5 Y7 Q9 k& V6 HChapter 2.5 Contextual Sessions/ p0 M" E3 s1 L( w% Q. Z; w/ k* Z
gamahu 发表于 2011-7-14 21:56

  \2 H" F9 ^: _  J" t8 s4 T4 u9 g. M  o  V2 O5 D
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
# J2 H9 \4 q( N# [! P7 F6 g- F. v6 Q5 I+ N4 l) t$ K# h
现在还多了个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- `9 S  D1 C5 i0 }/ J
基本参数:7 u$ l. H% J+ |  M
jta | thread | managed | custom.Class
* m5 g7 g& c+ S  i7 Y  J7 `3 e' H主要是配合
. o  p) p1 ?7 W6 T) R" E" HSessionFactory.getCurrentSession()
9 Y% A8 J/ ^0 s& |$ e1 V( `. W来用的.! O) \4 v. i0 b/ n
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,' f# m+ C6 l" O4 B% i
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:0 y+ k! b6 a1 d+ w" ^/ n
context.BeginRequest += OpenSession;3 R" L! R( e/ [2 ~
.Bind(HttpContext.Current, SessionFactory.OpenSession())6 L' l8 \; q- `9 v  H4 \

* [' y$ g# d7 g5 S//do transaction" d. u0 p5 B2 W% s' s1 K
getCurrentSession().Submit();
- Y3 C8 ]* h5 h& R1 fgetCurrentSession().RollBack();# s% X2 L" `' s; n/ G2 {8 Q, R
...! H. E' [6 X+ n
Unbind(HttpContext.Current, SessionFactory). q& g2 a5 ^" U, {

( \5 }: Z0 D" Zcontext.EndRequest += CloseSession;9 _( O5 D1 j5 w; d6 V  D
- R! z& Z4 O9 A1 B3 y  I6 y* V
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-10 12:51 , Processed in 0.158970 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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