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;
     }
 


Reply via email to