埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?* x( T, q6 U' D$ P" d4 `0 f) i
) u2 g* n; G$ w. u2 M! `
谢谢" B, E# d7 f- p1 M

* m  ]' O& w. W- v<property name="current_session_context_class">web</property>
/ G5 _* @5 Y8 s" d" l! p9 b5 I, w8 W1 j5 @, k<property name="current_session_context_class">call</property>- d' O( @9 c7 ~
<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 编辑 - `$ Q- L; o1 K
: x: U+ h3 a2 l; L! \+ [' K# G
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
' T4 [2 b& D# n- ]% n: s5 I
( t  @; a" {1 z6 j( H' `8 n/ ?. ^3 ~1 U5 V8 e
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
1 |3 I. a! }6 X9 P( t
5 t2 d! x2 N9 }0 D  g2 i& o1 X; t& A, V6 `2 w: F8 A
Chapter 2.5 Contextual Sessions
9 \! c$ X' D  O3 Vgamahu 发表于 2011-7-14 21:56

$ _9 M- M* l) t1 v+ {5 y, \# P7 ^6 [* S  n2 p
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
0 @  p* f5 R/ U0 G  R# b
5 }$ Y! w+ `% O7 ]$ n现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
大型搬家
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what1 R3 Q- E6 o( K+ M& i$ u% x) L* W
基本参数:  u0 j" B7 l: S% n; l, m1 }! O
jta | thread | managed | custom.Class
7 C! T. h& H2 ?9 V: ?主要是配合
( \$ D( l# D0 w+ u( C4 k4 A- ASessionFactory.getCurrentSession()$ r3 `3 i) R/ a* l3 y
来用的.6 {) E8 g5 N0 ]% n
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
8 _' b5 o) a0 v/ u8 \% J3 qWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:3 o6 ~# q4 m! B: L
context.BeginRequest += OpenSession;
/ }% C( d# i& R! S2 p5 S4 W* l.Bind(HttpContext.Current, SessionFactory.OpenSession())
4 I, W8 y2 g7 D9 p  p  G. N* J
$ ]8 \! u9 @$ L9 i//do transaction" K" z# q2 R3 A- A# n- V
getCurrentSession().Submit();
" \* ]: i1 M& }getCurrentSession().RollBack();
& W4 T( _6 O* d6 [...
, F8 |; {3 C) I# \$ \; [Unbind(HttpContext.Current, SessionFactory)6 m: o/ h0 J' \3 n" c. E

+ \% E" F0 O7 v; B6 k% M& mcontext.EndRequest += CloseSession;# o5 U, g3 W2 }% ~( Y- W% ?2 H2 X6 J
* _1 H" c' z% ~% L+ N
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-19 17:22 , Processed in 0.180032 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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