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

问题描述:

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

我的想法是创建一个引导/访问ehcache并将其打包到jar中的服务。然后包水罐里的两场战争:

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

会在这样的配置的Ehcache工作?

+0

你能详细阐述一下你试图用共享缓存完成什么吗? – lucas 2008-12-18 19:10:50

+0

我想将它用作分布式锁。我可以使用数据库来表明事务正在进行中(但我认为这是一种反模式)。用例:War1启动一个tx,将其存储在缓存中。这阻止了相同的tx开始。 War2根据外部事件使tx失效。 – ashitaka 2008-12-19 01:53:39

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

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

您的域类的依赖性很重要,所以您应该看看这种方法在您的项目中是否可行。它也可能会影响您重新启动Web应用程序的方式。


此外,你应该知道缓存和共享不是必须的同一件事情。缓存是一种优化。如果将对象实例放入缓存中,例如,如果缓存没有足够的存储空间或驱逐策略配置,它可能会立即被驱逐。因此,您可能需要回顾一下您计划使用ecache的方式。

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