埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
* t1 P% i: ?" Q) ~
1 b+ W: N7 N/ y/ m' u$ Y谢谢) S& K1 v3 T' X3 Z8 v' \! |- n

) `4 J( V# \7 ~) C<property name="current_session_context_class">web</property>
& B" G6 o8 [9 H/ l& ?<property name="current_session_context_class">call</property>% d& o2 n; [/ k2 l/ c: R
<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 编辑 : x2 v+ M2 ~7 t# H- v: I4 z+ z- E
4 w( V+ E7 ?3 T9 @, J
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf2 P: n2 H9 U! x0 P7 p) l

' h$ Y# J  [8 Y3 a( \1 c* N/ c' s
8 p( Q- x- r, W5 ?2 b' |2 H' A( j: IChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
, ^+ d/ c, S$ e$ V7 d! r* {* W
' i# m: G) g1 N
" d. D; R6 t+ `3 W2 \3 a4 m( u1 ~Chapter 2.5 Contextual Sessions( h- m4 [; i& z( I
gamahu 发表于 2011-7-14 21:56
+ H% C6 H: G% Z$ P
' _( t: \4 d" o8 R' W1 h
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.+ P/ p( d. B+ j4 ?3 |, e
& K- |+ U  B+ U1 V0 N6 j( E3 u
现在还多了个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
, y$ W6 {8 I' {1 f: `/ T+ M基本参数:
% m' T, D1 u/ sjta | thread | managed | custom.Class
* a' Y9 \* F* _0 k: R主要是配合
6 _5 C+ _9 U7 K1 w7 v9 aSessionFactory.getCurrentSession()9 W* A* c  T; P1 W2 W6 ?
来用的.$ P1 m! S% P* k; ?6 O; D# C8 m
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,! U1 x0 d8 R7 j* x& X" s
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:; i! a& ?. ~; A; u3 Y
context.BeginRequest += OpenSession;. ]; j5 ~6 S* t4 X7 T
.Bind(HttpContext.Current, SessionFactory.OpenSession())
+ S- a/ j' {0 b+ F' Z" Q1 X8 c" v" M; B
//do transaction5 m9 ]) \; a5 H/ ]4 k: J6 Z1 }
getCurrentSession().Submit();- {  Y5 O& ^2 k/ a, H
getCurrentSession().RollBack();& U9 o- d4 A- m
...
6 e2 V: f& V+ c7 a" N1 xUnbind(HttpContext.Current, SessionFactory)4 l8 x, \, E# e2 m! s4 I4 G

+ R  d" ^' \/ o9 [' o6 U* Tcontext.EndRequest += CloseSession;
" M9 F5 Q4 m  D5 _- g" [+ ]% B- a/ s1 l) {: @
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-18 16:06 , Processed in 0.091421 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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