【问题标题】:Infinispan Concurrency DefaultCacheManagerInfinispan 并发 DefaultCacheManager
【发布时间】:2016-08-12 17:54:20
【问题描述】:

我正在使用 infinispan 并通过以下代码行初始化 DefaultCacheManager:

                GlobalConfigurationBuilder gcb = new GlobalConfigurationBuilder();
                gcb.globalJmxStatistics().enabled(false).allowDuplicateDomains(true);
                gcb.transport().defaultTransport().addProperty(JGroupsTransport.CONFIGURATION_STRING,
                        configurator.getProtocolStackString());

                ConfigurationBuilder builder = new ConfigurationBuilder();
                builder.clustering().cacheMode(CacheMode.DIST_SYNC).expiration().lifespan(24l, TimeUnit.HOURS);

                builder.clustering().stateTransfer().awaitInitialTransfer(false);
                builder.clustering().hash().numOwners(2);

                cacheManager = new DefaultCacheManager(gcb.build(), builder.build());

上述sn-p代码存在于部署在同一应用服务器内的N war中。

所以碰巧当我同时部署所有战争时,我在执行新的 DefaultManager() 指令时遇到并发异常

org.infinispan.jmx.JmxDomainConflictException: ISPN000034: There's already a JMX MBean instance type=CacheManager,name="DefaultCacheManager" already registered under 'org.infinispan' JMX domain. 

即使我指定了配置属性也会发生这种情况:

allowDuplicateDomains(true);

如何正确处理这种行为?

【问题讨论】:

    标签: java caching concurrency infinispan jgroups


    【解决方案1】:

    我创建了一个reproducer for this issue,据我所知,它看起来不错。

    只有几个问题和提示:

    • 请确保您使用的是最新的稳定版本(在本例中为 8.2.4.Final)。
    • 我建议使用 CDI extension 而不是实现自己的引导和清理。
    • 如果您出于某种原因需要自己创建 CacheManager - 请记住在销毁 bean 时停止它。
    • 如果您使用的是 Wildfly - 请记住,您的 CacheManager 不是容器中唯一的一个(WF 使用 Infinispan 进行会话复制等内部事务)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-31
      • 2021-06-30
      • 2016-11-09
      • 2013-07-19
      • 1970-01-01
      • 2020-11-05
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多