Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to start an EJB Timer on deployment?
    text
    copied!<p>I need to create an interval Timer that is set to run once a week automatically. I don't want it to start based on user input, but I want it to be created when the application is deployed to the server. Every example that I have seen has another class starting the timer. I don't want to use a message driven bean to create the timer because the audit should just query a database for a given time period and is not based off of actions which send messages.</p> <p>I have included an example of a Timer. In the example below, the timer should fire every 10 minutes. As a test I want the timer to fire every 10 minutes so I can test the timer.</p> <pre><code>@Stateless public class TimerTest implements TimerTestLocal, TimerTestRemote{ @Resource private TimerService timerService; private Logger log = Logger.getLogger(TimerTest.class); private long interval = 1000 * 60 * 10; private static String TIMER_NAME = "AuditTimer"; public void scheduleTimer() throws NamingException { // TODO Auto-generated method stub Calendar cal = Calendar.getInstance(); //cal.set(Calendar.HOUR_OF_DAY, 23);//run at 11pm //cal.set(Calendar.MINUTE, 00); //cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm"); log.debug("schedule for: " + sdf.format(cal.getTime())); timerService.createTimer(cal.getTime(), interval, TIMER_NAME); } public void cancelTimer() { for(Object obj : timerService.getTimers()) { Timer timer = (Timer)obj; if(timer.getInfo().equals(TIMER_NAME)) timer.cancel(); } } @Timeout public void timerEvent(Timer timer) { log.debug("timer fired"); } } </code></pre> <p>So is there any way that I can start this timer when the application is deployed? I don't think it's a good idea to put the creation of the Timer in a @PostConstruct method because of class loaders on in the server.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload