埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

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

  ~$ O/ R6 C9 ~6 q' @) Q谢谢, c9 s5 j8 Q* ~4 B- a  R
6 c  `$ q5 ?; U, O
<property name="current_session_context_class">web</property>9 G/ D! ~: p" M5 i; T- G
<property name="current_session_context_class">call</property>8 y5 `) ]' i' e; w
<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 编辑
/ g+ G$ R* M3 L$ g- b% v% @2 k" O
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
: C2 [/ }* A: A- A7 r7 b8 [. L. t  Q/ `
" C& }7 E# z6 S5 Z
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf" `  S7 a0 r# S1 N0 u* g

$ K" _3 Y/ d9 n' F) c% x9 I% Q6 q  G) F  n% ^) Z5 k# w3 J6 W. x
Chapter 2.5 Contextual Sessions
3 g$ w' m5 v, G& L2 {gamahu 发表于 2011-7-14 21:56
: h) ]5 y. U, Z5 ]

" r; y8 H6 \$ w谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.3 D# Y5 c5 ]5 e6 N  m* n# r
5 N( F! D6 A& C0 |3 L3 t  @0 o1 V! 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) p! R6 g( @' }4 ?5 [' h  I
基本参数:& K& K* _' W- ]2 q2 [6 Q: A
jta | thread | managed | custom.Class
& X4 w% Z! h! B  v% h: ~' m# F" v6 b主要是配合! i1 X- H: F7 c, A; V, ~
SessionFactory.getCurrentSession()6 Z4 m/ \' W. ]6 [. f/ ~
来用的.2 M% O* `; r& [) U0 }0 D
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,3 T! y$ }) v4 T5 `# H" f
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:1 `- X- L" P" H/ J4 W7 b
context.BeginRequest += OpenSession;
( M: Y& b3 G* i.Bind(HttpContext.Current, SessionFactory.OpenSession())
: @, a+ y& F+ `$ N
* a4 l0 [  G2 Y! \3 B- E//do transaction
- z4 N, s3 P, p* FgetCurrentSession().Submit();3 G, ^) [5 z# T' @4 U/ J7 V$ a
getCurrentSession().RollBack();. \- M+ N1 ]' K6 K* \
...
) Y4 Z& D! R/ RUnbind(HttpContext.Current, SessionFactory)
- }0 z/ T& s! \: l% N8 t- e8 c& U6 O  p9 s
context.EndRequest += CloseSession;
9 x! o6 `: B( m" `8 a
3 F$ Y5 V# Z2 {8 [. i 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-2-24 05:42 , Processed in 0.149597 second(s), 15 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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