埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?# e5 O& J8 q6 _9 v: N( x  S
# N$ i5 Q/ i. z
谢谢
4 a' M/ ?! v% H& O4 c0 ]/ v% _3 E, B9 \7 s/ v* y' {
<property name="current_session_context_class">web</property>
4 B7 z3 M0 E3 n7 Q<property name="current_session_context_class">call</property>
7 R2 N7 H" h' |<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 编辑
: W" G7 Z/ Q0 v- s8 I8 o$ z  z2 d. S  n+ z% g0 b6 `. o3 Q- U
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf6 d- P3 o7 I. Y+ z4 R

+ S( c+ |* }) ~( T0 c6 F1 N7 `+ z  u* f! H2 ^/ q
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
- n4 H2 k. X# `' }( F1 S- T: {
# F" b. J6 ^( }- V  c3 r% x/ _7 Q. ~2 z8 @9 X  D
Chapter 2.5 Contextual Sessions
$ ]$ U/ a# k- W" T, Agamahu 发表于 2011-7-14 21:56
1 V% p1 ]/ D, ?% o" u
% Z4 |' b; ?) T2 G& o7 S- D
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
* r/ N* U; {/ W2 x
, e3 H% ?) M  n, G; g, E  ^现在还多了个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; c2 r% Q9 o! _, k3 h. g% `  v
基本参数:) I, ?3 p5 {7 P. S, T1 e
jta | thread | managed | custom.Class* x2 k7 m# X$ R: K5 D$ F
主要是配合
, K3 V5 B" n/ g9 vSessionFactory.getCurrentSession()
5 S: l4 l( Y1 p3 i! v, N来用的.5 i3 T. H. w) P( X" F1 j  J
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,1 d% L5 T" }  ?4 ?3 j% V
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
  W! |+ f0 M2 r' p3 Hcontext.BeginRequest += OpenSession;
- T' z- C5 o1 F; _  z/ }4 u& N. `.Bind(HttpContext.Current, SessionFactory.OpenSession())" m9 M' o1 C1 T* B$ T: r
! k6 R# d& N) D0 X! Y% T
//do transaction
) k# _9 j; e0 {/ q( G* f- GgetCurrentSession().Submit();: h, E7 d. \- e( b5 X
getCurrentSession().RollBack();
! N9 L. N- [/ ^...+ \1 }* v! Z) R+ ~; C: i+ J
Unbind(HttpContext.Current, SessionFactory)# Q* x% J- X% c& \

0 r. C5 u+ ?( Pcontext.EndRequest += CloseSession;
9 q8 M# x* P- }; v5 h* `$ k% Y
& C2 a3 ^& i) v4 q4 w5 J 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-11-22 23:27 , Processed in 0.204996 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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