埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
) g" q$ e( l1 v2 t# `, u" a( N' o1 @" y  o/ }2 a' U
谢谢
1 p# ?, m- a; p8 X. f8 c7 Z0 A0 w1 r+ z
<property name="current_session_context_class">web</property>; C" g) ^& A; V* J
<property name="current_session_context_class">call</property>  j! Z$ u, ]* ?: v2 b, A. ^+ r
<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 编辑 " G; Q: |# b; @6 h

9 k# x7 q5 R& {) S! dPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf  f/ w( v: v! }/ m6 m1 ?
- Y$ [# Z% p& y0 o# t% b; W4 z& i
2 Q! P4 o1 |/ l- u
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf+ D" b. O9 u2 x6 d5 W

/ {. \# T  p- C; H( k- x
& t! ~! S( q. a  M1 [Chapter 2.5 Contextual Sessions3 f' e0 F- L+ o2 a* J$ s
gamahu 发表于 2011-7-14 21:56

0 i/ T4 _! ~/ n  q) M# _6 b
/ g& o% C% \2 I# f6 q' E  g谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
# _1 H- D+ L4 ]" c6 n8 r
$ `6 b) H0 Z" D2 P- O2 g现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what0 s4 ]. w/ J5 B+ B
基本参数:
2 j2 q: L+ A$ j3 \jta | thread | managed | custom.Class  w3 I4 ?) ]& i2 [1 @2 V
主要是配合
6 @4 p1 x" i) v. G8 P' ZSessionFactory.getCurrentSession()% F( Y0 t4 r3 S  G) p
来用的.- K2 r/ z4 N7 Q$ a9 |4 Y
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
6 h! f+ X6 k) ]Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
8 n2 ]5 t& u. i; R5 w' ]0 Mcontext.BeginRequest += OpenSession;
& j. w0 Y2 V% x# C.Bind(HttpContext.Current, SessionFactory.OpenSession()), U  U# v) j% G8 o9 \- p
3 |/ ?: z, }- P- Z! n
//do transaction
  _$ L* ~; V+ O/ F1 qgetCurrentSession().Submit();
! a" L' r/ F+ N3 ~7 PgetCurrentSession().RollBack();
  h$ S0 H8 C2 H0 c9 {1 d  m...9 m% ?6 }* J5 ^7 C
Unbind(HttpContext.Current, SessionFactory)  t! p9 |  G: B( `

1 B! n7 s/ E+ [* ^- _context.EndRequest += CloseSession;
5 U; f! W6 ?: t8 k6 H5 X( x( R/ I: r2 K
% E: B1 y/ X) O$ [ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-22 06:27 , Processed in 0.097560 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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