埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?# L8 m: e7 E9 u, I! W: P7 I
1 `5 h" g, ?3 l" w& y# M
谢谢0 U1 L% k; D7 ?
( J5 p( u' X% X
<property name="current_session_context_class">web</property>
9 _6 D: c- w) M/ X<property name="current_session_context_class">call</property>
& u7 S1 s7 U9 |+ q1 @<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 编辑 ! X0 h2 G$ f* p9 b
) x& D2 R: B) D0 c3 e
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
5 O' F% K' C9 [  Z8 d, |6 R8 p. k4 Y' h" H% V
5 h) a* M- Y( h" h+ k. i
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf  }  z, ^% w+ C6 I: |0 C
6 G# A: B2 z2 q# s6 \1 }" B5 k
# e  n7 d$ X' y! n- C# w
Chapter 2.5 Contextual Sessions0 t3 r8 q' l- ?0 q
gamahu 发表于 2011-7-14 21:56

$ Y! m6 Y% C- ]8 t( r" s" a! F% `' \# D% b) `7 P
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.$ e' s( L0 m# F. X0 Y' N

) F4 q1 f% P. N  V; [  y现在还多了个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
0 _1 d: E4 ^0 I0 o1 x8 w* o* j6 \7 y0 w# ?基本参数:
$ T# _  {, _& \  d% jjta | thread | managed | custom.Class
2 w: r2 W; g5 M. F+ o8 I主要是配合/ c( N5 [' l  E, R% R* ^
SessionFactory.getCurrentSession()8 q/ k4 i6 n5 Q0 v; ^! G
来用的.# `$ g' Q) u& p: v3 u8 C6 J
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
: ^# H) q% k: X2 P& V4 UWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:' N: n# x, U+ a( s& w
context.BeginRequest += OpenSession;
7 G$ d9 [  t8 f/ }.Bind(HttpContext.Current, SessionFactory.OpenSession())
, B- v4 y& F, t5 N' {1 z# d/ c  |  N# p" W4 |$ f) [
//do transaction
4 L- z4 W; T* T0 L2 p7 E. }# Q: ~getCurrentSession().Submit();
0 J% m; N  b5 B/ jgetCurrentSession().RollBack();
& A, F. y0 @9 d% B% U1 e7 ^...& n; v- r- k8 j0 {8 p
Unbind(HttpContext.Current, SessionFactory)! D8 r5 N! V1 f

! B/ o, s3 n% T0 B  \" ?: D6 K* dcontext.EndRequest += CloseSession;
5 e0 Q$ S9 k+ e9 \, r$ O
- R) Y3 L* @7 Q6 n2 d3 ^ 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-4-20 17:50 , Processed in 0.141127 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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