从2个不同的war文件中访问相同的ehcache

时间:2008-12-18 04:23:17

标签: java ehcache

我有2个不同的webapps(打包成不同的war文件),需要通过缓存(ehcache)共享一些数据。我想和你一起测试这个想法,看它是否有效。

我的想法是创建一个服务来引导/访问jar中的ehcache和包。然后将那个罐装入两场战争中:

  • WAR1:ehcache-service.jar
  • WAR2:ehcache-service.jar

ehcache会在这样的配置下工作吗?

2 个答案:

答案 0 :(得分:5)

您需要创建一个单独的jar,其中包含您计划缓存的所有类(及其所有依赖项),然后将此jar以及ehcache.jar部署为库(取决于您使用的应用程序服务器)该过程可能有所不同),在Tomcat 6的情况下,这意味着只是将jar复制到lib文件夹。

然后发生的事情是ehcache和您的域类将由所有Web应用程序共享的类加载器加载,因此实例将被缓存并可在内存中访问。

域类的依赖关系非常重要,因此您应该了解这种方法在项目中是否可行。它也可能会影响您重新启动Web应用程序的方式。


此外,您应该知道缓存和共享不一定是必要的。缓存是一种优化。如果将对象实例放入缓存中,则可能会立即逐出,例如,如果缓存没有足够的存储空间或驱逐策略配置。因此,您可能需要查看计划使用ecache的方式。

答案 1 :(得分:3)

您的配置问题是每个war都将加载单独的ClassLoader,并且将有两个ehcache-service实例 - 每个Web应用程序都有自己的服务副本。您可以将缓存服务实现为Web服务(例如),并在war1和war2中使用它。

相关问题