JiveJdon Community Forums
在线87人 J道首页 | 论坛首页 | 培训咨询 | 开源框架 | 精华 | 查搜 | 注册 | 登陆 |
首页 » 论坛 » J2EE/JavaEE/JEE/EJB/JSF等技术讨论
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表
???en_US.forumThreadNext.name??? 下一主题
这个主题共有 4 回复 / 1 页 [ ]  发表新帖子  回复该主题贴
duolaaimeng

发表文章: 6
注册时间: 2008年02月24日 11:58
问个关于能否使用Hibernate的问题 发表: 2008年02月24日 12:24 回复
我们的数据库服务器将由两套系统来访问,一套是遗留的C/S结构的系统,一套是即将开发的B/S结构的系统,两套系统操作的是同样的表,只是针对的业务不一样,遗漏系统里面大量使用了存储过程。

在这样的情况下,即将开发的B/S结构的系统里面可以使用Hibernate来实现持久化层吗?因为Hibernate也有自己的缓存,我在想如果两套系统同时访问的数据有交集时,会不会出问题啊?
johnnylzb

发表文章: 18
注册时间: 2008年02月03日 13:41
re:问个关于能否使用Hibernate的问题 发表: 2008年02月25日 10:16 回复
有两种情况需要考虑:

1.你的系统(其中一个或两个)是否对数据实时性要求很高而你的数据又会经常被修改,如果是这样的话,会比较麻烦,因为Hibernate是可以通过乐观锁(或悲观锁,但这种方式会严重浪费数据库资源,一般不是很建议使用)来防止数据脏读脏写的问题,如果你的系统实时性要求很高需要使用乐观锁的话,由于两个系统不能使用同一个Hibernate上下文,这种情况使用乐观锁无法达到防止数据脏读脏写的目的。

2.你的系统(使用Hibernate那个)有没有使用Hibernate的二级缓存,如果有,还要看你使用二级缓存的策略,同样的道理,两个系统不能共享同一个Hibernate的二级缓存,至于一般的Hibernate的应用,只使用了一级缓存,即Hibernate Session期间的缓存,就不会有你锁担心的问题。
[该贴被johnnylzb于2008-02-25 10:18修改过]
duolaaimeng

发表文章: 6
注册时间: 2008年02月24日 11:58
回复:re:问个关于能否使用Hibernate的问题 发表: 2008年02月25日 14:31 回复
谢谢,不过我还不是很明白~~~

这么问吧:

如果说我现在在B/S结构的那个系统里面只使用一级缓存,您说的这两种情况是不是就都可以避免了?
johnnylzb

发表文章: 18
注册时间: 2008年02月03日 13:41
回复:回复:re:问个关于能否使用Hibernate的问题 发表: 2008年02月25日 15:54 回复
只能避免第二种情况,第一种情况无法避免,第一种情况即使使用JDBC,也无法解决,需要在数据库级做“锁”。

举个例子:

两个应用程序A、B同时修改帐户Account的余额Balance(注:以下事件按时间顺序发生):

A读取Acccout Banlace(balance=5000)

A执行修改: balance = balance - 1000 (balance=4000)

B读取Acccount Balance(balance=5000)

A提交结果(balance=4000)

B执行修改:balance = balance - 1000 (balance=4000)

B提交结果(balance=4000)

可以看到,实际上,Account被扣款两次共2000元,但实际上,B读取数据的时候是“脏读”,结果最后帐户还剩下4000余额,这是一个事务干扰的例子。假设应用B是B/S结构,使用了Hibernate(或者JDBC或其他),在B读取到修改提交这段时间,A对帐户余额的改变对B(即使Hibernate使用的是一级缓存)是透明的,从而导致了B的脏读脏写。

duolaaimeng

发表文章: 6
注册时间: 2008年02月24日 11:58
回复:回复:回复:re:问个关于能否使用Hibernate的问题 发表: 2008年03月03日 17:37 回复
非常感谢您举了这么详细的例子!

那么假定用户A、B都是在同一个C/S或者B/S结构的系统中,就能保证不出现脏读脏写了吗?
这个主题有 4 回复 / 1 页 [ ]
???en_US.forumThreadPrev.name??? 上一主题
Go back to the topic listing   返回主题列表    返回页首  返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG: AOP cache DDD EJB 集群 设计模式 Hibernate IOC JiveJdon OO RBAC Spring Struts
查询本论坛内 回复超过的热门帖子
快速发表回复
标题
 
粗体 斜体 下划线 插入图片 插入代码 插入url链接 插入附件
内容
 

解惑之道在J道 ,打造中国最具影响力的的企业软件社区
OpenSource JIVEJDON v3.0 Powered by JdonFramework Code © 2002-07 jdon.com

anti spam