ehcache-cluster не работает в OSGi, когда проект установлен несколько раз - PullRequest
0 голосов
/ 24 июня 2019

Проблемы с кластеризованным ehcache в osgi / aem.Только при первой сборке / установке проекта он работает нормально, но при второй сборке / установке он перестает работать, генерирует много ошибок.Похоже, терракотовое соединение, кэш-менеджер или что-то третье не закрыто должным образом.

Даже после удаления пакетов он пытается подключиться к терракоте.

ok log , ошибки в журнале

Я устанавливаюehcache и ehcache-кластеризованы как отдельные пакеты в ОСГИ.Также попробовал встраивать их в мою связку.Ehcache и ehcache-clustered устанавливаются как зависимости, также пробуются с org.apache.servicemix.bundles.javax-cache-api (встраивание, не обязательно, если это необходимо)

В первый раз все сервисы ehcache и ehcache кластеризованныеактивны, второй раз удовлетворены.

Ehcache bundle , ehcache-кластеризованный пакет , javax-cache-api bundle , пакет моего проекта

pom.xml

Тот же код Я устал как автономное Java-приложение, и оно прекрасно работает (https://github.com/ehcache/ehcache3-samples/blob/master/clustered/src/main/java/org/ehcache/sample/ClusteredXML.java)

Так не уверены, что я пропустил (зависимости, пакеты импорта ..)?

Конфигурация ehcache , Конфигурация терракоты

@Activate
private void activate() {
    LOGGER.info("Creating clustered cache manager from XML");

    URL myUrl = ClusteredService.class.getResource("/com/myco/services/ehcache-clustered-local2.xml");
    Configuration xmlConfig = new XmlConfiguration(myUrl);

    try (CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig) ) {
        cacheManager.init();

        org.ehcache.Cache<String, String> basicCache = cacheManager.getCache("basicCache4", String.class, String.class);

        LOGGER.info("1. Putting to cache");
        basicCache.put("1","abc");

        LOGGER.info("1. Getting from cache");
        String value = basicCache.get("1");
        LOGGER.info("1. Retrieved '{}'", value);

        LOGGER.info("cache manager status2, " + cacheManager.getStatus().toString());

    }
}

1 Ответ

0 голосов
/ 24 июня 2019

Вы также должны создать метод @Deactivate, в котором вы выполняете cacheManager.shutdown ();

Полагаю, если вы дважды вызовете свой код в проекте, отличном от OSGi, у вас также будет та же ошибка.

...