【问题标题】:ALL_CACHE_MANAGERS CacheManager net.sf.ehcacheALL_CACHE_MANAGERS CacheManager net.sf.ehcache
【发布时间】:2020-01-22 20:25:59
【问题描述】:

net.sf.ehcache.CacheManager.ALL_CACHE_MANAGERS 中是否有替代品

    <!-- https://mvnrepository.com/artifact/org.ehcache/ehcache -->
    <dependency>
        <groupId>org.ehcache</groupId>
        <artifactId>ehcache</artifactId>
        <version>3.8.1</version>
    </dependency>

?

这是我需要修改以使用版本 3.8.1 的代码:

import org.ehcache.CacheManager;
    .
    .
    .
        List list = CacheManager.ALL_CACHE_MANAGERS;

        for (int i = 0, n = list.size(); i < n; i++) {
            CacheManager cm = (CacheManager) list.get(i);
            log.debug("CacheManager: " + cm.getName());

            if (cm.getName().equals(CACHE_MANAGER_NAME)) {
                log.debug("CM " + CACHE_MANAGER_NAME + " existed. Destroying it.");
                cm.shutdown();
            }
        }

在 ehcache 3.8.1 中有没有办法做到这一点?

【问题讨论】:

  • 这可能是个愚蠢的问题,但为什么您首先需要与ALL_CACHE_MANAGERS 联系?你有cm,那么为什么不假设它存在(为什么不应该呢?)并关闭它?
  • 我没有cmcm 在我从CacheManager.ALL_CACHE_MANAGERS 获得的列表中。
  • 我的猜测是这个“常量”被认为是一种不好的做法,因此被删除了。我建议您自己维护一个类似的列表,在创建它们时将新的CacheManagers 添加到列表中(可能作为服务抽象出来)。这可能是开发人员一开始就试图强迫你做的事情。
  • 你在使用 JCache 吗?有一个 Caching.getCachingProviders() 方法可能有效 - javadoc 说它返回所有缓存提供程序(并通过它返回缓存管理器)..
  • 我使用的是 ehcache 3.8.1。那是JCache吗? Caching 的包名是什么?

标签: ehcache ehcache-3


【解决方案1】:

看起来ALL_CACHE_MANAGERS 在ehcache 3.8.1 中被org.ehcache.clustered.operations 命令ListCacheManagers 替换。

可以如下使用。

OperationsTool.main(...)

public static void main(String[] args) {
 System.exit(innerMain(args));
}

OperationsTool.innerMain(...)

public static int innerMain(String[] args) {
 BaseOptions base = new BaseOptions();
 JCommander jc = new JCommander(base);
 jc.setProgramName("ehcache-ops");
 jc.addCommand(new ListCacheManagers(base));
 jc.addCommand(new CreateCacheManager(base));
 jc.addCommand(new UpdateCacheManager(base));
 jc.addCommand(new DestroyCacheManager(base));
 jc.setParameterDescriptionComparator(REQUIRED_FIRST);
 for (JCommander jcc : jc.getCommands().values()) {
  jcc.setParameterDescriptionComparator(REQUIRED_FIRST);
 }
 try {
  jc.parse(args);
  if (base.isHelp()) {
   return usage(jc, new StringBuilder());
  } else {
   int result = 0;
   for (Object o : jc.getCommands().get(jc.getParsedCommand()).getObjects()) {
    result |= ((Command) o).execute();
   }
   return result;
  }
 } catch (ParameterException e) {
  return usage(jc, new StringBuilder(e.getMessage()).append("\n"));
 }
}

OperationsToolTest.run(...)

 public static int run(String command) {
  return OperationsTool.innerMain(command.split("\\s+"));
 }
}

参考:

  1. https://www.codota.com/web/assistant/code/rs/5c76b38b49efcb0001524b15#L36
  2. https://www.codota.com/code/java/classes/org.ehcache.clustered.operations.OperationsTool

【讨论】:

    猜你喜欢
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多