2008-12-18 84 views
5

我有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

回答

5

您需要爲所有類(及其所有依賴項)創建一個單獨的jar,然後將這個jar文件以及ehcache.jar作爲庫進行部署(具體取決於您的應用程序服務器)使用的過程可能會不同),在Tomcat 6的情況下,這意味着只需將jar文件複製到lib文件夾。

然後發生什麼是ehcache和您的域類將由所有Web應用程序共享的類加載器加載,因此實例將在內存中緩存和可訪問。

您的域類的依賴性很重要,所以您應該看看這種方法在您的項目中是否可行。它也可能會影響您重新啓動Web應用程序的方式。


此外,你應該知道緩存和共享不是必須的同一件事情。緩存是一種優化。如果將對象實例放入緩存中,例如,如果緩存沒有足夠的存儲空間或驅逐策略配置,它可能會立即被驅逐。因此,您可能需要回顧一下您計劃使用ecache的方式。

2

您的配置問題是,每場戰爭都將加載單獨的ClassLoader,並且會有兩個ehcache-service實例 - 每個Web應用程序都有自己的服務副本。您可以將您的緩存服務實現爲Web服務(例如),並在war1和war2中使用它。

相關問題