埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?# z0 H. Y4 j1 l

0 y! I* n  b; a# Y$ i9 ~. b谢谢
0 o/ @" m, ^  q; {+ y/ C) J, y% P, v. I% ?/ A
<property name="current_session_context_class">web</property>
2 I, d& {) R! j+ B( Q<property name="current_session_context_class">call</property>
  m' u% L8 `! S" A4 c6 b- N<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 编辑 ; h4 x1 k7 l2 [+ U% o
+ z+ x7 k& L# w, P% S4 \
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf/ v  Y7 \  l9 P: M& W
9 R3 i8 g7 ^6 s5 ~; Y
, y; M7 B, S3 {/ w8 m. R  g# ^
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
: R& x2 y6 T/ @5 c; _* v/ e, }; }7 W2 C/ ~: g! \& k- S
# H# ]  @/ c  z6 K& K
Chapter 2.5 Contextual Sessions+ e. G: K1 \- `/ b& |* A4 \- K
gamahu 发表于 2011-7-14 21:56
% n+ P# `2 c5 h# u1 g- h* W
+ |. @" M5 ~: A  Q" y, F
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.8 T: W; G$ v9 r5 q% `% H4 H
% g, q% D$ m2 ~  ^6 B  Z
现在还多了个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
# u% v, h1 j& E% z基本参数:
) ~3 i! |, Z5 b& G/ b, ]jta | thread | managed | custom.Class
8 b( M! K1 g6 c) {! L主要是配合1 j2 s* a4 Q5 ]: s
SessionFactory.getCurrentSession()
9 c: [3 l2 u; k1 }/ w+ g1 D4 l来用的.
7 v! P! v$ G$ v# YThread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
- A; V$ d7 j: }7 ~$ QWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
+ g0 M* J! Q2 z9 S  Gcontext.BeginRequest += OpenSession;
. ^7 J7 s7 x# [  Q; [4 ]5 {" S.Bind(HttpContext.Current, SessionFactory.OpenSession())
; r5 [- z9 [; T# w' [0 x8 `. `& h& o5 \, M# f) s, [
//do transaction
, ?6 H0 C+ Q# h3 LgetCurrentSession().Submit();' Y8 D2 k, ~) [+ w' ]6 g/ G6 l: Q+ R+ |
getCurrentSession().RollBack();
# F9 K4 O# T! \3 J...
1 |: x/ u$ H, p! @) t% tUnbind(HttpContext.Current, SessionFactory). ~; @( ~3 a) Q* S& u
8 c3 j7 a; E' B2 @8 w
context.EndRequest += CloseSession;6 C) ?8 Z! O) ~+ J7 P$ _; [
- q  B( H5 }- b' Z5 I& s
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-9 04:02 , Processed in 0.148377 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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