埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
+ ~0 X5 t3 q" ?! j  {& j/ U# a: z6 D. a7 L; U
谢谢
. W% c# u; e. i: L! e2 I; l4 j2 @; k5 V! V' y
<property name="current_session_context_class">web</property>+ [8 G* z+ \% S$ ?- s
<property name="current_session_context_class">call</property>
- Y* F4 h8 T0 o$ t% Z<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 编辑 ) W$ j5 F) v  U' H. W: ~
1 m: y0 o* v5 V
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf  u* s! _+ p  z
7 j; ~2 i4 B# I$ X) g: G* P
0 s7 O8 ^4 k6 X/ g" C  G
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
! A) [# O/ ^2 g; o* L) H; ]" U0 M2 t* _; }! J$ g

6 f2 F2 q4 }& _9 `9 K: ]Chapter 2.5 Contextual Sessions
2 y9 A+ h! r( Z. R) w, X! i; Wgamahu 发表于 2011-7-14 21:56

7 G% b, T: V  W/ t$ h& h# d5 D9 B- Z! i& m: S; g/ o" C' r
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.0 E) z7 L6 M: j

* ^- b7 d0 A/ T0 Y) f现在还多了个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$ C$ `- r; l9 {# V7 I
基本参数:: U+ O. x1 Y: L+ q! r3 @1 e4 l, ^6 D" K
jta | thread | managed | custom.Class
/ K8 T5 i0 S& |# B主要是配合
) z+ A( }) p; J3 q, j& pSessionFactory.getCurrentSession()
7 m0 P* j: L/ a: W来用的.% V( o" j- {: O/ Q* G1 U8 k3 ]
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,. c7 D$ F9 O% q
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:1 F7 o) U; H; B2 p7 B/ N% {$ G
context.BeginRequest += OpenSession;
1 I2 y3 x4 {& g( l9 B, h.Bind(HttpContext.Current, SessionFactory.OpenSession())- z* A2 B1 s7 p" A5 l2 d
  `- B! N" f8 L' t/ T% b) w0 j
//do transaction
+ R2 E( p1 e: V. M; n" _getCurrentSession().Submit();7 a2 `$ v; O2 j0 N! m( J3 [4 k' q
getCurrentSession().RollBack();
" N& c, @2 C0 }: V9 ~$ ~( }...  \* d8 e* d$ p# a& q
Unbind(HttpContext.Current, SessionFactory)
& V( A6 j% V' b5 r3 \) ]1 k5 L" Z7 }: l+ h3 O9 q
context.EndRequest += CloseSession;
% J# q. @4 L7 v: I# o- X  p2 X  m- U# o* D8 l
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-6-15 08:43 , Processed in 0.168441 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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