Как поместить все имена кэша и их данные в список <> при создании кэша? - PullRequest
0 голосов
/ 19 сентября 2019

Я использовал Ehcache 3, и я новичок в Ehcache 3, и у меня есть менеджер кэша, заданный как:

 private CacheManager cacheManager;

Теперь, когда объект создан, инициализируется cacheManager:

public ListPlanImpl() {
        System.out.println("constructore being initalized");
        System.getProperties().setProperty("java -Dnet.sf.ehcache.use.classic.lru", "true");
        cacheManager = CacheManagerBuilder
                .newCacheManagerBuilder().build();
        cacheManager.init();


    }

После инициализации cacheManager Это мой основной класс, в котором происходят все действия по получению и помещению в кеш. Я вставил несколько данных в разные кеши, такие как:

     @Stateless
        public class ListPlanImpl implements CachePlan,ListPlan {

         private static final String CACHE_OPERATING_PARAMETER = "cache_key_operating_parameter";
            private static final String CACHE_SECURITY_PARAMETER = "cache_security";
      private static Cache<String, GenericClassForList> operatingParametersCache;
        private static Cache<String, GenericClassForList> securitiesTradingParameterCache;

         public void putInCache() throws ExecutionException, InterruptedException {
                System.out.println("putting in list");

                this.operatingParametersCache = cacheManager
                        .createCache("cacheOfOperatingParameters", CacheConfigurationBuilder
                                .newCacheConfigurationBuilder(
                                        String.class, GenericClassForList.class,
                                        ResourcePoolsBuilder.heap(1000000000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(60000,
                                        TimeUnit.SECONDS))));

                operatingParametersCache.put(CACHE_OPERATING_PARAMETER, new GenericClassForList(this.operatingParamService.getOperatingParamDTO()));


                this.securitiesTradingParameterCache = cacheManager
                        .createCache("cacheOfSecurityTrading", CacheConfigurationBuilder
                                .newCacheConfigurationBuilder(
                                        String.class, GenericClassForList.class,
                                        ResourcePoolsBuilder.heap(1000000000)).withExpiry(Expirations.timeToLiveExpiration(Duration.of(60000,
                                        TimeUnit.SECONDS))));
  securitiesTradingParameterCache.put(CACHE_SECURITY_PARAMETER, new GenericClassForList(this.securitiesTradingParamsService.getSecuritiesTradingParamDTO()));

            }
        }

Я хочу отдельную функциюкоторый вернет мне имя всех кешей и общее количество данных в кеше, так что я могу показать в пользовательском интерфейсе, что кеш содержит данные. Я искал проблему, но не нашел решения.

1 Ответ

1 голос
/ 19 сентября 2019

Cache реализует Iterable<Cache.Entry<K,V>>, поэтому вы можете перебирать записи, чтобы получить ключи и значения для каждого кэша, например, вот так:

for( Cache.Entry<String, GenericClassForList> entry : operatingParametersCache) { 
  String key = entry.getKey(); 
  GenericClassForList value = entry.getValue(); 
  //if counting just increasing a counter might be sufficient, 
  //otherwise use the key and value as needed 
}

Поскольку у вас уже естьссылки на кеши просто применяют этот метод к каждому отдельному кешу.

Если у вас нет удобных ссылок, вы можете сохранить реестр для используемых псевдонимов для кэшей (вы предоставляете псевдонимы, чтобы вы могли использовать их для получения кэшей из диспетчера кэша).Если вы не можете этого сделать, вам может потребоваться отследить псевдонимы, передаваемые менеджеру кеша, например, обернув его делегатом.

...