埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
* F+ i3 ~# u. z+ B( v
2 j7 \3 X1 H$ v7 U' Q: w谢谢
- b$ [- U0 S$ l! A, M% Q! W$ W7 g; K7 T) E: A  Z
<property name="current_session_context_class">web</property>0 P; K/ k  ?8 s( a6 ]
<property name="current_session_context_class">call</property>
0 g1 }3 @7 ^+ U' O! y3 o<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 编辑 6 `( }& L+ h8 k+ |# e) P  f+ L
) p+ t4 R. F8 C: o
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf  q8 d9 Z0 X6 {9 [9 s
: p+ [( g5 L; r5 B5 @1 L/ i: c

  _# A- d# Y7 R, d( U+ ?3 UChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf7 @: c6 E  {$ {4 R; r. Y9 t7 N
( O6 ~  J8 S( B# l! ~. d
0 A- N( {; v  J: J7 a( D$ N
Chapter 2.5 Contextual Sessions
# `, _9 X4 f& t! V3 y+ q0 dgamahu 发表于 2011-7-14 21:56

# ^& A& f/ W: u: R/ S) {" R0 }
# f4 K! Q0 ^1 P谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
# C: X: q2 K# j$ C# H. z+ c- R5 L
现在还多了个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! C" C" d/ M8 u
基本参数:
" Z' W$ c6 K- F6 y- q% f! I8 z0 `jta | thread | managed | custom.Class
9 X4 K* G  ]1 K4 E: @* ?6 j* s主要是配合4 |7 D) ~* y; B9 K
SessionFactory.getCurrentSession()+ P* J1 K9 ?# {* ?0 N. y( T
来用的.
( }- W# j+ z; }& y# Z8 a  ZThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
) D9 H0 Q  `% X; H) }0 EWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
& }$ a) @- w/ m- P% @' |context.BeginRequest += OpenSession;* ?" N, r2 j# W, Y( c
.Bind(HttpContext.Current, SessionFactory.OpenSession())
- q" q, c* C, C% [, h' x3 t
( M+ N5 \- I, A/ ?3 Y//do transaction
, K7 Q; L: j: D3 R  Z/ t$ B8 fgetCurrentSession().Submit();$ h/ C5 ^- p3 G5 ~! |* W
getCurrentSession().RollBack();$ A- f1 ?& \" @
...2 l5 ^( l. T6 A3 {
Unbind(HttpContext.Current, SessionFactory). X) r- W! @% F1 d+ h; s
/ j5 F9 S3 Y% V0 z. w8 |
context.EndRequest += CloseSession;
. B" N( |7 ?; y& T5 X" e* N- u' h, X! K9 u; G7 \3 _  J) B8 i$ B
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-5-10 12:50 , Processed in 0.225204 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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