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:
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
1 2 3 4 5 6 7 |
package ejbTimerPackage; import javax.ejb.Local; @Local public interface EJBTimerSessionBeanLocal { public void executeScheduleFunction(); public void executeSchedulesFunction(); } |
Ö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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package ejbTimerPackage; import javax.ejb.Schedule; import javax.ejb.Stateless; import java.util.Date; import javax.ejb.Schedules; @Stateless public class EJBTimerSessionBean implements EJBTimerSessionBeanLocal { @Override @Schedule(second = "11,22,33,44,55",minute = "06",hour = "*") public void executeScheduleFunction() { System.out.println("executeScheduleFunction is being executed..."); System.out.println("Execution Time:"+new Date()); System.out.println("---"); } @Override public void executeSchedulesFunction() { } } |
İ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:
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
package ejbTimerPackage; import javax.ejb.Schedule; import javax.ejb.Stateless; import java.util.Date; import javax.ejb.Schedules; @Stateless public class EJBTimerSessionBean implements EJBTimerSessionBeanLocal { @Override public void executeScheduleFunction() { } @Override @Schedules({ @Schedule(month = "11",second = "11,22,33,44,55",minute = "12",hour = "*"), @Schedule(month = "11",second = "10,20,30,40,50",minute = "12",hour = "*") }) public void executeSchedulesFunction() { System.out.println("executeSchedulesFunction is being executed..."); System.out.println("Execution Time:"+new Date()); System.out.println("---"); } } |
İ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:
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.