EJB

EJB 7 – Timer Service 2 – @Schedule&@Schedules Notasyonları

Merhabalar arkadaşlar. Bu yazıda bir diğer EJB Timer Service imkanı olan Schedule ve Schedules notasyonlarının kullanımını öğrenceğiz.

Önceki yazımızda Programmatic Timer yöntemi ile bir olay akabinde işlemin yapılmasını belli bir süre sonra yaptırmayı öğrenmiştik. Bu yazıda ise bu işlemlerin otomatize edilmiş haline bakacağız.

@Schedule notasyonu bizim verdiğimiz bir zamanda ilgili metodun bizzat sunucu tarafından tetiklenerek çalıştırılması işlemini  gerçekleştirir.  Bu notasyon şu parametreleri alabilir:

Screen Shot 2015-11-25 at 15.43.51

Siz isterseniz buradaki tüm parametreleri kullanıp devreye alabilir isterseniz de sadece işinize geleni alıp kullanabilirsiniz.

@Schedules notasyonu ise bir kaç adet @Schedule notasyonunu birleştirip kullanabildiğimiz notasyondur. Şimdi örnek kodlarımıza bakalım ve kullanımlarını öğrenelim. Örnek kodlarımızı bir uygulamaya koyup uygulamayı sunucuya deploy edip çalıştırmamız yeterli.

EJBTimerSessionBeanLocal.java

Önceki derslerden hatırlayacağınız üzere EJB sınıflarımızı yazarken bir de onları implement ettiğimiz interface’lerimizi oluşturuyorduk. EJBTimerSessionBeanLocal interface’i ile uygulanacak metodları tanımladık.

EJBTimerSessionBean.java 

İlk örneğimizde @Schedule notasyonun kullanımını görüyoruz.  executeScheduleFunction metodumuz @Schedule notasyonu ile işaretlendi ve verilmiş olan parametrelerdeki zaman gelince çalışacak. Örneğimizde hour=”*” ifadesi bu metodun her saatte çalışacağını söyler. minute=”6″ ifadesi her saatteki 6. dakikayı temsil eder. second ifadesi de o dakikadaki çalışılacak saniyeleri temsil eder. Ekran çıktısına bakalım:

Screen Shot 2015-11-27 at 00.07.56

Ekran çıktısından görebileceğimiz üzere 00 saatinin 6. dakikasının 11,22,33,44 ve 55. saniyelerinde metot otomatik olarak tetiklendi.

EJBTimerSessionBean.java

İkinci örneğimizde de @Schedules notasyonunun kullanımını görüyoruz. Az önce de dediğim gibi bu notasyon @Schedule notasyonlarının bir kaç tanesini bir arada tutabilen bir notasyodur. Yani örneğin bir metodu iki farklı zaman pattern’ine göre çalıştırmak istiyoruz. @Schedule tek zaman pattern’ine izin verirken @Schedules ile birden fazla zaman pattern’ini bir araya getirebildiğinden @Schedules notasyonu işimize yarayacaktır.  Ayrıca bu yazıyı Kasım ayında yazdığımdan ekstra şart olarak month=”11″ koyup sunucunun bu metodu sadece Kasım ayı içersinde çalıştırmasını da sağlamış oluyorum. Fakat ben oraya illaki bir sayıyı parametre olarak vermek zorunda değilim. Oracle dökümanına göre oraya ayların ilk 3 harfini de parametre olarak verebilirim. Yani şu şekilde:

  • {“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, “Jul”, “Aug”, “Sep”, “Oct”, “Nov”, Dec”}

Aynı durum günler için de geçerlidir,rakam yerine günlerin ilk 3 harfini kullanabilirim:

  • {“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”}

Ekran çıktısına bakalım:

Screen Shot 2015-11-27 at 00.18.46

Ekran çıktısında göreceğimiz üzere metot verilen parametreler ile 12. saniyenin farklı saniye zamanlarında tetikleniyor. Örnekte önce 2. @Schedule notasyonu sayesinde 10. saniyede tetikleniyor ve akabinde diğer @Schedule notasyonu ile 11. saniyede tekrar tetikleniyor. Bu şekilde birden fazla zaman pattern’i barından işlemler uygulanabiliniyor.

Bu yazıda anlatacaklarım bu kadar arkadaşlar. Gelecek yazıda görüşmek üzere sağlıcakla kalın.