埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
- v; T( @5 q' r  z
4 u/ M! \$ c. ], I, Y  k+ S谢谢8 w* j7 d' w- T* a

# O/ \. H  H( s5 |2 |<property name="current_session_context_class">web</property>
$ H' \' G! O. `9 n<property name="current_session_context_class">call</property>
, r) R) e) _, H5 p" @+ I; }( I  |<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 编辑
; F- \! `9 g0 |$ T% y2 B2 X7 `* p0 Z+ d! Z8 m) J
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf1 ^! D/ ^0 [0 z8 u
+ q4 v# ]: O7 H* R- m/ @5 ]

- y* t8 u3 g# E. q! }  @+ f; p) CChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf1 V& k4 m7 E% p0 X" s9 c
3 ?6 k. k8 b5 b4 @
7 {$ r2 Q. a9 ?9 G( k- @
Chapter 2.5 Contextual Sessions
2 e2 F3 ]/ v! w8 Vgamahu 发表于 2011-7-14 21:56

% l5 G& p# R# a  I6 B; N: t. E' t! [
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
4 F& R# z7 N9 y
7 A0 E, n0 p/ X9 `5 i; g现在还多了个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: I8 i1 P3 O8 P& X
基本参数:
* j2 ~. a1 _# L6 E1 ]- k9 qjta | thread | managed | custom.Class  E8 i5 N4 Y0 E$ r
主要是配合
4 K+ v' L  q: r$ J0 g1 \  a% k: wSessionFactory.getCurrentSession()5 l% D2 _2 J5 F3 W) C4 e3 l
来用的.6 W6 l/ V* r# e7 M9 \: _1 Q2 m2 c
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
9 f4 n1 z8 ^8 t* @Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
  ^) j( X& Q: |, E$ O9 ?context.BeginRequest += OpenSession;
1 I4 [8 ~) e) _5 s3 [.Bind(HttpContext.Current, SessionFactory.OpenSession())
( I. K; l; }; ]
  L$ x1 O+ {: F$ F" u( z//do transaction5 |  ^: [7 R/ l& C& d  g. @
getCurrentSession().Submit();2 o! L7 O0 l7 q7 ?/ }1 s. }- ]
getCurrentSession().RollBack();
2 N1 e; P7 D3 Y' q...( m% F6 v3 ^3 m$ U+ i0 N, B1 y
Unbind(HttpContext.Current, SessionFactory)
" \% |7 [! j6 e1 C% @8 X1 e9 l& @1 G  `8 g9 L
context.EndRequest += CloseSession;+ C7 _/ T8 p& h% k- @

& R, C) X# E0 t) [' s# V 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
理袁律师事务所
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-25 07:04 , Processed in 0.207675 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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