埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
# O& H# ^& ], ~) I( ~; i6 H; [4 v  Y/ k, T( |' }' i
谢谢
3 x/ o" q3 D1 {6 u3 Y: o3 {0 K  m& R
# Y1 J& T# x! E/ c5 c8 _3 ?2 l<property name="current_session_context_class">web</property>. S1 t4 D& Q2 M$ T1 o! V  d4 n
<property name="current_session_context_class">call</property>( g' T! s- f. @$ O+ ?9 x/ P
<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 编辑
* I; o! A0 P( D- E! [+ D, x
$ W( p$ U% S" zPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf8 a1 f, {9 L, ^) x) ?' A- Q
  G$ c) u7 o9 r

6 c* ]* c, V/ o1 |8 Q/ d- \Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
& M6 I# K& l% Q. }4 o( {& p# V
! E0 u7 v9 z$ s; ^% T7 ?: M( g# `  G- S0 ~2 [) l
Chapter 2.5 Contextual Sessions( |& ?; T& s1 [4 v8 S
gamahu 发表于 2011-7-14 21:56
, K. e- L' v9 K( A6 z
# X, L5 x  l" |, [
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
8 ?6 r4 T, W0 X: ?; m: }' E3 r
/ V6 Z7 l( }$ R3 g" c现在还多了个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
' w8 j! b. x1 z6 w" h基本参数:
( B$ s, ]" n7 Xjta | thread | managed | custom.Class
: H, o( p+ R+ q) ~0 |$ Q  B1 x9 j主要是配合1 {; T0 F. }$ G; f, {
SessionFactory.getCurrentSession()
, r: r0 }6 ?, \; @3 I9 P来用的.6 F! I( \% {+ j1 Y
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
( o2 ?8 w! }6 e6 F% U' eWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
" E' k+ v2 J- v* z1 e# `) Icontext.BeginRequest += OpenSession;; E  d6 \! a: A4 _* y. n
.Bind(HttpContext.Current, SessionFactory.OpenSession())% O0 A* U% Z8 L9 ]9 q. l

/ d" L+ R2 g7 E$ @5 |$ A//do transaction0 v! ]- T  t3 C3 K' V! E/ ~# J  B
getCurrentSession().Submit();! d0 ]: V* I* T1 J# Q2 v, k9 q
getCurrentSession().RollBack();% r, j1 B- ]5 P$ N
...
% ]1 _! z+ C. B& K& k+ SUnbind(HttpContext.Current, SessionFactory)# s8 G& F& ]/ M; Y/ s3 {& a, N/ J
/ g8 |9 V4 b5 F% X' K
context.EndRequest += CloseSession;& g3 m3 r: H5 o
% w. g; d/ n: Z
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-8-23 00:12 , Processed in 0.171540 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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