埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?7 k& ?5 S, J0 Z" U

5 n7 G- G6 P0 D8 x9 w谢谢/ N; D. b- ?! c/ U; ]; d5 N

- K0 h! F5 m" g2 ?2 Z- h<property name="current_session_context_class">web</property>; l: S  S" a4 r/ v0 Q. {# U
<property name="current_session_context_class">call</property>+ x- `4 \9 S7 d3 m8 C) \4 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 编辑 , ]& t. x. _8 U7 {# y! L
+ ^3 {- U' K9 |
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
% |* K: _: M+ i; U& h9 T' ~1 z* T6 F7 }7 l' h6 |) x
: k3 `5 q/ e. O' |4 H& Q" B$ g4 _0 f
Chapter 2.5 Contextual Sessions
理袁律师事务所
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
) K8 d% a/ }' E/ I- E  j7 L8 j7 R, p5 z0 u' k( j& [8 `

; t; D* a7 q. S8 uChapter 2.5 Contextual Sessions2 [) ?/ m: A/ x0 c+ K7 v% X, x+ \
gamahu 发表于 2011-7-14 21:56

  e2 V! R3 Q/ [' }( a  r4 m
5 U0 M  S- s) p2 {谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
2 d2 J7 i7 l# r7 M& _- k7 _: ?# p* `; e7 S
现在还多了个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
" ^" Z: ~5 j9 K& @: G1 C, V0 o0 x基本参数:
, E8 m! x8 c6 M* V1 P8 xjta | thread | managed | custom.Class5 M2 y2 g9 i( i7 K# c$ J0 y) l" i6 T
主要是配合* A( q" n( e1 Z0 ~6 z  U
SessionFactory.getCurrentSession()
5 E# g  x$ m5 Q' F1 z来用的.
, C/ q$ ?6 C0 A* h- u5 ^, S3 tThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
' J; u& N, X5 J1 f: B0 ]- KWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:$ ]2 K( u  d4 T/ `, K' R0 X. O7 \
context.BeginRequest += OpenSession;
( L: O) J; C7 T.Bind(HttpContext.Current, SessionFactory.OpenSession())
5 c& h& U: }5 \4 d! C! |* r% t3 a; k. `  M' A& v+ u7 c
//do transaction
5 b9 [: U7 [5 K, \3 }2 zgetCurrentSession().Submit();
- c* H! B0 @, V7 Q" D/ EgetCurrentSession().RollBack();* O! ]& F5 v+ h* U4 z
...
/ i5 q5 G" N4 e0 Y$ e3 a1 EUnbind(HttpContext.Current, SessionFactory)
- y0 f+ i8 W* c9 ?; ?! J6 L- R8 l
context.EndRequest += CloseSession;
- ~8 X0 c% q3 ]3 h
$ a8 P& R7 Q  k, \ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-25 23:41 , Processed in 0.231219 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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