OsCache Example

Merhaba arkadaşlar,

J2EE uygulamaları için en çok kullanılan cache çözümlerinden olan OSCache ikinci yazısında örnek yapacağız.

Öncelikle OSCache’i normal java consol uygulamasında ve web uygulamasında kullanabilirsiniz. Web uygulamalarında oscache kullanabilmek için jar dosyasını /WEB-INF/lib altına atmanız ve oscache.properties dosyasını da /WEB-INF/classes altına atmanız gerekmektedir.

Bir önceki oscache yazımda oscache ile neler yapabileceklerimize değinmiştim. Yazıya buradan ulaşabilirsiniz.

Java uygulamızda cache kullanmak için öncelikle sınıfımızın com.opensymphony.oscache.general paketi altındaki GeneralCacheAdministrator sınıfını extends etmesi gerekmektedir. Bir web app yazıyorsanız da bu classın instance’sinin application lifecycle içerisinde tek instance olmasına dikkat etmeniz gerekmektedir. Yada Singleton Design Pattern’ı classınıza uygulamanız gerekicektir.

 

OSCacheSingleton.java

Şimdi de abstract bir class ile çatı mekanizmasını kuralım. Bu classımızda cache’e put ve get yapan methodlara yer vereceğiz;

Yukardaki classlara dikkat ederseniz GeneralCacheAdministrator sınıfından extend edilen OSCacheSingleton classına ait objemiz tek bir defa tüm web app lifecyle içerisinde oluşacak şekilde dizayn edilmiştir.

Şimdi bu methodları kullanabilmemiz için abstract olan classdan somut bir class oluşturmamız gerekicektir. Adı CacheService olsun

CacheService.java

CacheService classımızda cache kullanabilmemiz için methodlar bulunmakta. İki adet method, shop ve product bilgisi return eden methodlardır. İlk olarak dikkat edilecek nokta getFromCache(cacheKey, 600) ile olan kısımdır. Cache nasıl put ettiyseniz yine o şekil get etmeniz ve return tipini ayarlamanız gerekmektedir. Eğer cache üzerinde istediğiniz key ile ilişkilendirilmiş bir obje bulunmuyorsa yada expired/stale olmuş ise cache’deki objeniz o zaman catch’e düşersiniz. Catch içerisinde ilgili datanınızı tekrar cache’e ekler ve return edersiniz. Bu methoda yapılan ilk istek catch’e düşecektir. Sonraki istekler için expire olunmamışsa obje artık cache den tıkır tıkır alabilirsiniz demektir.

Not : OSCache, expire olan objeyi otomatik olarak tazelemez. İlk isteğin yapılmasını bekler. Birden fazla Thread ile çalıştığımızı düşünelim. A thread’i eskimiş datayı update etmek isterken, B thread’i aynı datayı kullanmak istemektedir. OSCache, A thread’ini beklemez ve B thread’inin isteğine cache’deki objeyi vererek karşılar. Bunu properties dosyamızdan ayarlayabiliriz ama default olara bu şekildedir.

Sıra CacheService sınıfımızı kullanan sınıfta;

Facade pattern kullanan sınıfımız bize uygulamada bulunan tüm servislerin bir sağlayıcı görevinde olucaktır.(Bkz. Shop ve Product servis gibi)

ServiceFacade classımız singleton instance’dır ve üzerinde servisler barındırır. Tek bir yerden tüm servisleri kontrol edebilmeyi, tüm servislerin tek bir defa new ile oluşturulacağını garanti eder. Şimdi ServiceFacade çağıran lifecycle listenera bakalım;

Context initialize’de ServiceFacade için servisleri başlatıp, context destroyed olduğunda da servisleri kapatıyoruz.

Şimdi cache tamamıyla, sorunsuz olarak istenilen yerde ServiceFacade üzerinden kullanılabilir durumdadır. Cache’den aldığımız product ve shop bilgisi kime, nerede lazım olursa olsun şöyle kullanabilir.

Cache üzerinden put/get/flush işlemleri için CacheService içerisine ilgili methodları ekleyip, ServiceFacade üzerinden çağırarak cache’i efektif olarak kullanabilirsiniz.

Yazımı burada sonlandırmak istiyorum arkadaslar, bir sonraki yazıda properties file üzerinde kullanabileceğimiz terimlere bakıp oscache tutorial yazılarını bitirmiş olacağız.

Mutlu kalın ve bol bol Çay için

 

~ Alican Akkus

829 Total Views 1 Views Today