Author: xuhaihong Date: Tue May 10 09:01:14 2011 New Revision: 1101370 URL: http://svn.apache.org/viewvc?rev=1101370&view=rev Log: OPENEJB-1541 We should use quartz managed trigger after the trigger was scheduled. (Patch from Shawn Jiang)
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java?rev=1101370&r1=1101369&r2=1101370&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java (original) +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/EjbTimerServiceImpl.java Tue May 10 09:01:14 2011 @@ -35,7 +35,6 @@ import org.apache.openejb.InterfaceType; import org.apache.openejb.OpenEJBException; import org.apache.openejb.RpcContainer; import org.apache.openejb.core.BaseContext; -import org.apache.openejb.core.ThreadContext; import org.apache.openejb.core.transaction.TransactionType; import org.apache.openejb.loader.SystemInstance; import org.apache.openejb.util.LogCategory; @@ -145,7 +144,9 @@ public class EjbTimerServiceImpl impleme */ public void schedule(TimerData timerData) { if (scheduler == null) throw new IllegalStateException("scheduler is configured properly"); - + + timerData.setScheduler(scheduler); + Trigger trigger = timerData.getTrigger(); trigger.setJobName(OPENEJB_TIMEOUT_JOB_NAME); trigger.setJobGroup(OPENEJB_TIMEOUT_JOB_GROUP_NAME); Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java?rev=1101370&r1=1101369&r2=1101370&view=diff ============================================================================== --- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java (original) +++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/timer/TimerData.java Tue May 10 09:01:14 2011 @@ -31,6 +31,7 @@ import javax.transaction.Transaction; import org.apache.openejb.util.LogCategory; import org.apache.openejb.util.Logger; +import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.quartz.Trigger; @@ -50,6 +51,12 @@ public abstract class TimerData { private boolean persistent; protected Trigger trigger; + + protected Scheduler scheduler; + + public void setScheduler(Scheduler scheduler) { + this.scheduler = scheduler; + } // EJB Timer object given to user code private final Timer timer; @@ -203,8 +210,20 @@ public abstract class TimerData { public boolean isPersistent(){ return persistent; } - + + public Trigger getTrigger() { + + if (scheduler != null) { + try { + if (scheduler.getTrigger(trigger.getName(), trigger.getGroup()) != null) { + return scheduler.getTrigger(trigger.getName(), trigger.getGroup()); + } + } catch (SchedulerException e) { + return null; + } + } + return trigger; } @@ -212,13 +231,21 @@ public abstract class TimerData { if (cancelled) { throw new NoSuchObjectLocalException("The timer has been cancelled"); } - Date nextTimeout = trigger.getNextFireTime(); + + + Date nextTimeout = null; + + if(getTrigger()!=null){ + + nextTimeout = getTrigger().getNextFireTime(); + } + + + if (nextTimeout == null) { throw new NoMoreTimeoutsException("The timer has no future timeouts"); - } else if (nextTimeout.getTime() < System.currentTimeMillis()) { - //TODO Double check whether the thrown exception is expected, this may occurs while the timeout is arrived, but the task has not scheduled yet. - throw new NoSuchObjectLocalException("The timer has been expired"); - } + } + return nextTimeout; }