Author: hiranya
Date: Sat Jul 27 23:54:36 2013
New Revision: 1507748

URL: http://svn.apache.org/r1507748
Log:
Checking whether a specified task is already running before scheduling it. 
Applying the patch for SYNAPSE-885 with some modifications.

Modified:
    
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java

Modified: 
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
URL: 
http://svn.apache.org/viewvc/synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java?rev=1507748&r1=1507747&r2=1507748&view=diff
==============================================================================
--- 
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
 (original)
+++ 
synapse/trunk/java/modules/tasks/src/main/java/org/apache/synapse/task/TaskScheduler.java
 Sat Jul 27 23:54:36 2013
@@ -23,6 +23,7 @@ import org.apache.commons.logging.LogFac
 import org.quartz.*;
 import org.quartz.impl.StdSchedulerFactory;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
@@ -201,15 +202,22 @@ public class TaskScheduler {
         }
 
         try {
-            if (log.isDebugEnabled()) {
-                log.debug("scheduling job : " + jobDetail + " with trigger " + 
trigger);
+            if (taskDescription.getCount() != 0) {
+                if (!isTaskAlreadyRunning(jobDetail.getKey())) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Scheduling job : " + jobDetail + " with 
trigger " + trigger);
+                    }
+                    scheduler.scheduleJob(jobDetail, trigger);
+                } else {
+                    log.warn("Did not schedule the job : " + jobDetail + ". 
The job is already running.");
+                }
+            } else {
+                log.warn("Did not schedule the job : " + jobDetail + ". Job 
count is zero.");
             }
-            scheduler.scheduleJob(jobDetail, trigger);
         } catch (SchedulerException e) {
             throw new SynapseTaskException("Error scheduling job : " + 
jobDetail
                     + " with trigger " + trigger);
         }
-
     }
 
     /**
@@ -258,10 +266,18 @@ public class TaskScheduler {
         jobDetail.getJobDataMap().put(TaskDescription.INSTANCE, task);
 
         try {
-            if (log.isDebugEnabled()) {
-                log.debug("scheduling job : " + jobDetail + " with trigger " + 
trigger);
+            if (taskDescription.getCount() != 0) {
+                if (!isTaskAlreadyRunning(jobDetail.getKey())) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Scheduling job : " + jobDetail + " with 
trigger " + trigger);
+                    }
+                    scheduler.scheduleJob(jobDetail, trigger);
+                } else {
+                    log.warn("Did not schedule the job : " + jobDetail + ". 
The job is already running.");
+                }
+            } else {
+                log.warn("Did not schedule the job : " + jobDetail + ". Job 
count is zero.");
             }
-            scheduler.scheduleJob(jobDetail, trigger);
         } catch (SchedulerException e) {
             throw new SynapseTaskException("Error scheduling job : " + 
jobDetail
                     + " with trigger " + trigger);
@@ -346,6 +362,20 @@ public class TaskScheduler {
         return runningTasks;
     }
 
+    private boolean isTaskAlreadyRunning(JobKey jobKey) throws 
SchedulerException {
+        List<JobExecutionContext> currentJobs = 
scheduler.getCurrentlyExecutingJobs();
+        JobKey currentJobKey;
+        for (JobExecutionContext jobCtx : currentJobs) {
+            currentJobKey = jobCtx.getJobDetail().getKey();
+            if (currentJobKey.compareTo(jobKey) == 0) {
+                //found it!
+                log.warn("The job " + jobKey.getName() + " is already 
running");
+                return true;
+            }
+        }
+        return false;
+    }
+
     /**
      * Sets a Trigger Factory , if it needs to void using default factory
      *
@@ -371,8 +401,7 @@ public class TaskScheduler {
             schedulerMetaData = schedulerMetaData.append("[ Scheduler : ")
                     .append(scheduler).append(" ]");
         }
-        return new StringBuffer().append("[ TaskScheduler[ Name :").
-                append(name).append("]").append(schedulerMetaData).append(" 
]").toString();
+        return "[ TaskScheduler[ Name : " + name + " ]" + schedulerMetaData + 
" ]";
     }
 
     private void assertInitialized() {
@@ -383,7 +412,6 @@ public class TaskScheduler {
     }
 
     private void assertStarted() {
-
         try {
             if (!scheduler.isStarted()) {
                 throw new SynapseTaskException("Scheduler has not been started 
yet", log);


Reply via email to