java - 用于部署 Web 应用程序的 Infinispan 独特缓存管理器

标签 java caching wildfly infinispan

我正在使用 Infinispan 8.1 和 WildFly 10。

我使用以下代码行以编程方式初始化 CacheManager:

public class SessionManager {
    private static DefaultCacheManager cacheManager;

    public void initializeCache(){

        if (cacheManager ==null){ 

            GlobalConfigurationBuilder gcbLocal = new GlobalConfigurationBuilder();
            ConfigurationBuilder builderLocal = new ConfigurationBuilder();
            builderLocal.clustering().cacheMode(CacheMode.LOCAL);
            cacheManager = new DefaultCacheManager(gcbLocal.build(), builderLocal.build()); 
            cacheManager.getCache(); 

这些代码行属于在我的服务器上部署的多个 Web 应用程序中作为依赖项导入的 jar。

因此,每次我部署新应用程序时,都会调用初始化方法,并且 infinispan 尝试创建一个新的 DefaultCacheManager,从而出现以下异常:

ISPN000034: There's already a JMX MBean instance type=CacheManager,name="DefaultCacheManager" already registered under 'org.infinispan' JMX domain. If you want to allow multiple instances configured with same JMX domain enable 'allowDuplicateDomains' attribute in 'globalJmxStatistics' config element

只需添加以下代码行即可解决此问题:

gcbLocal.globalJmxStatistics().allowDuplicateDomains(true);

但现在的效果是 Infinispan 将创建一个新的域分离的 CacheManager。这意味着每个应用程序都有自己的应用程序。

我的目标是只有 1 个 DefaultCacheManager 为服务器内部署的所有 Web 应用程序提供服务,如果 WebApplicationA 在 infinispan 缓存内存储一些值,webApplicationB 就可以获取它。

这可能吗?我如何获得全局缓存管理器?

最佳答案

Ernest 是对的 - MBean 服务器是每个 JVM 而不是每个 ClassLoader,因此您需要忽略重复的域。但更有趣的是 - Wildfly 使用 Infinispan 进行 session 集群,因此默认缓存管理器可能已经在运行。我强烈建议使用您自己的缓存管理器名称:

new GlobalConfigurationBuilder().globalJmxStatistics()
                    .cacheManagerName(CACHE_NAME).build();

Ernest 还建议使用 HotRod 服务器集群并使用 HotRod 客户端连接到它(这比使用 REST 接口(interface)快得多)。这在您描述的场景中听起来很合理。

关于java - 用于部署 Web 应用程序的 Infinispan 独特缓存管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38142719/

相关文章:

java - Android 缓存到磁盘

caching - Wildfly infinispan Web 缓存容器的用途是什么?

java - SLF4J + Logback 不登录 WildFly

java - 如何在 Maven 中导入 Wildfly 依赖项

java - 使用 groovy 的 toURL 方法忽略 SSL 错误

CSS 缓存 - Drupal 和 Wordpress 的问题

java - 为什么 LinkedHashSet 不实现 List?

caching - 构造唯一性由 6 个属性定义的缓存键的最佳方法

java - 试图用 Arrays.contains Java 比较两个数组

java - 数组列表的数组列表作为关系的表示