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 2009/05/25 11:24:19 UTC

svn commit: r778362 - in /incubator/sling/trunk/bundles/commons/scheduler: pom.xml src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java

Author: cziegeler
Date: Mon May 25 09:24:17 2009
New Revision: 778362

URL: http://svn.apache.org/viewvc?rev=778362&view=rev
Log:
SLING-984 : Register scheduler with unique name and update to latest available quartz version.

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

Modified: incubator/sling/trunk/bundles/commons/scheduler/pom.xml
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/commons/scheduler/pom.xml?rev=778362&r1=778361&r2=778362&view=diff
==============================================================================
--- incubator/sling/trunk/bundles/commons/scheduler/pom.xml (original)
+++ incubator/sling/trunk/bundles/commons/scheduler/pom.xml Mon May 25 09:24:17 2009
@@ -117,7 +117,7 @@
         <dependency>
             <groupId>opensymphony</groupId>
             <artifactId>quartz</artifactId>
-            <version>1.6.0</version>
+            <version>1.6.3</version>
         </dependency>
 		<dependency>
 		    <groupId>commons-pool</groupId>

Modified: incubator/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java?rev=778362&r1=778361&r2=778362&view=diff
==============================================================================
--- incubator/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java (original)
+++ incubator/sling/trunk/bundles/commons/scheduler/src/main/java/org/apache/sling/commons/scheduler/impl/QuartzScheduler.java Mon May 25 09:24:17 2009
@@ -20,6 +20,7 @@
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
@@ -62,6 +63,8 @@
 
     protected static final String THREAD_POOL_NAME = "SLING_SCHEDULER";
 
+    protected static final String QUARTZ_SCHEDULER_NAME = "ApacheSling";
+
     /** Map key for the job object */
     static final String DATA_MAP_OBJECT = "QuartzJobScheduler.Object";
 
@@ -128,11 +131,28 @@
             final SchedulerFactory factory = new StdSchedulerFactory();
             this.scheduler = factory.getScheduler();
         } else {
+            // create the pool
             final ThreadPool pool = tpm.get(THREAD_POOL_NAME);
             final QuartzThreadPool quartzPool = new QuartzThreadPool(pool);
+
             final DirectSchedulerFactory factory = DirectSchedulerFactory.getInstance();
-            factory.createScheduler(quartzPool, new RAMJobStore());
-            this.scheduler = factory.getScheduler();
+            // unique run id
+            final String runID = new Date().toString().replace(' ', '_');
+            factory.createScheduler(QUARTZ_SCHEDULER_NAME, runID, quartzPool, new RAMJobStore());
+            // quartz does not provide a way to get the scheduler by name AND runID, so we have to iterate!
+            @SuppressWarnings("unchecked")
+            final Iterator<org.quartz.Scheduler> allSchedulersIter = factory.getAllSchedulers().iterator();
+            this.scheduler = null;
+            while ( this.scheduler == null && allSchedulersIter.hasNext() ) {
+                final org.quartz.Scheduler current = allSchedulersIter.next();
+                if ( QUARTZ_SCHEDULER_NAME.equals(current.getSchedulerName())
+                     && runID.equals(current.getSchedulerInstanceId()) ) {
+                    this.scheduler = current;
+                }
+            }
+            if ( this.scheduler == null ) {
+                throw new SchedulerException("Unable to find new scheduler with name " + QUARTZ_SCHEDULER_NAME + " and run ID " + runID);
+            }
         }
         this.scheduler.start();
         if ( this.logger.isDebugEnabled() ) {