2010-07-01 3 views
4

나는, 내가 findById 메소드 쿼리를 사용하고최대 절전 모드 두 번째 레벨 캐시 다음과 같은 인쇄 결과

@Cache 주석을 사용하여 내 응용 프로그램에서 두 번째 레벨 캐시를 정의 :

회사는 객체가
long id = 4;  
     Company cmp = companyDAO.findById(id); 

그 나는 DB에서 얻는다.

Company 개체가 DB 또는 캐시에서 왔는지 어떻게 확인할 수 있습니까?

답변

2

시도 HitCount and/or MissCount API. 이 같은

뭔가 ..... 캐시 로깅에

int oldMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount(); 
int oldHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount(); 

long id = 4;  
Company cmp = companyDAO.findById(id); 

int newMissCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getMissCount(); 
int newHitCount = sessionFactory.getStatistics().getSecondLevelCacheStatistics(rName).getHitCount(); 
if(oldHitCount+1 == newHitCount && oldMissCount+1 == newMissCount) { 
    logger.debug("came from DB"); 
    } else if(oldHitCount+1 == newHitCount && oldMissCount == newMissCount) { 
    logger.debug("came from cache"); 
} 
+0

나는이 코드를 시도했지만 misscount와 hit count는 항상 0으로 반환됩니다 ... 내가 만들 수있는 실수는 무엇입니까 ?? – Anand

+0

@Anand hibernate.cache.use_second_level_cache, hibernate.cache.use_query_cache, hibernate.generate_statistics를 활성화 했습니까? http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional – dira

+0

엔티티의 지역 이름 (rName)을 찾는 방법은 무엇입니까? – Sriram

1

켭니다.

6

Company 개체가 DB 또는 캐시에서 왔는지 어떻게 확인할 수 있습니까?

Hibernate는 특정 범주를 사용하여 모든 보조 캐시 활동을 기록합니다.. 관련 카테고리가 org.hibernate.cache 인 경우 로깅 프레임 워크 구성에서 디버그을 사용 설정하기 만하면됩니다.

Chapter 3.5 Logging을 참조하십시오.

+0

로그에서 실행하고 싶지 않습니다. 화면에 인쇄 할 테스트 페이지에서 실행하고 싶습니다. 회사는 캐쉬/캐쉬되지 않았습니다. – Dejell

+0

@Odelya : 아마도,하지만 당신은 OP가 아닙니다. :)이 질문이 귀하의 요구를 충족시키지 못하면보다 구체적인 질문을 게시하십시오. –

+0

안녕하세요! 나는 같은 팀에서 Riki와 함께있다. 그녀의 질문을 바꿀 수 없다. ( 그녀는 시스템의 객체가 캐쉬되어 있는지 확인해야하는 페이지를 작성했다 .그러나 우리는 로그를 사용하고 싶지 않다. - JSF를 사용하여 뷰를 인쇄하고 싶습니다. – Dejell