2017-02-13 10 views
0

최근에 ehcache의 이전 구현을 버전 3.2로 전환 했으므로 다음 xml 구성 파일이 프로젝트에 있습니다.Echache 3.2.0 아니요 Store.Provider가 구성된 리소스 유형을 처리 할 수 ​​없습니다. [offheap, disk] 예외

나는 공간의 비트를 절약 할 절단 유지하지만 분명히 오류가 표시 다음과 같은 예외 추적을 얻을 위 구성
<eh:config xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xmlns:eh='http://www.ehcache.org/v3' 
    xsi:schemaLocation="http://www.ehcache.org/v3  
    http://www.ehcache.org/schema/ehcache-core-3.0.xsd"> 
<eh:persistence directory="C:\foo\bar\Cache-Persistence"/> 
<eh:thread-pools> 
    <eh:thread-pool alias="defaultDiskPool" min-size="1" max-size="3"/> 
</eh:thread-pools> 
<eh:disk-store thread-pool="defaultDiskPool"/> 
<eh:cache-template name="PROC_REQTemplate"> 
    <eh:key-type>java.lang.String</eh:key-type> 
    <eh:value-type>java.lang.String</eh:value-type> 
    <eh:expiry> 
    <eh:ttl>640</eh:ttl> 
    </eh:expiry> 
    <eh:resources> 
    <eh:offheap unit="MB">500</eh:offheap> 
    <eh:disk unit="GB" persistent="true">3</eh:disk> 
    </eh:resources> 
    <eh:disk-store-settings thread-pool="defaultDiskPool"/> 
</eh:cache-template> 
<eh:cache alias="proc_req_cache" uses-template="PROC_REQTemplate"/> 
</eh:config> 

는 :

java.lang.IllegalStateException: No Store.Provider found to handle configured resource types [offheap, disk] from {org.ehcache.impl.internal.store.heap.OnHeapStore$Provider, org.ehcache.impl.internal.store.tiering.TieredStore$Provider, org.ehcache.impl.internal.store.offheap.OffHeapStore$Provider, org.ehcache.impl.internal.store.disk.OffHeapDiskStore$Provider} 
at org.ehcache.core.internal.store.StoreSupport.selectStoreProvider(StoreSupport.java:80) ~[?:?] 
at org.ehcache.core.EhcacheManager.getStore(EhcacheManager.java:440) ~[?:?] 
at org.ehcache.core.EhcacheManager.createNewEhcache(EhcacheManager.java:311) ~[?:?] 
at org.ehcache.core.EhcacheManager.createCache(EhcacheManager.java:260) ~[?:?] 
at org.ehcache.core.EhcacheManager.init(EhcacheManager.java:567) ~[?:?] 

나는 당신이 할 수있는 현재의 3.2 설명서에 따라 생각 데이터 스토리지 계층의 모든 조합 사용 하지만 분명히이

  1. 이 난 단지 내가 자원 offheap 을-주석과 디스크를 떠날 경우 위의 hown 구성 작업을 할 수 있습니다 ... 위의 오류 shows.So 같은 경우가 아니라 둘 다 아닙니다. 이게 정상인가? 내가 뭘 놓치고 있니?
  2. 2.7.8 버전에 따라 문서 (여기 ehcache-2.8-storage-options 참조)는 BigHemap 저장소로 BigMemory를 언급했지만 ehcache-3.2.0.jar에서 올바르게 보았다면 거기에 어떤 종류의 내부지도가 있습니다. 위의 오류는 내가 BigMemory를 프로젝트에 포함시키지 않았다는 사실과 관련이있을 수 있습니까? 제 추측은 아니지만 누군가가 명확히 할 수 있다면 좋을까요?

모든 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

0

문제는 더 높은 캐싱 레벨 (현재 오프 히프)이 캐싱 티어 (가까운 캐싱의 용어) 일 필요가 있다는 것입니다. 지금 당장은 아프지 않습니다. 따라서 계층을 시작하자마자 온 힙 레벨이 필요합니다. 다음은 작동하는 구성입니다.

xml을 더 쉽게 읽을 수 있도록 ehcache을 기본 네임 스페이스로 설정했습니다. 그리고 defaultThreadPool을 기본값으로 설정하여 사방에 설정할 필요가 없도록하십시오. 그리고 이벤트 디스패치에 스레드 풀이 필요하고 기본값이 없기 때문에 <event-dispatch thread-pool="defaultDiskPool"/>을 추가 할 수도 있습니다.

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

    <persistence directory="C:\foo\bar\Cache-Persistence"/> 

    <thread-pools> 
     <thread-pool alias="defaultDiskPool" min-size="1" max-size="3" default="true"/> 
    </thread-pools> 

    <cache-template name="PROC_REQTemplate"> 
     <key-type>java.lang.String</key-type> 
     <value-type>java.lang.String</value-type> 
     <expiry> 
      <ttl>640</ttl> 
     </expiry> 
     <resources> 
      <heap unit="entries">1</heap> 
      <offheap unit="MB">500</offheap> 
      <disk unit="GB" persistent="true">3</disk> 
     </resources> 
    </cache-template> 

    <cache alias="proc_req_cache" uses-template="PROC_REQTemplate"/> 
</config> 
+0

@Henri의 도움에 감사 드리며 conf를 정리하는 시간을내어 주셔서 감사합니다. 너는 당연히 당연한데, 나는 결국이 문제를 스스로 해결할 수 있었다. 조금 벗어나 버린 것은 새로운 문서였습니다. 사실 나는 기본적으로 힙 저장소를 사용하고 있다고 생각했습니다. 또 하나의 질문 : 항상 '을 구성해야합니까? 또는 Eventing을 구성하고자 할 때? 다시 한 번 감사드립니다 –

+0

아니요, 이벤트가 항상 존재합니다. 따라서 기본값이 없으면 풀을 제공해야합니다. – Henri

0

요약하면 현재 디스크 계층이 인 경우에만의 오프 힐 계층을 지원할 수 없습니다. 계층화에 대한 현재 Ehcache 3.x 지원은 여러 계층을 가질 순간 단계를 요구합니다.

오늘 (이상으로 Ehcache의 3.1.X과)에서

지원 조합 :

  • 힙 또는 offheap 또는 디스크 또는 클러스터 (단일 계층)
  • 힙 + offheap
  • 힙 + 디스크
  • 힙 + 오프 힙 + 디스크
  • 힙 + 클러스터
  • 힙 + 오프 힙 + 클러스터

오류는 Ehcache 2.x 위에 상업적으로 제공된 BigMemory과는 아무런 관련이 없습니다.

+0

답변 주셔서 감사합니다. 위의 @Henri뿐 아니라 실제로 맞습니다.나는 당신의 대답이 모두 기능적이고 합리적인지를 검증 할 수 있습니다. BigMemory가 내 직감을 간다는 것은 오류와 관련이 없지만 안전한 측면에 있기 위해 EhCache 3.x 시리즈의 모든 변경 사항을 점검 할 것이라고 생각했습니다. 불행히도 나는 오직 하나의 +1을 줄 수있다. 그리고 나는 나의 conf를 편집하기까지 시간을내어 위의 답에 그것을 써야 할 것이다. 다시 한번 감사드립니다. –