首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何维护运行两个Java应用程序的Hibernate缓存一致性?

如何维护运行两个Java应用程序的Hibernate缓存一致性?
EN

Stack Overflow用户
提问于 2008-09-07 20:09:11
回答 3查看 12.1K关注 0票数 10

我们的设计有一个jvm,它是一个jboss/webapp (读/写),用于通过hibernate (使用jpa)将数据维护到数据库。该模型有10-15个持久化类,在关系中有3-5个深度级别。

然后,我们有一个单独的jvm,它是使用此数据的服务器。因为它是连续运行的,所以我们只有一个长的数据库会话(只读)。

目前不涉及jvm内缓存-所以我们手动从一个jvm发送信号到另一个。

现在,当webapp更改某些数据时,它会通知服务器重新加载更改后的数据。我们发现我们需要告诉hibernate清除数据,然后重新加载它。仅仅使用db进行一次抓取/合并并不能完成这项工作--主要是针对层次结构下几层的对象。

关于这个设计是否存在根本性的错误,或者是否有人这样做,并且在重新加载时使用hibernate的运气更好。

谢谢,克里斯

EN

回答 3

Stack Overflow用户

发布于 2008-09-07 21:16:59

克里斯,我对你的情况有点疑惑。如果我理解正确的话,您有一个web应用程序(读/写)和一个独立应用程序(只读?)使用Hibernate访问共享数据库。您使用web应用程序所做的更改对独立应用程序不可见。是那么回事吗?

如果是这样,您是否考虑过使用不同的二级缓存实现?我想知道您是否可以使用web应用程序和独立应用程序共享的集群缓存。我相信集成了Hibernate的SwarmCache可以做到这一点,但我自己还没有试过。

不过,一般来说,您应该知道给定缓存的内容永远不会知道另一个应用程序的活动(这就是为什么我建议让两个应用程序共享一个缓存)。祝好运!

票数 5
EN

Stack Overflow用户

发布于 2009-02-22 07:40:26

在我看来,您应该将下划线Hibernate缓存更改为支持集群模式的缓存。它可以是JBoss CacheSwarm Cache。第一个版本对数据同步(复制和失效)有更好的支持,并且还支持JTA。

然后,您将能够配置webapp和服务器之间的缓存同步。如果要使用JBoss缓存,还要查看隔离级别。我认为如果你想从同一个会话中获取服务器上的新数据,你应该使用READ_COMMITTED模式。

票数 2
EN

Stack Overflow用户

发布于 2012-11-27 15:30:21

最常用的做法是使用Container-Managed Entity Manager,这样同一容器(即Glassfish、Tomcat、Websphere)中的两个或多个应用程序可以共享相同的缓存。但是如果你不使用Application容器,因为你使用Play!例如,然后我将在主应用程序中构建一些then服务,以便在缓存中保持一致的读/写。

我认为使用陈旧的数据是一扇灾难的大门。就像单件变成多件一样,只读应用程序有时也是写的。

腰带和支架:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档