埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

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

1 s  Z; A# W2 W, D. l' j  J: O2 q  r谢谢* {% O* Y" G- v
  k8 y* Z8 v, Q
<property name="current_session_context_class">web</property>
* N! e) L/ I6 Y" m. s- M3 Q<property name="current_session_context_class">call</property>
# S- A+ L& W5 S& @3 W7 G7 q<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 编辑 9 u3 \+ ^! \) y6 E6 h: m* _: b

$ g. [  d/ U  S" e7 B- u3 e8 IPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  C3 p4 G9 D" h+ `4 i( t; I% U1 P- J. ]1 E7 C8 O
/ K) k4 Z! t0 y+ y2 Q. |/ b( |
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf5 K, i. G0 G1 c; Y; o2 t2 u
" `) V( L6 a! V9 b6 N( ^( y6 [
0 [) l1 e/ K, G
Chapter 2.5 Contextual Sessions
* w. U2 W) n, s- c' ]2 s* Tgamahu 发表于 2011-7-14 21:56

( U: G6 M# p+ Z% \, f! ^! m5 G, P
: h+ r) E5 `- D5 L8 R" a# H谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.0 N3 C! `; g2 e# T
, U( R$ V0 s5 @8 j& q% E, O0 i
现在还多了个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
8 ?3 [& y, L3 {% z' i0 Z* @! i  a基本参数:
  P5 W1 G6 f- Q  Zjta | thread | managed | custom.Class! e- _! V% x$ {5 v* o( H
主要是配合
- F: Y3 }. a& P& c2 H$ P: J, V4 f( a" ]SessionFactory.getCurrentSession()
* g; ]/ @' }, u0 d- _; {" l( F来用的.5 t; T" ?5 v; l, y, }( ]9 J3 H4 q: s
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
+ m. z! h5 i' p* ~) r! cWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:" [! ]& w! i$ a
context.BeginRequest += OpenSession;
5 A1 }# f  I: K3 [.Bind(HttpContext.Current, SessionFactory.OpenSession()); d6 L7 Q7 o0 ?4 R) X

6 u8 o6 a" m  v9 j//do transaction+ t, f+ Z2 R. t+ w# q( X; i2 [- b$ o
getCurrentSession().Submit();3 M7 P5 S* q" {4 R: v4 z
getCurrentSession().RollBack();
/ l8 A0 K6 y5 Z8 r5 J...
4 i6 d. W5 O, K8 J  V4 nUnbind(HttpContext.Current, SessionFactory)/ T* D1 e$ v: C

2 h6 X+ @5 E( ?! Pcontext.EndRequest += CloseSession;5 a. }0 E( u; {4 x" U$ A0 Q( W! h, I6 P

7 t4 L# m  F: e: w; |: s 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-9-22 13:14 , Processed in 0.075587 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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