埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?. y" F! G8 W! e4 f. ]( z0 ]
, ?9 @4 o; h+ e. @! k0 t/ ^
谢谢
$ I- `' E2 q/ V& z$ K1 C$ h" `' S+ W1 i3 g2 l. a3 Z- v
<property name="current_session_context_class">web</property>
" B* |; U0 }8 m% I& E0 d+ i<property name="current_session_context_class">call</property>
% D% @! F4 `9 B, Z2 r, c<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 编辑 ! R9 t: w* e3 B- \7 `+ O5 t
  w: R3 Z6 [& k6 X9 h$ G5 Y% v
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
# C+ R- v7 Z' Z( |" ]
+ `3 _- N$ Q* y0 D8 g0 Y) d8 D: r0 Y# n# _. C+ t2 b" ]5 A
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf1 a8 q% V$ \4 N! f

( B0 Q# A3 R# {$ [0 W  I! p# g- V' o5 w+ d6 T
Chapter 2.5 Contextual Sessions" ^4 s& L, ]3 {, B- m
gamahu 发表于 2011-7-14 21:56

; P9 z6 O0 z0 \* ?8 o2 ~8 u1 h9 v6 u1 c  R5 V" \1 X
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
! S$ ?0 P2 r/ Z& d% V9 X3 H0 H+ s8 l. h# r
现在还多了个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
" w; Z# g1 G; l基本参数:
, T$ t5 s+ t% C9 t5 m: Jjta | thread | managed | custom.Class" l; e$ h* x/ O; T* z* a$ {
主要是配合7 L! f! m$ _% |! L
SessionFactory.getCurrentSession()
* p. a" R* }9 l& k& G" y8 o来用的.' v% I0 V1 E9 Y% G+ ]
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
% v3 i& \9 O3 w7 X5 zWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
& ^  c; ?0 `8 ~, _& ccontext.BeginRequest += OpenSession;2 s2 _& f5 b* m/ ^
.Bind(HttpContext.Current, SessionFactory.OpenSession())9 [6 ?% ?7 H6 B
/ P! u  M! t+ Q1 s6 F% a6 i' @
//do transaction  C% X( y3 Y9 Q3 I; k, E3 w: E$ H
getCurrentSession().Submit();
2 H/ r! x/ o* \  J$ VgetCurrentSession().RollBack();
1 \$ H- W/ V' p; V...$ V* E, R9 @" W9 ]7 X4 B
Unbind(HttpContext.Current, SessionFactory)
* a- A. I2 Q! m- I( U7 x6 m4 ]# G) T3 @9 r; z; `: _! f
context.EndRequest += CloseSession;
: ]  E0 d; g& t3 a1 J- f( O7 Q% f/ K0 w. `' N. E' E
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-3-1 07:51 , Processed in 0.103683 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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