Java 群集Terracotta缓存未跨模块更新

Java 群集Terracotta缓存未跨模块更新,java,hibernate,ehcache,terracotta,Java,Hibernate,Ehcache,Terracotta,这个问题有很多组成部分,我将尽量不遗漏任何部分: EhCache与Terracotta一起用于集群 EhCache用于spring缓存和hibernate二级缓存 为了只有一个缓存管理器,缓存管理器被声明为“共享” 我们有很多web模块,它们被部署为不同的web应用程序 在内部环境中,模块部署在同一台服务器上,不使用Teracotta;在生产和登台环境中,模块部署在不同的服务器上 terracotta集群使用默认的“最终”一致性模式 ehcache 2.5.2、hibernate 3.6、te

这个问题有很多组成部分,我将尽量不遗漏任何部分:

  • EhCache与Terracotta一起用于集群
  • EhCache用于spring缓存和hibernate二级缓存
  • 为了只有一个缓存管理器,缓存管理器被声明为“共享”
  • 我们有很多web模块,它们被部署为不同的web应用程序
  • 在内部环境中,模块部署在同一台服务器上,不使用Teracotta;在生产和登台环境中,模块部署在不同的服务器上
  • terracotta集群使用默认的“最终”一致性模式
  • ehcache 2.5.2、hibernate 3.6、terracotta 3.0.6
鉴于这些先决条件,将发生以下情况:

  • 一个web模块(部署在一台服务器上的web应用程序)对hibernate实体进行更改。这应该是在集群范围内更新缓存条目
  • 当从另一个web模块(另一台服务器)请求该对象时,即使一分钟后,如果某个实体由该标识符加载,也会返回一个过时的对象(即,没有第一个web应用程序进行修改)
  • 问题是: -我是否正确地假设,在执行“保存”操作之后,第二级缓存“最终”在集群范围内获得更新的信息(根据Terracotta文档,在毫秒内)?
    -没有发生这种情况的可能原因是什么?

    似乎没有使用
    声明为集群。所有其他的都是,所以我一开始没有注意到这个疏忽。

    是的,如果您让hibernate ehcache模块创建(一些?)实体,关联&所有为您创建单独的缓存,它们都将基于默认的缓存配置创建。所以,是的,您需要声明这些集群。