2017-01-07 9 views
0

나는 camel 2.18.1 및 camel-ehcache 구성 요소를 사용하여 간단한 캐시를 작성합니다. 캐시 설정이 정상적으로 작동하는 동안 ehcache 3.1.2를 사용하여 mbeans를 등록하기가 어렵습니다. (이것은 낙타를 통해 가져옵니다).ehcache에서 JMX 지원 사용 3.1.2

문서 읽기 - ManagementService를 사용하여 mbean을 등록하는 표준 방법으로 3.x를 지원할 수있는 방법이 API에서 더 이상 제공되지 않는다고 분명하지 않습니다.

설명서는 순수 ehcache 구현 및 JSR-107 캐시 구현과 약간 혼동 스럽습니다.

JSR-107 JCache 구현 JMX 지원을 설정하는 옵션, XML 구성 배선 캐시는 캐시 시작에 예외를 던지는 보인다 시작해야하지만 :

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

내 XML 구성 참조를 ehcache 3.x에서 JMX를 지원하는 방법에 대한 지침과 추가 종속성이 필요합니까?

<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를 이용하여 등록되어 있지 않습니다. 그렇게하면 완벽하게 작동합니다. 당신은 Jsr107Service 사용할 수 없습니다, 당신은 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); 
    } 
} 

을 수행하여 시도 할 수 있습니다. 그러나이 서비스를 추가해도 어쨌든 도움이되지 않습니다. JMX MBeans는 JSR-107을 통해 등록 할 때만 사용할 수 있습니다.

위와 같이 비슷한 코드를 사용하여 CacheManager 생성 코드를 변경하는 것이 가장 좋습니다.

+0

감사합니다. @Henri. 귀하의 솔루션이 작동합니다. 비슷한 구현을 ehcache xml 구성을 사용하여 시도하고 있는데, XML 구성을 통해 순수하게 관리 지원을 설정할 수있는 방법이 있습니까? –

+0

예. 사실 쉽습니다. 이것을 따라'CacheManager' http://www.ehcache.org/documentation/3.2/107.html#getting-jsr-107-caches-configured-through-ehcache-xml을 만드십시오. 그런 다음 XML MBeans 구성은 아래 섹션에 있습니다. – Henri