埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
- l% N$ B& n: ]/ f( [
4 l+ f. _7 @/ U谢谢. u0 D$ s: t- N: \

2 Y' T1 d4 {1 D<property name="current_session_context_class">web</property>* ~3 _# U, `. U+ B3 N& ^
<property name="current_session_context_class">call</property>
$ O" `- z7 t/ Z* w: c8 k% n<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 编辑 7 ^' n/ ]* A8 Z# U- Y. D1 U- i4 e

* V* f! r$ ^7 }9 {  ]3 {! E5 h, oPlease refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf; D& p2 g  s! c; O4 d+ N9 ^- m

$ }2 o$ Y' ^. M$ h  o; h% H; b- W$ f' w
Chapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf3 p9 G# {; w2 o, H- P" ^

2 z% y+ l4 ~. {# N4 A3 d8 n$ N' S+ q0 r2 ]$ q% a
Chapter 2.5 Contextual Sessions
( ?" H. O. Y, u$ I2 C1 j5 ?gamahu 发表于 2011-7-14 21:56
6 K3 \; Y& D# i4 b' U$ g
% H7 a! K' a" \9 K9 E, E
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.
# {& }: v- q% o( d, y: s1 e0 q0 s& O% t" f1 `
现在还多了个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
" a6 s4 q8 ]) r: T基本参数:: Z4 |% K0 B9 e' V) V; r& |
jta | thread | managed | custom.Class
8 b8 M+ d3 F1 ^, j( t! m主要是配合
/ @2 N6 a/ q: I! Q* ESessionFactory.getCurrentSession()
) o* J7 I$ S0 X  }5 {& P来用的.; O" ]  d3 w7 A. h$ r- n6 p
Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,: o) _0 _( n( l7 O/ H5 _4 f
Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:
1 }, d0 n2 Y' K5 c2 l1 ?context.BeginRequest += OpenSession;. C+ q0 V: ~% n" l# |* c2 H
.Bind(HttpContext.Current, SessionFactory.OpenSession())) L: p# E  y% z6 S1 z0 M6 y
+ G9 S: b$ z# O3 T4 O
//do transaction
7 z" E' \) X) e7 L. q! AgetCurrentSession().Submit();6 |8 `' v6 |5 @0 G$ h- S
getCurrentSession().RollBack();4 c. B; F8 ~4 o/ `+ z2 M
...
4 q6 O* Q' Z9 `! q* ?! j5 ^Unbind(HttpContext.Current, SessionFactory)( Q! P' f: b/ `& |& m, ^7 Q) \
9 L7 e4 n8 ^& C) y1 g, X: s
context.EndRequest += CloseSession;6 w* C7 C. T2 Z2 U' u% R5 h0 S- O/ `
; T/ `9 J) C% x7 U0 \: z, O. F" n
如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2025-12-28 00:58 , Processed in 0.104556 second(s), 14 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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