[jboss-jira] [JBoss JIRA] (WFLY-2840) @Schedule EJB Timer not using timezone when calcualting next timeout

Brad Maxwell (JIRA) issues at jboss.org
Thu Jan 30 00:41:28 EST 2014


    [ https://issues.jboss.org/browse/WFLY-2840?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12939936#comment-12939936 ] 

Brad Maxwell edited comment on WFLY-2840 at 1/30/14 12:39 AM:
--------------------------------------------------------------

The issue appears to be in 


org.jboss.as.ejb3.timerservice.task.CalendarTimerTask

It looks like calculateNextTimeout, Calendar cal = new GregorianCalendar(), should take in the timezone specified in the ScheduleExpression, such as :

TimeZone tz = TimeZone.getTimeZone(((CalendarTimer) timer).getCalendarTimeout().getScheduleExpression().getTimezone());
        Calendar cal = new GregorianCalendar(tz);

Or actually, CalendarTimerTask is calling  CalendarBasedTimeout.getNextTimeout which takes in the calendar created from CalendarTimerTask, and it has access to the scheduleExpression, so that is probably the better place to change it.

org.jboss.as.ejb3.timerservice.schedule.CalendarBasedTimeout.getNextTimeout

        nextCal.setTimeZone(TimeZone.getTimeZone(scheduleExpression.getTimezone()));

  
Currently:

21:53:00,006 INFO  [stdout] (EJB default - 1) ScheduleTest: nextTimeout:Wed Jan 29 22:00:00 CST 2014

With Change:

21:51:00,025 INFO  [stdout] (EJB default - 1) ScheduleTest: nextTimeout:Wed Jan 29 21:52:00 CST 2014
21:52:00,002 INFO  [stdout] (EJB default - 2) ScheduleTest: nextTimeout:Wed Jan 29 21:53:00 CST 2014
...
                
      was (Author: bmaxwell):
    The issue appears to be in 
org.jboss.as.ejb3.timerservice.task.CalendarTimerTask

It looks like calculateNextTimeout, Calendar cal = new GregorianCalendar(), should take in the timezone specified in the ScheduleExpression, such as :

TimeZone tz = TimeZone.getTimeZone(((CalendarTimer) timer).getCalendarTimeout().getScheduleExpression().getTimezone());
        Calendar cal = new GregorianCalendar(tz);
  
Currently:

21:53:00,006 INFO  [stdout] (EJB default - 1) ScheduleTest: nextTimeout:Wed Jan 29 22:00:00 CST 2014

With Change:

21:51:00,025 INFO  [stdout] (EJB default - 1) ScheduleTest: nextTimeout:Wed Jan 29 21:52:00 CST 2014
21:52:00,002 INFO  [stdout] (EJB default - 2) ScheduleTest: nextTimeout:Wed Jan 29 21:53:00 CST 2014
...
                  
> @Schedule EJB Timer not using timezone when calcualting next timeout
> --------------------------------------------------------------------
>
>                 Key: WFLY-2840
>                 URL: https://issues.jboss.org/browse/WFLY-2840
>             Project: WildFly
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: EJB
>    Affects Versions: 8.0.0.CR1
>            Reporter: Brad Maxwell
>            Assignee: David Lloyd
>
> With a system running in Central Timezone, if it uses the annotation below specifying the timezone as Eastern timezone, with the hour set to the current hour.
> The timer will fire once, and it will calculate the next timeout to be in the next hour CST, where as it should take in consideration the timezone specified on @Schedule which is Eastern.  If it did, then the timer should continue to fire every minute.
> {code}
>   @Schedule(persistent = false, timezone = "America/New_York", dayOfMonth = "*", dayOfWeek = "*", month = "*", hour = "22", minute = "*", second = "0", year = "*")
> {code}
> 21:53:00,006 INFO  [stdout] (EJB default - 1) ScheduleTest: nextTimeout:Wed Jan 29 22:00:00 CST 2014
> {code}
> import javax.ejb.Schedule;
> import javax.ejb.Singleton;
> import javax.ejb.Startup;
> @Startup
> @Singleton
> public class ScheduleTest {
>   @Schedule(persistent = false, timezone = "America/New_York", dayOfMonth = "*", dayOfWeek = "*", month = "*", hour = "22", minute = "*", second = "0", year = "*")
>   public void helloWorld(Timer time) {
>     System.out.println("ScheduleTest: timer:" + time.getClass().getName() + " " + time.getNextTimeout() + " " + time.getInfo());
>   }
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list