埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

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

9 `+ W$ f8 d8 u! R/ s& r5 K8 C谢谢: a" B! \9 S( t, b! j! [* `

3 G% D6 w  x, H. U$ p$ z& B0 a<property name="current_session_context_class">web</property>6 m% s) j7 H  M& W8 I
<property name="current_session_context_class">call</property>2 _# G$ @3 A5 @5 E7 G& x
<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 编辑
) v0 D, f+ h) e
. a$ l& }1 g0 [! ^- Y$ G8 wPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf* P+ R# Y, g2 F8 g3 @" z
8 S: v4 {3 n6 s$ o; U2 i

, n- _6 \! a' kChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf1 _+ M7 |2 O- Y

% F4 ?3 z9 M6 H5 b0 N. \+ `- S! p/ ^# m, j4 x. s% b
Chapter 2.5 Contextual Sessions
4 R) c9 H) W. _0 l4 b  ?* N+ S* [) n  T4 Ggamahu 发表于 2011-7-14 21:56

6 w! K$ n4 k7 Y1 L/ C0 W, L; K
- o; d; e: A4 M' {* }谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
0 E# }. A1 v9 G2 f9 u3 m% M( J# r  i. b/ ?  R* z1 g& m" e% o- x
现在还多了个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/ V+ e. ]/ O! R7 E* G
基本参数:
5 p5 d+ b9 c+ @7 q( p* l' [jta | thread | managed | custom.Class( W1 C7 g7 P; k' I) @/ K  a* Z
主要是配合& j8 N. C* [! T% K: y7 L8 f+ i
SessionFactory.getCurrentSession()
+ o+ c6 H: w* W来用的.9 i) X8 B1 @# m+ B- m. K
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,5 t  S7 S1 I' a# E( m& F4 E
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:% V: u6 t- A% r8 m
context.BeginRequest += OpenSession;2 z! C1 N# I. Z) y' ~7 _
.Bind(HttpContext.Current, SessionFactory.OpenSession())$ i0 O1 Z: a0 B' B5 ]

" Y5 h* h. U& z9 e7 ]5 _//do transaction
7 @) l2 u7 I) ~4 u3 w- p6 R- WgetCurrentSession().Submit();' D& [) v# P; i' I7 \* [
getCurrentSession().RollBack();
. _# ~* [9 @2 e4 i- \. ]5 ?...9 ?* z7 q; U: T7 y* w8 W
Unbind(HttpContext.Current, SessionFactory)
+ U# f6 @, e% p1 @' X7 s# T) ~! X: B, k0 T: o% @* n  H5 ^. `
context.EndRequest += CloseSession;
7 Q& D  D, @" q- ?" W
6 F% R4 n$ a0 x1 J5 I4 N 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-17 04:40 , Processed in 0.247654 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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