You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2008/07/02 14:28:28 UTC

svn commit: r673376 - in /incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl: QuartzJobExecutor.java QuartzScheduler.java

Author: cziegeler
Date: Wed Jul  2 05:28:27 2008
New Revision: 673376

URL: http://svn.apache.org/viewvc?rev=673376&view=rev
Log:
SLING-561 - use the same object for detecting if a job is run in parallel.

Modified:
    incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
    incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java

Modified: incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java?rev=673376&r1=673375&r2=673376&view=diff
==============================================================================
--- incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java (original)
+++ incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzJobExecutor.java Wed Jul  2 05:28:27 2008
@@ -40,18 +40,17 @@
 
         final JobDataMap data = context.getJobDetail().getJobDataMap();
 
-        final Boolean canRunConcurrentlyB = ((Boolean) data.get(QuartzScheduler.DATA_MAP_RUN_CONCURRENT));
-        final boolean canRunConcurrently = ((canRunConcurrentlyB == null) ? true : canRunConcurrentlyB.booleanValue());
+        final QuartzScheduler.ConcurrentHandler concurrentHandler
+             = (QuartzScheduler.ConcurrentHandler)data.get(QuartzScheduler.DATA_MAP_CONCURRENT_HANDLER);
+        final boolean canRunConcurrently = (concurrentHandler == null ? true : concurrentHandler.runConcurrently);
 
         if (!canRunConcurrently) {
-            Boolean isRunning = (Boolean) data.get(QuartzScheduler.DATA_MAP_KEY_ISRUNNING);
-            if (Boolean.TRUE.equals(isRunning)) {
+            if ( concurrentHandler.isRunning ) {
                 return;
             }
+            concurrentHandler.isRunning = true;
         }
 
-        this.setup(data);
-
         final Object job = data.get(QuartzScheduler.DATA_MAP_OBJECT);
         final Logger logger = (Logger)data.get(QuartzScheduler.DATA_MAP_LOGGER);
 
@@ -77,19 +76,12 @@
             // there is nothing we can do here, so we just log
             logger.error("Exception during job execution of " + job + " : " + t.getMessage(), t);
         } finally {
-
-            this.release(data);
+            if (!canRunConcurrently) {
+                concurrentHandler.isRunning = false;
+            }
         }
     }
 
-    protected void setup(JobDataMap data) throws JobExecutionException {
-        data.put(QuartzScheduler.DATA_MAP_KEY_ISRUNNING, Boolean.TRUE);
-    }
-
-    protected void release(JobDataMap data) {
-        data.put(QuartzScheduler.DATA_MAP_KEY_ISRUNNING, Boolean.FALSE);
-    }
-
     public static final class JobContextImpl implements JobContext {
 
         protected final Map<String, Serializable> configuration;

Modified: incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java?rev=673376&r1=673375&r2=673376&view=diff
==============================================================================
--- incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java (original)
+++ incubator/sling/trunk/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java Wed Jul  2 05:28:27 2008
@@ -68,18 +68,15 @@
     /** Map key for the job name */
     static final String DATA_MAP_NAME = "QuartzJobScheduler.JobName";
 
-    /** Map key for the concurrent run property */
-    static final String DATA_MAP_RUN_CONCURRENT = "QuartzJobScheduler.RunConcurrently";
-
-    /** Map key for the run status */
-    static final String DATA_MAP_KEY_ISRUNNING = "QuartzJobExecutor.isRunning";
-
     /** Map key for the configuration. */
     static final String DATA_MAP_CONFIGURATION = "QuartzJobScheduler.Configuration";
 
     /** Map key for the logger. */
     static final String DATA_MAP_LOGGER = "QuartzJobScheduler.Logger";
 
+    /** Map key for the concurrent handler */
+    static final String DATA_MAP_CONCURRENT_HANDLER = "QuartzJobExecutor.ConcurrentHandler";
+
     protected org.quartz.Scheduler scheduler;
 
     protected final List<Object[]> registeredJobs = new ArrayList<Object[]>();
@@ -215,7 +212,9 @@
         jobDataMap.put(DATA_MAP_OBJECT, job);
 
         jobDataMap.put(DATA_MAP_NAME, jobName);
-        jobDataMap.put(DATA_MAP_RUN_CONCURRENT, (concurent? Boolean.TRUE: Boolean.FALSE));
+        final ConcurrentHandler handler = new ConcurrentHandler();
+        handler.runConcurrently = concurent;
+        jobDataMap.put(DATA_MAP_CONCURRENT_HANDLER, handler);
         jobDataMap.put(DATA_MAP_LOGGER, this.logger);
         if ( config != null ) {
             jobDataMap.put(DATA_MAP_CONFIGURATION, config);
@@ -465,4 +464,10 @@
         }
     }
 
+    protected static final class ConcurrentHandler {
+
+        public boolean runConcurrently;
+
+        public boolean isRunning = false;
+    }
 }