埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?( N) E! T3 p: ~3 u5 p& k% c* }0 r+ z
- g9 x4 F2 C& h; C
谢谢( W+ w' O% z! K6 Y

5 ?1 u- p( I% i<property name="current_session_context_class">web</property>
9 u7 N& h5 N1 ?% u. D5 {<property name="current_session_context_class">call</property>, h' N/ _# R% x. ^+ Z! E, {
<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 编辑 $ z% I2 \. l4 H& s* S3 ^

- Q' c9 P5 K2 z, T  w1 N) @, MPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
6 d8 O; N. ~; w; ~9 c. |- H
  v# Y: S% `- [0 c
2 r% Y! S* O! t/ q1 e6 E" `Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
& z/ o( d* X3 m  y3 @  v. M( H( I6 U  Z/ D' [/ W

( x, m# @; `; r- g+ r; VChapter 2.5 Contextual Sessions
. D; C0 t1 F1 Y+ N  y# Dgamahu 发表于 2011-7-14 21:56

9 J5 y, z( F1 Q) c
- o) z1 q: Z5 i- b% k/ F7 Z5 C1 Z谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
5 l7 H" g) H6 R8 y& u! @8 @2 V+ p5 Z7 u. H8 E- X) H
现在还多了个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: T2 K3 r4 _2 ?' ^0 X5 }
基本参数:
" _  `/ Y9 a( x6 D# i" `8 v5 K2 W4 m/ Qjta | thread | managed | custom.Class* Z  `- w' E8 H; T
主要是配合- w4 |) m) ^9 f0 U7 y2 u7 W
SessionFactory.getCurrentSession()
/ w& V$ k$ K* x2 G来用的.) }8 g  C; M" |6 a
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,2 [0 G* w3 C- g$ C; B
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
/ u2 I9 j; P5 `3 wcontext.BeginRequest += OpenSession;
2 B1 C. \- s1 D# @  ^7 Q.Bind(HttpContext.Current, SessionFactory.OpenSession())
) [7 S7 `( j- {7 V9 I9 Q) o
5 v( P6 `3 p0 n. ?  R" Q//do transaction* u  o+ b# P3 H; P
getCurrentSession().Submit();
$ X* g, g4 h) d2 c% ogetCurrentSession().RollBack();
9 [9 ]' k$ s; X7 m...
, E, s6 `& {4 X+ x5 h, P& QUnbind(HttpContext.Current, SessionFactory)
: ~0 g4 |6 x; v/ v( Y5 K
/ k! p! d9 ]7 gcontext.EndRequest += CloseSession;
1 K; }. G  Q' ~1 [; j
( Z9 P0 C9 ]/ g" W8 q, G4 q 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-24 12:58 , Processed in 0.236895 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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