EJB

EJB 6 – Timer Service 1 – Programmatic Timer

Merhabalar arkadaşlar. Bu yazıda sizlerle bir işlemin belli bir süre sonra yapılmasını sağlayan EJB Timer Service konusunu öğreneceğiz.

Bazı durumlarda bir işlemin yapılması için belli bir süre geçmiş olması gerekebilir. Örneğin siz bir işlem talep ettiniz ve işlemin karşılığını hemen alamıyorsunuz, diyelim ki 1 saat sonra alabiliyorsunuz. İşte EJB Timer Service kullanıp, gerekli bilgi ya da bilgileri verip 1 saat sonra işlemin sonucunu gerekli yerden gidip alabiliriz.

Şimdi örnek kodlarımızı inceleyelim ve nasıl kullanıldığına bakalım.

EJBTimerRemote.java

EJB Timer Service’i yine bir Session Bean içinde kullanacağımız için bir interface’e ihtiyacımız var. Burada @Remote veya @Local kullanmak size kalmış.  Projeniz dışarı ile bağlantı kuracak (farklı JVM) ise @Remote kullanmanız gerekecektir. Aynı JVM için @Remote ve @Local kullanabilirsiniz.

EJBTimerSessionBean.java

Session Bean içinde @Resource notasyonu ile bir SessionContext nesnesi tanımlıyoruz. Bu nesneyi bir Timer Service nesnesi elde ederken kullanacağız. Daha önce kullandığımız @EJB notasyonuna benzer şekilde enjekte işlemi uygulanıyor burada. @Inject notasyonu ile CDI Bean’e erişim sağlıyoruz ve bir CDI Bean nesnesi tanımlıyoruz. CDI Bean’in ne olduğu ve nasıl kullanıldığına dair bir yazıyı şuradan okuyabilirsiniz:http://kod5.org/jsf-dersleri-cdi-bean-kullanimi/

Interface içinde tanımladığımız callEjbTimerService metodunu Override ediyoruz ve metodun içinde yukarıda tanımadığımız SessionContext nesnesini kullanarak getTimerService metodu ile bir Timer Service örneği elde ediyoruz. Bu Timer Service içinden de createTimer metodu ile bir Timer örneği elde ediyoruz. createTimer metoduna iki parametre geçiriyoruz ve parametrelerden birisi işlemin ne kadar süre sonra yapılacağını bildiren duration. createTimer metodu çağırıldığında kendisine verilen duration kadar beklemekte ve süre bittiğinde @TimeOut ile işaretlenmiş metodu bulup çağırmaktadır. createTimer metodu overloading yapılarak farklı parametreler alabilecek şekilde bir kaç adet yazılmış.

Screen Shot 2015-10-08 at 12.07.19

JSFBean.java

JSFBean sınıfı içindeki ifadelerin neredeyse hepsini bildiğimiz için anlatıcak ekstra bir şey yok arkadaşlar. Sadece setName metoduna değinmek istiyorum. setName metodu içinde callEjbTimerService metodunu çağırırken duration değişkenini 1000 ile çarpıyoruz. Çünkü createTimer metodunu çağırırken biz long tipinde bir parametre veriyoruz ve createTimer bunu mili saniye cinsinden alıyor. 1 saniye 1000 milisaniye olduğundan gönderirken de 1000 ile çarpıp gönderiyoruz. callEjbTimerService metoduna bir de name değişkenini geçiriyoruz. İkinci parametre bizim belli bir süre sonra işleyeceğimiz veri olacak. Bunun dışında tüm kısımlar bildiğimiz ve öğrendiğimiz kısımlar.

index.xhtml

Ekran Çıktıları

 

Bir isim girip GÖNDER butonuna tıklıyorum.

Bir isim girip GÖNDER butonuna tıklıyorum.

Screen Shot 2015-10-08 at 13.17.12

Bize bir message döndürüldü, şimdi konsola gidip bakacağız.

Screen Shot 2015-10-08 at 13.17.49

Timer nesnesinin oluşturulması ile geri sayım başlamış oluyor. Biz 5 saniye süre verdiğimiz için Timer nesnesinin oluşturulmasından 5 saniye sonra @TimeOut işaretli metodu çağırılıyor.

Bu yazıda bu kadar arkadaşlar. Gelecek yazıda @Schedule notasyonu ile Timer Service konusunu işleyeceğiz. Sağlıcakla kalın.