9 Haziran 2009 Salı

Job Scheduling, Trigger

Bir anımsatıcı yaparken en büyük problem istediğiniz zamanda istediğiniz işin yapılmasını sağlaması olacaktır. Bunun için “OpenSymphony” in açık kaynak kodlu olarak geliştirdiği “Quartz” frameWork’u kullanabilirsiniz. Konu hakkında detaylı bilgiye http://www.opensymphony.com/quartz/ adresinden ulaşabilirsiniz.
Quartz “JobScheduling” yaparken bize kolaylılar sağlamaktadır. Quartz için quartz.jar (Quartz 1.4.3 (.zip), Quartz 1.4.3 (.tar.gz), Quartz Web-App) dosyasını Library’ nize eklemeniz gerekmektedir. Bunun ile ilgili örnekleri aşağıda bulabilirsiniz.
İlk olarak Scheduling işlemini yapacağımız “EventManager.java” class’ı yazalım. Burada gerekli işlemleri tanımlarken planlamasını yaptığımız işin belirtilen zaman geldiğinde çalıştıracağı bir “EventJob.java” class ı yazalım.

public class EventManager {
public void eventSchedule()
{
Calendar jobDate = Calendar.getInstance();
int hour = jobTime.get(Calendar.HOUR_OF_DAY);
int minute = jobTime.get(Calendar.MINUTE);
int day = jobDate.get(Calendar.DAY_OF_MONTH);
int month = jobDate.get(Calendar.MONTH);

SchedulerFactory schedulerFactory = null;
Scheduler scheduler = null;

JobDetail jobDetail = null;
Trigger trigger = null;
CronTrigger cronTrigger = null;

Try
{
schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();
jobDetail = new JobDetail((“First_Job”, scheduler.DEFAULT_GROUP, EventJob.class);

trigger = TriggerUtils.makeMonthlyTrigger(“First_Trigger”,
day, hour, minute);
scheduler.scheduleJob(scheduler, trigger);
} catch (Exception e) {
System.err.println(e);
}
}


public class EventJob implements Job {
public void execute(JobExecutionContext arg0) throws JobExecutionException{
System.out.println("Yapılan iş :"+arg0.getJobDetail().getName());
}

JobDetail

JobDetail ile yapılacak işin ismini, hangi grupta çalışacağını ve tetikleyici çalıştığında hangi class’ ı koşacağını belirliyoruz.

Trigger

Trigger’ da ise yapılacak işi tetiklemek için bazı tanımlamalar yapıyoruz. Burada TriggerUtil kullanacak işi, saniyelik, dakikalık, saatlik , günlük, haftalık veya aylık tekrarlamasını sağlayabiliriz. Ayrıca trigger tanımlarken CronTrigger dan da faydalabiliriz. Cron Trigger için Cron zamanlamaya dair Expression’ı (örn. her dakika için “0 * * * * ?”) yazmanız gerekmektedir.

TriggerUtil

TriggerUtil kullanımına veya detaylı özellikleri için javaDoc’undan faydalanabilirsiniz. Kullanıma dair birkaç örnek verecek olursak;

Günlük Hatırlatıcı

public static Trigger makeDailyTrigger(String trigerName, int hour, int minute){..}

Günlük hatırlatmak istediğiniz bir anımsatıcı yapmak istiyorsunuz bunun için makeDailyTrigger kullanmanız yeterli olacaktır. Örnek olarak her gün saat 15:00 ara vermek ve bunu size hergün hatırlatmasını istiyorsunuz. Ayrıca bunu sadece bir yıl için bunu yapmak istiyorsunuz. Bir sonraki yılda tekrarlamasın istiyorsanız setEndTime(Date) fonksiyonunu kullanabilirsiniz.

Trigger trigger = TriggerUtil. makeDailyTrigger(“Ara Ver..!”, 15 , 00);
Calendar endDate = Calendar.getInstance();
endDate= cal.add(Calendar.YEAR,1);
trigger. setEndTime(endDate);
scheduler.scheduleJob(scheduler, trigger);

Haftalık Hatırlatıcı
public static Trigger makeWeeklyTrigger(String trigName, int dayOfWeek, int hour, int minute)

Aylık
public static Trigger makeMonthlyTrigger(String trigerName , int dayOfMonth, int hour, int minute)

Saatlik
public static Trigger makeHourlyTrigger(String trigerName)

Dakikalık
public static Trigger makeMinutelyTrigger(String trigerName)

CronTrigger


CronTrigger, daha karmaşık uygulamalar için esneklik sağlar. Bazı uygulamalarsa basit Trigger lar yeterli olmayacaktır. CronTrigger ‘ı kullanabilmek için Expression lar gerekmektedir. Basit birkaç örnek verecek olursak;

Her Gün Saat 3:00 da -- 0 0 3 * * ?
2005 yılında, her gün saat 22:15 de -- 0 15 22 * * ? 2005
Her Pazartesi ve Cuma saat 10:15 de -- 0 15 10 ? * MON,FRI

cronTrigger = new CronTrigger(“cron_trigger”, scheduler.DEFAULT_GROUP, “0 15 10 ? * MON,FRI”);

Scheduler

Şimdi bir iş zamanlaması yapalım bunun için ellimizde JobDetail ve Trigger tanımlamaları var.

schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
scheduler.start();

jobDetail = new JobDetail((“First_Job”, scheduler.DEFAULT_GROUP, EventJob.class);
trigger = TriggerUtils.makeMonthlyTrigger(“First_Trigger”,
day, hour, minute);
scheduler.scheduleJob(scheduler, trigger);

Hiç yorum yok:

Yorum Gönder