카테고리 없음
OSCache 관련 주의 사항
headiron
2008. 11. 3. 14:15
이번에 OSCache가 적용된 부분에서 Thread가 Lock이 발생하는 문제가 생겼다.
확인해 보니 Cache에 객체가 없거나 Refresh되야 할 필요에 의해 Exception이 발생할 경우 해당 CacheKey에 대해서 Lock을 거는 문제를 확인하였다.
http://www.opensymphony.com/oscache/api/com/opensymphony/oscache/base/Cache.html#getFromCache(java.lang.String, int)
위의 javadoc의 NeedsRefreshException Exception이 발생할 경우 해당 CacheEntry에 대해 Lock을 걸게 되며 이를 방지하기 위해서는 repopulate나 cancelUpdate를 수행하도록 되어 있다.
JCF라는 Framework( 지난 번에 jBPM관련 Issue를 찾다가 발견한 대우정보통신쪽 Framework 으로 기억한다. ) 관련 Wiki에 마침 동일한 내용에 대해서 정리 되어 있는 것을 발견하였다.
http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Oscache
즉 아래와 같이 getFromCache 메소드 호출후 NeedsRefreshException이 발생할 경우 putInCache를 실행하거나 cancelUpdate를 실행하여야 한다.
try {
} catch (NeedsRefreshException nre) {
admin.cancelUpdate(key);
}
return metadata;
}
뭐... 내가 문서를 자세히 보지 못한 부분도 있기는 하지만
그렇다고 Caching get 했을 때 없을 경우 cacheKey를 Lock 걸어 놓는 Framework 구조는
좀 심한듯 하다.
( 진짜 Refresh가 필요한 경우도 있을 수 있다지만 이렇게 디자인 해 놓은 것은 사용자를
좀 고려하지 않은 형태인듯..-.- )
확인해 보니 Cache에 객체가 없거나 Refresh되야 할 필요에 의해 Exception이 발생할 경우 해당 CacheKey에 대해서 Lock을 거는 문제를 확인하였다.
http://www.opensymphony.com/oscache/api/com/opensymphony/oscache/base/Cache.html#getFromCache(java.lang.String, int)
위의 javadoc의 NeedsRefreshException Exception이 발생할 경우 해당 CacheEntry에 대해 Lock을 걸게 되며 이를 방지하기 위해서는 repopulate나 cancelUpdate를 수행하도록 되어 있다.
JCF라는 Framework( 지난 번에 jBPM관련 Issue를 찾다가 발견한 대우정보통신쪽 Framework 으로 기억한다. ) 관련 Wiki에 마침 동일한 내용에 대해서 정리 되어 있는 것을 발견하였다.
http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/Oscache
즉 아래와 같이 getFromCache 메소드 호출후 NeedsRefreshException이 발생할 경우 putInCache를 실행하거나 cancelUpdate를 실행하여야 한다.
try {
metadata = (Metadata) admin.getFromCache(key);
} catch (NeedsRefreshException nre) {
admin.cancelUpdate(key);
}
return metadata;
}
뭐... 내가 문서를 자세히 보지 못한 부분도 있기는 하지만
그렇다고 Caching get 했을 때 없을 경우 cacheKey를 Lock 걸어 놓는 Framework 구조는
좀 심한듯 하다.
( 진짜 Refresh가 필요한 경우도 있을 수 있다지만 이렇게 디자인 해 놓은 것은 사용자를
좀 고려하지 않은 형태인듯..-.- )