埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?  L) _4 g/ G7 j: l' \" Q0 ~
8 L) ]5 h* P& P; ?! r) h' O
谢谢
6 C; n! A) ], s3 E
6 y, R' H, {0 p. w<property name="current_session_context_class">web</property>+ @+ o2 d; P: U2 i& h
<property name="current_session_context_class">call</property>* V/ J6 b' e0 f9 L$ z% C: T3 A; |
<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 编辑
" r' J* Y; l6 T8 ~7 i5 i% v
/ P4 y( I5 e! }) y7 SPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
6 Q4 I0 h4 n6 k0 o9 I( `" F. y: P* ^2 L0 g' }+ F
0 E  }  K% \/ ?) Q% W2 l
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
4 ?# o5 N2 q) E& U  w
/ z8 L& J$ K0 M0 Q0 t! x# f0 |9 o! F. Y# ?: G  o  P3 p3 U
Chapter 2.5 Contextual Sessions# T6 n5 n  R% C2 ^" X, ?! D8 U# C
gamahu 发表于 2011-7-14 21:56

; n  W2 |+ R7 ^" U2 g. X) ?' {" G# K  W, e$ T/ ^
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.- |; d4 h8 z$ h* A( T% o4 x

) @! z' c$ T# e; T" b现在还多了个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
; {! p) X* U8 R; ~) `基本参数:$ `# i/ l- {5 t. I6 \# E( t! b! c+ r
jta | thread | managed | custom.Class# V& Q5 G5 v: n- F8 h
主要是配合9 O7 F& p* R& O' i
SessionFactory.getCurrentSession()
  _# q8 C% d- {  H, l4 U9 A来用的.
. k8 i+ v8 N4 z9 kThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
* Q' C' ^9 _1 c/ K$ Q+ W  F1 F+ H) OWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
0 j! I$ x% d( C5 D8 l! t7 ~context.BeginRequest += OpenSession;
* e2 n1 e  R1 e" ]$ n/ }.Bind(HttpContext.Current, SessionFactory.OpenSession()), s+ E8 u8 i( g1 g" ]" s- x
3 ?# N  _0 ^+ G6 y6 d
//do transaction
& {  P$ a" }3 v$ G9 B- GgetCurrentSession().Submit();+ u5 h7 `2 M1 Z. D7 \1 T
getCurrentSession().RollBack();
! i& G! Z% `2 Y+ R, a# u! B.../ |& E! x) H! a6 \
Unbind(HttpContext.Current, SessionFactory)
$ n. i  j7 c% h$ _  q8 F+ b# B6 t3 \2 {
context.EndRequest += CloseSession;$ t. c; j1 {6 H# x

3 [+ T- _, M6 c/ f/ z" d 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-13 10:59 , Processed in 0.155535 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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