package biz.karms.sinkit.ejb.impl; import biz.karms.sinkit.ejb.CoreService; import biz.karms.sinkit.exception.ArchiveException; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.LocalBean; import javax.ejb.ScheduleExpression; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.ejb.Timeout; import javax.ejb.Timer; import javax.ejb.TimerConfig; import javax.ejb.TimerService; import javax.inject.Inject; import java.util.logging.Logger; /** * @author Tomas Kozel * @author Michal Karm Babacek */ @Singleton @LocalBean @Startup public class IoCDeactivatorEJB { @EJB private CoreService coreService; @Inject private Logger log; @Resource private TimerService timerService; public static final boolean SINKIT_IOC_DEACTIVATOR_SKIP = (System.getenv().containsKey("SINKIT_IOC_DEACTIVATOR_SKIP")) && Boolean.parseBoolean(System.getenv("SINKIT_IOC_DEACTIVATOR_SKIP")); @PostConstruct private void initialize() { if (!SINKIT_IOC_DEACTIVATOR_SKIP) { timerService.createCalendarTimer(new ScheduleExpression().hour("*").minute("0").second("0"), new TimerConfig("IoCDeactivator", false)); } } @PreDestroy public void stop() { log.info("Stop all existing IoCDeactivator timers."); for (Timer timer : timerService.getTimers()) { log.fine("Stop IoCDeactivator timer: " + timer.getInfo()); timer.cancel(); } } @Timeout public void scheduler(Timer timer) throws InterruptedException, ArchiveException { log.info("IoCDeactivator: Info=" + timer.getInfo()); coreService.deactivateIocs(); } }