埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
6 J, }# k0 u+ ~  ~4 I& E3 v$ x) L2 r& |6 j; Y+ n: ?- G
谢谢
6 c& f; ^! y: |) {- W0 }$ C4 \3 T; E: [2 s: v1 [3 \/ N2 j' p+ ^9 D
<property name="current_session_context_class">web</property>
8 Z( Q- V# m# ~$ X1 v7 T7 ]' |<property name="current_session_context_class">call</property>
7 k" T% [2 i) b; F& ]4 V<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 编辑
" P/ ^8 y' x2 d* ]2 j5 `) N* g' x+ d
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
$ i# H3 A6 ^+ P8 Q; e& B
6 ?3 N/ |" ^7 z9 Q, k6 {" D; r6 I2 z' @, x9 q$ V' u4 Q. q, w
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf! G8 W- Y0 Y) ]- T1 X! Y" O9 W- ~

% N$ X# X' z4 z! o+ X0 A
% U# i% W" t/ c* r' f  ~/ EChapter 2.5 Contextual Sessions
( a- M0 c/ p7 \0 g  H1 Mgamahu 发表于 2011-7-14 21:56
6 g: l. F# a  j" @

& Q! x' \/ i5 t: C4 i, A  \* Z1 a7 u谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.& V# N( `1 B9 J4 t7 M

" G- Y' K, _9 P& \现在还多了个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
" u8 G( G$ [$ E9 R基本参数:
6 p! U+ a" l' d7 y9 Ljta | thread | managed | custom.Class
( r* t! C. ~9 j9 Z' [& Y主要是配合- Z+ l  Y+ J  _5 ]* @
SessionFactory.getCurrentSession()# p: r/ o+ h& v) j! }
来用的.
+ ~/ @9 E9 ?# M* ]Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,$ a# w: {; Q! K- c
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
: I1 a5 Y4 f2 t8 m/ j, w/ |2 H) ~! fcontext.BeginRequest += OpenSession;
' J1 K1 ~. ?+ S5 k- k3 B  C  G.Bind(HttpContext.Current, SessionFactory.OpenSession())) u! M' Y& J( K
: e3 M6 {, j/ m3 s
//do transaction  z+ u: o/ }6 R; ~! v7 ]
getCurrentSession().Submit();
: L2 x% l& b9 g/ F/ z. a/ C, wgetCurrentSession().RollBack();/ H3 {! M; |/ `/ c4 y$ `
...
8 J, Z  ]' F8 Y9 R9 U9 fUnbind(HttpContext.Current, SessionFactory)0 y6 h& k0 T: a  v& P# M

# v& t7 o; T  Y. bcontext.EndRequest += CloseSession;
1 k9 D- L) Q0 |" W# b- b
; l' a. ?# N2 W2 ] 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-26 05:52 , Processed in 0.078351 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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