埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
$ P- ^0 u. T* [+ K
7 {8 T% L) X1 q( q0 \+ G谢谢+ O2 o9 u. Q  H- f$ R' o

+ v( ]4 W9 l3 I; _- N<property name="current_session_context_class">web</property>
' c) z2 p( Y8 {<property name="current_session_context_class">call</property>
& u! i7 Z$ v+ {. z  `& `<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 编辑
. r& ~! |, ~$ a! s
  `- U9 [; p7 r8 l/ PPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
- M8 T, u; m2 s' S4 S8 X0 `, w1 L. Q1 A  ?+ h% K
: n, y" b7 ?: N5 ]$ _2 H
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf
  o" c9 O* k) p- |2 H7 W% S. f5 |: \6 y# A; L
5 X% y% ^/ W& q
Chapter 2.5 Contextual Sessions
2 `2 U; y" G( ^( `4 k6 ggamahu 发表于 2011-7-14 21:56
$ ~% I' _# {2 |( y0 S# |- o
; j  J$ o5 x6 V5 i% W  W7 Y! x
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
- N& k9 \8 O& D
! u) `+ ^2 A4 T/ z- S9 N现在还多了个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 y# `% O( a7 ]5 F基本参数:" h' E( N3 d2 A5 r9 z
jta | thread | managed | custom.Class
# J' J# }3 z9 L$ D主要是配合
. t; e$ j! r8 V" \+ O: X: `9 ^SessionFactory.getCurrentSession()+ T5 E, t9 k$ e8 X* a! E6 j/ Z
来用的.
' o$ k$ s+ u' p" @Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
5 @( M4 c: F. T) k7 I$ H8 qWeb application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:: s$ X/ L, d, f
context.BeginRequest += OpenSession;
1 R/ q8 J. M5 Y2 G: B# r- Y.Bind(HttpContext.Current, SessionFactory.OpenSession())
& }9 l1 i. O. p( K  Z! J# `* g9 i
" G. J/ v* `4 ^, y; Y//do transaction! U) ~- d( n# \, S4 u# h: U
getCurrentSession().Submit();
- P4 s; |; X8 ]  pgetCurrentSession().RollBack();% l" y4 J4 u& `# L* ~5 W" t
...
5 Y3 g5 J" T; p. C$ F) L+ kUnbind(HttpContext.Current, SessionFactory)
1 {3 n" B3 C6 G5 q+ W- ]4 A
3 J; @) C9 P+ \2 Y/ H3 I* Z4 W+ rcontext.EndRequest += CloseSession;
( f% d0 {1 G1 d, f; \
, {( x2 J0 G1 F: t& p9 N* L7 Q 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-3-5 19:10 , Processed in 0.106857 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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