埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
  ]: b- y# i7 [& f7 N/ B* V, o# p: b! J. O" s* r" [
谢谢
9 e3 b$ P5 ^) r; y6 v& W; G) ]8 n" j' ]( N, ^/ }: v
<property name="current_session_context_class">web</property># x: Y, ^$ w$ \( P1 ~$ ^
<property name="current_session_context_class">call</property>
$ |# V" q6 }; x! |5 N9 g<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 编辑 5 W( U+ J6 {5 R

$ O  P8 r$ C% Q4 s# S4 c! bPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf. S3 Y9 f0 Y. f( Z5 u

9 m9 t9 a. y7 }) E2 u
/ e- C3 u1 E- H! A$ DChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf7 X. `  B1 j1 J4 O# D$ U0 U% P
2 T$ N* L) t1 N$ ?: N
  G3 h/ L  X3 f3 H
Chapter 2.5 Contextual Sessions' {, b3 [" J- r6 c9 `
gamahu 发表于 2011-7-14 21:56
2 X7 C7 r" @* |% Z" V1 D) Z
3 a+ S1 ?. e  `  l8 b
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
; T- G* w5 w2 y2 M1 \2 t
) J% j/ E4 m% F3 j现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what4 l( B- ?$ O) }9 F& n
基本参数:
1 h8 l  C4 R1 q/ g' {+ @jta | thread | managed | custom.Class
. Y' J/ `0 S1 I' y主要是配合
6 U; f; A$ z3 G3 h1 \7 dSessionFactory.getCurrentSession()
9 m2 L) {- t; c7 r1 F' s8 u5 e. }& d来用的.4 r  O) \0 L9 b7 l
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,4 {9 i8 o$ n% p$ T+ Q/ l
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
7 x0 u; S/ z5 Acontext.BeginRequest += OpenSession;
% Q# N! E3 M0 J" t5 Z% f.Bind(HttpContext.Current, SessionFactory.OpenSession())
9 S6 _) E! }# c' M( j8 Z* z
4 _& n6 K6 G) X- O) p. v//do transaction; L* E) i- s0 i9 l. K
getCurrentSession().Submit();( k5 m( J- @4 P* ]" g/ N
getCurrentSession().RollBack();
1 p& y3 r( Z4 N$ H...
3 s" e2 i( {9 n; V% O* f1 t1 KUnbind(HttpContext.Current, SessionFactory)
( h  g$ d1 b& y* t9 A
. K$ W; f- M/ f8 s4 Xcontext.EndRequest += CloseSession;; Y% x, a4 e5 n7 |& [+ J

4 T" F  c4 K! T  L' ~5 E1 ` 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-1 07:15 , Processed in 0.106349 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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