2011-11-26 132 views
10

我有2个webapps,一个admin webapp,以及实际的应用程序webapp本身。两者都共享一个MySQL存储,并且Ehcache用于缓存用户详细信息,以防止每个REST API请求的用户查找命中后端。在两个webapps之间共享Ehcache

我遇到的问题是管理员应用程序可以使用(很少我会添加)来更新用户凭据,可以说密码或用户名,或更改一些授权级别等现在,当这种情况发生时,我需要用户缓存失效或清除,以便主Web应用程序可以在用户查找时点击数据库以将新用户详细信息存入缓存。

当前发生这种情况,但清除缓存对主客户端Web应用程序不可见。

如何在两个webapps(在jetty或tomcat中托管)之间共享一个ehcache?我目前使用Jetty,但计划切换到Tomcat。

我正在使用Spring 3,Jersey,Hibernate,MySQL和Google Ehcache注释。

感谢您的任何帮助。

回答

3

Ehcache有REST API,您可以将其部署为web应用程序。这样,管理员和应用程序webapp都可以共享缓存。

5

您有几种选择在这里:

  • 您可以使用JGroups加入您的应用程序集成到一个通知 组,然后通知有关特定缓存条目 更新/无效。因此,在收到此类通知后,您的主要 网络应用程序将更新其本地EhCache条目。
  • 您可以添加Terracotta分布式缓存作为EhCache 实现(它实际上不会更改您的代码,因为它只是012h插在EhCache API后面)。然后你的EhCache变成分布式,所以 你的管理网络应用程序中所做的更改对你的实际 网络应用程序可见。 注意:兵马俑需要商业许可。
  • 代替使用EhCache,您可以使用MemCached,它允许
    在多个应用程序中拥有一个通用缓存。因此,您的 管理Web应用程序所做的更改对您的实际Web应用程序可见。请参阅MemCached
    tutorial