埃德蒙顿华人社区-Edmonton China

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

寻找NHibernate高手

[复制链接]
鲜花(123) 鸡蛋(0)
发表于 2011-7-14 16:47 | 显示全部楼层 |阅读模式
老杨团队,追求完美;客户至上,服务到位!
能否说说以下三个设置的异同啊?
/ U4 H, |- M  B7 o6 Y: [
7 ?, W7 Z5 m! O谢谢
5 B) I* v& i3 v" l# l) I3 a! p5 b' a' E) z+ H* g
<property name="current_session_context_class">web</property>5 _7 d) J$ {3 G% X1 Q* e
<property name="current_session_context_class">call</property>
9 K4 x6 u( H% f7 C<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 编辑 $ W& ~/ q) _. q' s
* K% z' O9 s. F9 \& e. ^
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf5 z1 c, ]8 f1 x* t
  W" Q# k# v3 |

9 m& R+ f) h) k/ y6 gChapter 2.5 Contextual Sessions
鲜花(123) 鸡蛋(0)
 楼主| 发表于 2011-7-14 22:31 | 显示全部楼层
老杨团队 追求完美
Please refer to http://docs.jboss.org/hibernate/ ... rnate_reference.pdf! }, B, e1 Q; X! h  H& J; p

$ _# C6 b+ S" z7 i# l
3 I& q% f, e& ~$ S2 U7 ^Chapter 2.5 Contextual Sessions) N( N) V9 O2 g0 I; o8 Y  I- q8 H
gamahu 发表于 2011-7-14 21:56
9 q( B7 j% I% ]5 H) L6 B% Z3 d
3 \$ I; j, S' s' I0 o0 Q' \. J- S
谢谢啊,看了,但还是很模糊. 其实我已经看过不少关于这个问题的文章或书里的章节, 还是没有得出明确的答案, 他们之间的 界定和 差异不是太大.* k. L5 y/ m/ @* e# E

7 L- W% g! \, f( o7 N# Q现在还多了个manage_web,很想知道它和  web/thread_static的差别,也许它能  解决我们现在要解决的问题. 因为 web/thread_static都用过一段时间,   都偶尔有不稳定的  现象出现.
鲜花(2) 鸡蛋(0)
发表于 2011-7-15 09:55 | 显示全部楼层
current_session_context_class 主要是用来配置当前 data transaction session bind to what2 h* k# K2 o6 q1 T" D+ \, [+ K' S" K
基本参数:
& ?% J+ w, M" }6 xjta | thread | managed | custom.Class. n. H" K- H2 |3 ?1 {. ?$ n$ [- {
主要是配合
3 Y$ V0 T3 o- z+ O% t. w% nSessionFactory.getCurrentSession(), x- B9 @- i4 }3 S. v! A
来用的.
) R3 [: o' x, }Thread 指自动绑定到当前进程,managed 是在有些managed environment 如果使用 container-managed transactions (CMT) , 需要自己bind 和 unbind,这样 getCurrentSession() 才可能返回正确,
8 X$ V& }5 Y% s8 P: G3 j! M9 }Web application 状况下,每一个HttpRequest 都是独立thread, 所以可以在BeginRequest的时候bind, 在EndRequest 的时候Unbind, 这样就是可以使用getCurrentSession(), 例如:8 v5 F1 k$ m9 ]  k9 y1 B
context.BeginRequest += OpenSession;
4 F) |  {4 }8 n+ T5 S- y% S; ].Bind(HttpContext.Current, SessionFactory.OpenSession())
7 r* g; Y+ d+ d3 B
3 E' z; o7 l# s; ^7 s# |//do transaction0 {! E$ r" k. y) ?, G
getCurrentSession().Submit();9 N4 Y: j. x" K5 G; E* d9 \
getCurrentSession().RollBack();8 l/ C, D2 F7 a8 T! _2 b
...9 X) X9 c: ~# P0 |, I* f. i1 c; s! Y
Unbind(HttpContext.Current, SessionFactory)
: Q% t  Q8 u8 v5 W# k
) D/ I' ?  c: {context.EndRequest += CloseSession;2 a8 P+ W" t! I  \2 P* v1 B

2 s/ B4 n; Z' y* K 如果配置不对,getCurrentSession() 会出错。但是不会引起application 不稳定,查查别的地方吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT-7, 2026-1-2 02:43 , Processed in 0.167118 second(s), 13 queries , Gzip On, APC On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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