【问题标题】:ehcache - restrict accessehcache - 限制访问
【发布时间】:2015-05-10 16:01:59
【问题描述】:

我在我的应用程序中使用 ehcache(未复制或分布式),据我所知,它只能从同一个 JVM 访问,但同一个 JVM 中的所有应用程序(例如部署在应用服务器中)都可以从缓存中获取值.我说的对吗?
我想要的是只有我的应用程序才能获取缓存及其值。有可能吗?我检查了 XML 配置文件,但没有找到任何配置来控制它。或者我应该在从 CacheManager 获取缓存时设置一些东西吗?
这就是我在代码中获取缓存的方式:

private static final String LOCAL_CACHE_NAME = "LOCAL_PROTNEUT_STORE";

private Cache getCache() {
    // the name of the ehcache should be able to be configured in the general config XML
    URL url = getClass().getResource("/protneut-local-ehcache.xml");
    CacheManager manager = CacheManager.create(url);

    Cache cache = manager.getCache(LOCAL_CACHE_NAME);
    return cache;
}

配置文件:

<ehcache>
    <cache name="LOCAL_PROTNEUT_STORE" maxElementsInMemory="500" eternal="true" memoryStoreEvictionPolicy="LRU" />
</ehcache>

是否可以完全控制访问?

感谢您的帮助!

问候,
五、

【问题讨论】:

    标签: java caching ehcache


    【解决方案1】:

    通常应用程序无法相互访问,因为它们加载了单独的类路径(您可以阅读更多关于它的信息here),因此您不必担心。

    您必须付出额外的努力才能使简单的缓存管理器在所有应用程序中都可用(例如通过 JNDI 使其可用或将其放入共享库中)

    【讨论】:

    • 嗨,Hris,感谢您的回复!根据ehcache.org/documentation/2.8/integrations/tomcat,必须将 ehcache jar 放入 Tomcat 的公共库中。这是否意味着 ehcache 会有相同的类加载器?五、
    • 是的 libs forlder 由单个类加载器加载,然后加载 webapps 的类加载器使用它来定位共享类。因此,理论上如果 ehcache 包含所有已创建缓存的注册表,则可以访问由一个应用程序在另一个应用程序中创建的缓存。
    • 如果您害怕,只需部署带有应用程序的 ehcache jars。至于内存泄漏......请记住在重新部署时重新启动tomcat :)
    猜你喜欢
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多