【发布时间】:2016-07-01 10:09:59
【问题描述】:
我正在使用 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。
所以每次我部署一个新的应用程序时,initialize 方法都会被调用并且 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 可以获取它。
有可能吗?如何获取全局缓存管理器?
【问题讨论】:
标签: java caching wildfly infinispan