Friday, July 12, 2013

EJB Timer Service API

Timer Service API.


Timer Service ის გამოსაყენებლად იმპლემენტაცია უნდა გავუკეთოთ javax.ejb.TimedObject ინტერფეისს, რომელშიც აღწერილია ქოლბექ მეთოდი ejbTimeout( ):



EJB  ში შეგვიძლია @javax.ejb.Timeout ანოტაციაც დავადოთ მეთოდს, რომელიც voidს აბრუნებს, და ექნება  javax.ejb.Timer პარამეტრი.
აქვე ორივეს ვნახავთ


ალტერნატივა  არი @javax.ejb.Timeout ანოტაცია:


}


იმისათვის რომ დავარეგისტრიროთ ბინი  დროის პერიოდში TimerService –ს ვიყენებთ. TimerService შეგვიძლია inject გავუკეთოთ @javax.annotation.Resource ით ან EJBContext იდან წამოვიღოთ.


ანუ ეს ორი ვარიანტი გვაქვს:
@Resourceprivate SessionContext ctx; ctx.getTimerService();
@Resource javax.ejb.TimerService timerService;


მაგალითად დარეგისტრირებისთვის შევქმნათ  CalendarTimer, ან შეგვილია პირდაპირ IntervalTimer, ანაც SingleActionTimer იც აქვს. დეტალურად API ში შეგიძლიათ ნახოთ, რა რას აკეთებს, აქ რო არ დავწყო მე პოემების წერა. აგერ ლინკიც:  http://docs.oracle.com/javaee/6/api/javax/ejb/TimerService.html  -  Just Google :-)



ტაიმერის წაშლაც ადვილადაა შესაძლებელი, პირდაპირ cancell() მეთოდი აქვს.


აგერ ერთი მაგალითიც  CalendarTimer–ის.



მოლკედ მთავარი მუღამი ისაა, რომ თუ სერვერი დარესტარტდება ან რამე მაგდაგვარი, ტაიმერრი თავის დროს მაინც გააგრძელებს მუშაობას. ანუ რომ შეხვიდეთ Jboss ის ფოლდერში, მაგალითად : /usr/jboss/standalone/data/timer-service-data ფოლდერში
მანდ ნახავთ თქვენს ობიექტებს ტაიმერისას.

რაც შეეხება EJB 3.1 აქ უკვე არის @Schedule ანოტაცია. ძალიან მარტიავად



აგერ XML ითაც შეგვიძლია გავაკეთოთ იგივე @Schedule რომ არ ვწეროთ:


ეს XML კი META-INF ში ჩავაგდოდ – Deployს მერე jar ის META_INF ში ჩახტება;



2 comments:

  1. როდესაც ჯობის გამოყენება გინდა მაშინ უნდა გამოიყენო ეს მეთოდი როგორც ვხვდები.
    ჯობების შესაქმნელად კარგი და მარტივი არის MessageDrivenBean ების გამოყენაბა. კლასს აწერ თავზე ანოტაციას და ეს კლასი იმპლემენტაციას უკეთებს (Quartz შედულერის) Job ინტერფეისს.

    @MessageDriven(activationConfig = { @ActivationConfigProperty(propertyName = "cronTrigger", propertyValue = "0/10 * * * * ?") })
    @ResourceAdapter("quartz-ra.rar")
    public class TestJob implements StatefulJob{

    public void execute(JobExecutionContext arg0) {

    //logika
    }
    }

    ReplyDelete
  2. კი მასეც შეილება, აქ კვარცს იყენებ ოღონდ. არა persistent სქედულერს შექმნის ეს. MDB არის აქ რომელიც კვარცის ინტერფეისის იმპლემენტაციას აკეთებს. კაი ვეშია კვარციც.

    არ გეთანხმები რაღაცაში - შეგიძლია ვაფშემცდა იმპლემეტაცია გააკეთო org.quartz.Job ისა, Message Driven Bean როცა არ გჭირდება ტყუილად არ უნდა გამოიყენო. კვარცთან ისე მერე გაქ SimpleTrigger და CronTrigger. მოკლედ, უფრო დახვეწილი როჟაა კვარცი, მარა როცა გჭირდება მაშინ უნდა გამოიყენო. JMS თუ არ გინდა, არ უნდა ჩათხარო ტყუილად EJB ში.

    ReplyDelete