2017-01-07 2 views
0

Я использую camel 2.18.1 и компонент camel-ehcache для создания простого кеша. Пока настройка кеша работает нормально, мне трудно зарегистрировать mbeans, используя ehcache 3.1.2 (это втягивается через верблюда).Включение поддержки JMX в ehcache 3.1.2

Чтение документации - неясно, как можно включить поддержку с 3.x, поскольку стандартный способ регистрации mbeans с использованием ManagementService больше не доступен в API.

Документация немного запутанна с реализацией чистого ehcache и реализацией кеша JSR-107.

Хотя реализация JSR-107 JCache есть варианты, чтобы включить поддержку JMX, проводка конфигурации XML и начиная кэш выглядит бросать исключение на старте кэша:

Caused by: java.lang.IllegalArgumentException: Couldn't resolve Service org.ehcache.jsr107.config.Jsr107Service 

Мой конфигурации XML для справки ниже: Любые указатели на то, как можно включить поддержку JMX для ehcache 3.x и какие дополнительные зависимости потребуются?

<ehcache:config 
 
     xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
 
     xmlns:ehcache="http://www.ehcache.org/v3" 
 
     xmlns:jcache="http://www.ehcache.org/v3/jsr107" 
 
     xsi:schemaLocation=" 
 
     http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.0.xsd 
 
     http://www.ehcache.org/v3/jsr107 http://www.ehcache.org/schema/ehcache-107-ext-3.0.xsd"> 
 

 
    <ehcache:service> 
 
     <jcache:defaults jsr-107-compliant-atomics="true" enable-management="true" enable-statistics="true"> 
 
      <jcache:cache name="my-cache" template="myDefaultTemplate"/> 
 

 
     </jcache:defaults> 
 

 
    </ehcache:service> 
 

 
    <ehcache:persistence directory="/var/cache"/> 
 

 
    <ehcache:cache alias="cache-test"> 
 

 

 
     <!-- 
 
     OPTIONAL, defaults to no expiry 
 
     Entries to the Cache can be made to expire after a given time 
 
    --> 
 
     <ehcache:expiry> 
 
      <!-- 
 
       time to idle, the maximum time for an entry to remain untouched 
 
       Entries to the Cache can be made to expire after a given time 
 
       other options are: 
 
        * <ttl>, time to live; 
 
        * <class>, for a custom Expiry implementation; or 
 
        * <none>, for no expiry 
 
      --> 
 
      <ehcache:tti unit="minutes">2</ehcache:tti> 
 
     </ehcache:expiry> 
 

 
     <!-- 
 
      The maximal number of entries to be held in the Cache, prior to eviction starting 
 
     --> 
 
     <ehcache:heap unit="entries">200</ehcache:heap> 
 

 

 
     <!-- 
 
      OPTIONAL 
 
      Any further elements in another namespace 
 
     --> 
 
      <jcache:mbeans enable-statistics="true" enable-management="true" /> 
 
    </ehcache:cache> 
 

 
    <!-- 
 
     OPTIONAL 
 
     A <cache-template> defines a named template that can be used be <cache> definitions in this same file 
 
     They have all the same property as the <cache> elements above 
 
    --> 
 
    <ehcache:cache-template name="myDefaultTemplate"> 
 
     <ehcache:expiry> 
 
      <ehcache:none/> 
 
     </ehcache:expiry> 
 
     <!-- 
 
      OPTIONAL 
 
      Any further elements in another namespace 
 
     --> 
 

 
    </ehcache:cache-template> 
 

 

 
</ehcache:config>

ответ

1

Скорее всего, это означает, что ваш CacheManager не зарегистрирован с использованием JSR-107. Если я это сделаю, он работает отлично. Вы можете попробовать, делая

public static void main(String[] args) throws Exception { 
    ClassLoader classLoader = CheckJmx.class.getClassLoader(); 
    URI uri = classLoader.getResource("ehcache.xml").toURI(); 
    CachingProvider cachingProvider = Caching.getCachingProvider(); 
    try(CacheManager cm = ((CachingProvider) cachingProvider).getCacheManager(uri, classLoader)) { 
     Thread.sleep(60_000); 
    } 
} 

Однако, если вы не зарегистрированы через JSR-107, то Jsr107Service не доступен. Но добавление этой услуги вам все равно не поможет. JMX MBeans доступны только при регистрации через JSR-107.

Итак, вам лучше всего изменить код создания CacheManager, чтобы использовать что-то похожее, как указано выше.

+0

Спасибо @Henri. Ваше решение работает. Я пытаюсь выполнить аналогичную реализацию, используя конфигурацию xx ehcache, есть ли способ настроить поддержку управления исключительно с помощью конфигурации XML? –

+0

Да. На самом деле это проще. Следуйте этому, чтобы создать свой 'CacheManager' http://www.ehcache.org/documentation/3.2/107.html#getting-jsr-107-caches-configured-through-ehcache-xml. Затем конфигурация XML MBeans находится в разделе, расположенном ниже. – Henri

Смежные вопросы