埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
$ ~% P1 O1 B  X, X- j
( V* X3 s( r9 F. e谢谢2 B! [' A( O0 U' Z: E* S+ H% c5 g2 w* C
3 g3 A4 e( d' ?! Q
<property name="current_session_context_class">web</property>
! T# C3 I, V: |; w# J2 c<property name="current_session_context_class">call</property>( n: \% C' ~& x  J
<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 编辑
, Z; M3 T1 k) X
6 _8 p' K$ J$ ]! S1 Q, }: HPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf& l% U  o; Y; B8 \% D/ R
9 u& n: c9 i5 y" m% M
5 @2 A  A9 p" d" @1 u: M' F$ o
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
$ y* t5 L% V) s3 ~  P6 }* r8 I$ ~- _/ S" G( S
  r+ w) V% W- u  \, ^  E( r! Y
Chapter 2.5 Contextual Sessions% P4 A; z% ?2 t/ X' U9 I' ~6 Z
gamahu 发表于 2011-7-14 21:56
* H2 S6 o1 \& V* n' j

, x# I. S4 t5 u; [) O谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.% m1 n+ K- ]& W; i) w2 X* Y3 j

7 H2 g5 a. Z" s) s$ u  J现在还多了个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; a, ^/ y/ k# \
基本参数:
' n9 A; V2 R) r0 r4 A- d# r. ojta | thread | managed | custom.Class/ s( `6 `4 n. a2 S: x7 d) A
主要是配合6 s+ I6 A7 z2 r4 L+ z% Z4 w
SessionFactory.getCurrentSession()  r4 U1 I7 K& T( z1 N
来用的." Z) ]- i, n! E! D4 y
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
$ b: h. j% ^2 B7 e" x) i- r) hWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
" A$ W  g, o) q5 g  L: mcontext.BeginRequest += OpenSession;
, ^% G4 f- G2 O/ }.Bind(HttpContext.Current, SessionFactory.OpenSession())0 h, [4 e5 g. S7 s
; [* B+ }* N- T& e6 L
//do transaction
$ E) S- y, A; j! s3 B6 hgetCurrentSession().Submit();
" l6 P/ ~" e1 n' L! p( v6 TgetCurrentSession().RollBack();& P. C; M) L2 f% ^
...: N/ B& H" E0 Y
Unbind(HttpContext.Current, SessionFactory)2 I& p+ a6 `& Y- l9 M

0 R% I3 Q4 o: \4 ncontext.EndRequest += CloseSession;* Y' h1 o; H* N2 O: _
: c4 x) A" ^" D( q
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-29 22:39 , Processed in 0.074067 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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