埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
3 L9 V# F5 t1 G0 r& K- U( h3 P
3 L8 C0 f( P( F$ Z* d6 L$ {谢谢3 W" J2 v# t' Z! X4 S) t' O

( P: V2 N3 O" a8 u<property name="current_session_context_class">web</property>
3 p$ T7 K6 z! h; b+ P. S<property name="current_session_context_class">call</property>% M3 K% D# P7 d2 Q$ ]/ J& ?. W
<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 编辑 % h8 a" U8 Z0 g& l9 @7 r+ q1 p/ k
% B  o! O) V) W0 C9 J" i" P
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf0 e) D, B1 H2 `/ R' X+ l

; m3 e6 |4 X) ?6 `% P7 l! y1 i6 u8 y2 ]/ i# _! T/ V
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf7 ?; r- w1 A- g3 R+ ^
7 m' z7 `% i& u+ f  ]7 o8 _" u! x

2 C: l# p# g) e9 T4 n$ b- M' EChapter 2.5 Contextual Sessions
' q  G" w' |9 f% U; i0 f0 Jgamahu 发表于 2011-7-14 21:56
$ \9 j  \  m, I7 v7 v

- H& a4 `+ O9 H谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
5 [$ \" h1 C# S1 q4 S: u$ H. L! W7 K0 w- `
现在还多了个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* J' y" j& y0 N# P$ Z) e" l9 N" [
基本参数:
# i4 J* T0 E. u- j* Kjta | thread | managed | custom.Class8 A$ J$ D4 f, I7 S0 S+ h3 @
主要是配合8 M7 Y& c, Y6 y2 F) \5 Q  d  y
SessionFactory.getCurrentSession()  G! x  X0 ]) _7 v3 o2 p0 i4 n2 k
来用的.9 Q' o( I$ R; g* x3 z5 `0 ^
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
# I( z* j4 I, U9 G0 g) ~Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
: h+ t% Z: \1 L  ucontext.BeginRequest += OpenSession;
; ]+ j" p7 B3 @8 R% Q.Bind(HttpContext.Current, SessionFactory.OpenSession())
* K& j+ J1 |, ]0 F8 U$ O. V+ D( H" ]' N2 E; H2 A
//do transaction: q3 Y. g5 y. e% i! b
getCurrentSession().Submit();) ^% v6 r  K4 C1 Q: n& H3 `  O2 b. \
getCurrentSession().RollBack();
$ X( t/ B  i6 N...8 h5 j4 d' }  G
Unbind(HttpContext.Current, SessionFactory)% f' y, D0 N1 B' L+ T+ W

& e5 o1 U/ u" Q: Y/ }0 \: @context.EndRequest += CloseSession;: _& a6 i2 v( F0 ]; R2 V' D
- J' w  B0 `% `: O" O" S2 H
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-10-10 21:51 , Processed in 0.270563 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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