2009-04-19 5 views
8

안녕하세요. 나는 2 절 캐시를 최대 절전 모드로 사용할 때 몇 가지 문제가 발생했습니다. 캐시 공급자로서 나는 ehcache를 사용합니다. 내가 그렇게 주석을 사용하여 내 단체 구성최대 절전 모드 2 차 캐시

<property name="hibernate.cache.use_second_level_cache" value="true"/> 
<property name="hibernate.cache.provider_class" value="net.sf.ehcache.hibernate.EhCacheProvider" /> 
<property name="hibernate.cache.provider_configuration_file_resource_path" value="/ehcache.xml" /> 

의 persistence.xml에서 설정의

부 : 그 주석

@Cache(region = "Kierunek", usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Kierunek implements Serializable {

수입은 다음과 같습니다 import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy;

내 ehcache.xml

내가 왜 오류 다음 얻을 16,

<diskStore path="java.io.tmpdir" /> 

<defaultCache maxElementsInMemory="10000" eternal="false" 
    timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" 
    diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000" 
    diskPersistent="false" diskExpiryThreadIntervalSeconds="120" 
    memoryStoreEvictionPolicy="LRU" /> 

<cache name="Kierunek" maxElementsInMemory="1000" 
    eternal="true" overflowToDisk="false" memoryStoreEvictionPolicy="LRU" /> 

그리고 누구 아이디어?

WARNING: Could not find a specific ehcache configuration for cache named [persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB.Kierunek]; using defaults. 
19:52:57,313 ERROR [AbstractKernelController] Error installing to Start: name=persistence.unit:unitName=pz2EAR.ear/pz2EJB.jar#pz2EJB state=Create 
java.lang.IllegalArgumentException: Cache name cannot contain '/' characters. 

솔루션은

<property name="hibernate.cache.region_prefix" value=""/> 

을 persistence.xml을 다른 속성을 추가하고 그 결함이 접두사 큰 들으 루슬란 것을 제거!

+1

"lvl"대신 "level"을 철자로 철자해야합니다. 그것은 더 읽기 쉽고 착수 가능합니다. –

+1

당신이 옳습니다. 나는 그것에 대해 생각하지 않았기 때문에 다소 좌절감을 썼다. ^^ thanks – Dogrizz

답변

8

IMHO를 사용하면 클래스의 생성 된 지역 이름을 가져올 수 있습니다. 생성 된 이름은 "persistence.unit : unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje.Kierunek"입니다. 그리고 그것은 당신의 ehcache.xml 설정에 정의되어 있지 않습니다. 또한 미리 정의 된 이름을 찾고 있으므로 기본 영역을 사용할 수 없습니다. 캐시 이름으로 일부 지역의 이름을 미리 정의 할 @Cache 주석 속성을 사용할 수 있습니다이 문제를 해결 할 수있는 옵션으로

@Cache(region = 'Kierunek', usage = CacheConcurrencyStrategy.READ_WRITE) 
public class Kierunek implements Serializable { 
    // .... 
} 

추천하고 ehcache.xml에서

<cache name="Kierunek" 
     maxElementsInMemory="1000" 
     eternal="true" 
     overflowToDisk="false" 
     memoryStoreEvictionPolicy="LRU" /> 
+0

네, 생성 된 지역 이름을 얻었습니다. (지금은 지역이라는 것을 알고 있습니다. 내가 읽고 혼란스러워서 캐시라고 불렀습니다.) 그것이 원래 의도였습니다. 왜 Hibernate가 잘못된 지역 이름을 생성하는지 궁금하다. 그리고 다시 기본 엔트리가 있다면 엔티티 당 영역을 지정할 필요가 없습니다 (괜찮 으면). 어쨌든 나는 대답에 대해 감사하고 있습니다. 그것은 내 문제를 해결했다. 감사! ^^ – Dogrizz

+1

환영합니다. 설명서를 확인했습니다. 기본 지역 이름은 정규화 된 클래스 이름입니다. 이것은 문서에서 큰 실수입니다. 어쨌든 명확하지 않기 때문에 최대한 빨리 수정해야합니다. – ruslan

+0

그것은 2 deploymnets에 대한 근무 지금은 얻을 : 경고 : [persistence.unit : unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.Kierunek]라는 캐시에 대한 특정 ehcache 구성을 찾을 수 없습니다; 기본값을 사용합니다. 19:52:57,313 ERROR [AbstractKernelController] 시작으로 설치하는 중 오류가 발생했습니다 : name = persistence.unit : unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB state = 생성 java.lang.IllegalArgumentException : 캐시 이름에 '/'문자를 사용할 수 없습니다. . 주석에 지역 이름이 설정되어 있지만 예비 접두사가 추가됩니다. – Dogrizz

0

EHCache에는 응용 프로그램의 개체 (실시간, 캐시 유형, 캐시 크기, 캐싱 동작 등)를 캐시하는 방법을 알려주는 구성이 필요합니다. 캐시하려고하는 모든 클래스에 대해 적절한 캐시 구성을 찾고 실패 할 경우 위의 오류를 인쇄하려고 시도합니다.

EHCache 구성 방법은 http://ehcache.sourceforge.net/documentation/configuration.html을 참조하십시오.

+0

나는 "기본"캐시가 정의되어 있다면 ehcache의 적절한 설정을 가지고있다. 문제는 왜 hibernate가 이상한 캐시 이름을 생성합니까? pl.bdsdev.seps.encje.Kierunek이어야하며 persistence.unit : unitName = pz2EAR.ear/pz2EJB.jar # pz2EJB.pl.bdsdev.seps.encje입니다.Kierunek – Dogrizz

5

최대 절전 모드 추가 접두사 속성의 appname 또는 값을 기반으로 hibernate.cache.region_prefix

""(빈 문자열)에 대해이 속성을 설정하면 다음과 같은 이름의 영역이 있습니다 최대 절전 모드 설정에서 이름.