CacheManager가 실행되면, 우리는 cache 생성 및 데이터 저장을 시작할 수 있다. Infinispan내의 Cache들은 유일한 이름으로 구분되는 "named" Cache들이다. 하지만, "default" Cache라는 특별한 cache가 있는데, 특별한 이름 없이도 쉽게 얻을 수 있는 cache이다. 이제 초기 버전의 WeatherService를 확장하여 cache에 조회한 날씨 데이터를 저장할 것이다. 이것을 위해서 WeatherService와 구체적인 구현 사이에 추상 클래스(CachingWeatherService)를 생성할 것이다. 이 클래스에서는 값비싼 remote call wrapping하여 remote call결과를 cache하고, 값비싼 remote API를 호출하는 대신, 다시 요청하기 전에 wether 데이터가 이미 cache에 있는지 확인한다. 첫번째로 cache를 얻어온다.

 

Cache<String, LocationWeather> cache = cacheManager.getCache();


CacheManager
에 존재하는 cache가 없으면, default configuration을 사용하여 cache를 생성한다. Key Value generic type assignment type에서 유추할 수 있다.  날씨 정보를 얻어오기 위한 caching wrapper는 다음과 같다.

 

LocationWeather weather = cache.get(location);

if (weather == null) {

weather = fetchWeather(location);

cache.put(location, weather);

}

return weather;


Infinispan
 Cache java.util.Map 인터페이스를 구현했기 때문에, 위의 코드는 따로 설명이 필요 없다. (self explanatory) 이제 Cache가 존재한다. Application을 다시 실행시켜 보자.

 

 

git checkout -f step-2

mvn clean package exec:exec

 

 

[Output]

---- Fetching weather information ----
Rome, Italy - Temperature: 12.9° C, Conditions: light rain
Como, Italy - Temperature: 6.3° C, Conditions: Sky is Clear
Basel, Switzerland - Temperature: 0.8° C, Conditions: overcast clouds
Bern, Switzerland - Temperature: -1.6° C, Conditions: broken clouds
London, UK - Temperature: 1.8° C, Conditions: light rain
Newcastle, UK - Temperature: 2.6° C, Conditions: scattered clouds
Bucharest, Romania - Temperature: 9.3° C, Conditions: scattered clouds
Cluj-Napoca, Romania - Temperature: 6.4° C, Conditions: scattered clouds
Ottawa, Canada - Temperature: -7.0° C, Conditions: overcast clouds
Toronto, Canada - Temperature: -7.0° C, Conditions: broken clouds
Lisbon, Portugal - Temperature: 14.6° C, Conditions: overcast clouds
Porto, Portugal - Temperature: 12.2° C, Conditions: moderate rain
Raleigh, USA - Temperature: 3.9° C, Conditions: Sky is Clear
Washington, USA - Temperature: 3.4° C, Conditions: light rain
---- Fetched in 1634ms ----
---- Fetching weather information ----
Rome, Italy - Temperature: 12.9° C, Conditions: light rain
Como, Italy - Temperature: 6.3° C, Conditions: Sky is Clear
Basel, Switzerland - Temperature: 0.8° C, Conditions: overcast clouds
Bern, Switzerland - Temperature: -1.6° C, Conditions: broken clouds
London, UK - Temperature: 1.8° C, Conditions: light rain
Newcastle, UK - Temperature: 2.6° C, Conditions: scattered clouds
Bucharest, Romania - Temperature: 9.3° C, Conditions: scattered clouds
Cluj-Napoca, Romania - Temperature: 6.4° C, Conditions: scattered clouds
Ottawa, Canada - Temperature: -7.0° C, Conditions: overcast clouds
Toronto, Canada - Temperature: -7.0° C, Conditions: broken clouds
Lisbon, Portugal - Temperature: 14.6° C, Conditions: overcast clouds
Porto, Portugal - Temperature: 12.2° C, Conditions: moderate rain
Raleigh, USA - Temperature: 3.9° C, Conditions: Sky is Clear
Washington, USA - Temperature: 3.4° C, Conditions: light rain
---- Fetched in 2ms ----

 

두번째 날씨 조회 부분에서는 굉장히 빠른 것을 볼 수 있다. 위에서 Cache에 저장된 데이터는 Cache에서 삭제하기 전에는 없어지지 않는다. 다음 단계에서는 어떻게 생명주기를 갖는 데이터를 추가하는지를 살펴볼 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/669

트랙백 주소 :: http://www.yongbi.net/trackback/669

트랙백 RSS :: http://www.yongbi.net/rss/trackback/669

댓글을 달아 주세요

댓글 RSS 주소 : http://www.yongbi.net/rss/comment/669
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다