7 Kasım 2017 Salı

Jakarta EE TimerService Arayüzü - Programmatic Timer

Giriş
Şu satırı dahil ederiz.
import jakarta.ejb.ScheduleExpression;
import jakarta.ejb.TimerConfig;
import jakarta
.ejb.TimerService;
Bu arayüz yerine @Schedule anotasyonu da kullanılabilir. Açıklaması şöyle. Yani TimerService ile timer başlatıldıktan sonra @Timeout olarak işaretli metodumuz çağrılır
the timer service can be injected into any bean (except a stateful session bean) and the business logic should be placed in a method annotated with @Timeout. The timer can be initialized by a method annotated @PostConstruct of the beans or it can also be initialized just by calling a method.
Bu sınıf ile birlikte kullanılan javax.ejb.TimerConfig nesnesi timer nesnesinin persistent olup olmadığını belirtmek için kullanılır

Bu sınıfı bir EJB içine enjekte etmek için şöyle yaparız.
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.ejb.ScheduleExpression;
import javax.ejb.Singleton;
import javax.ejb.Startup;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class NightlyWorkTerminationEmailSender extends SchedulableService {
  private final static String TIMER_ID = "WorkTerminationEmailNotificationServiceTimer";

  @Resource
  private TimerService timerService;
  ...
}
createCalendarTimer metodu
Belirtilen cron cümlesine göre timer başlatır. cron cümlesi tek seferlik veya periyodik bir iş olabilir.

Örneğin periyodik işi için ScheduleExpression şöyle olabilir.
ScheduleExpression result = new ScheduleExpression();
result.hour("12").dayOfMonth("1").minute("0").month("*");
Örnek
Şöyle yaparız.
// get the configuration parameter from DB
Date notificationTime = ...;

Calendar calendar = Calendar.getInstance();
calendar.setTime(notificationTime);

// create schedule
ScheduleExpression schedule = new ScheduleExpression();
schedule.hour(calendar.get(Calendar.HOUR_OF_DAY)).minute(calendar.get(Calendar.MINUTE));

timerService.createCalendarTimer(schedule, new TimerConfig("MyTimer", false));
createTimer metodu - Periyodik Timer
Örnek
Şöyle yaparız
timerService.createTimer(0,1000, "Every second timer with no delay");




Hiç yorum yok:

Yorum Gönder