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/08/15 11:15:59 UTC

svn commit: r686183 - /incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java

Author: cziegeler
Date: Fri Aug 15 02:15:57 2008
New Revision: 686183

URL: http://svn.apache.org/viewvc?rev=686183&view=rev
Log:
#0000 - Use scheduler to reschedule jobs instead of starting own threads.

Modified:
    incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java

Modified: incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java?rev=686183&r1=686182&r2=686183&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java (original)
+++ incubator/sling/trunk/extensions/event/src/main/java/org/apache/sling/event/impl/JobEventHandler.java Fri Aug 15 02:15:57 2008
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collection;
+import java.util.Date;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -41,6 +42,7 @@
 
 import org.apache.jackrabbit.util.ISO8601;
 import org.apache.sling.commons.osgi.OsgiUtil;
+import org.apache.sling.commons.scheduler.Scheduler;
 import org.apache.sling.event.EventUtil;
 import org.apache.sling.event.JobStatusProvider;
 import org.osgi.framework.BundleEvent;
@@ -50,7 +52,7 @@
 
 
 /**
- * An event handler handling special job events.
+ * An event handler for special job events.
  *
  * @scr.component label="%job.events.name" description="%job.events.description"
  * @scr.service interface="org.apache.sling.event.JobStatusProvider"
@@ -111,6 +113,9 @@
     /** We remove everything which is older than 5 min by default. */
     protected int cleanupPeriod = DEFAULT_CLEANUP_PERIOD;
 
+    /** The scheduler for rescheduling jobs. @scr.reference */
+    protected Scheduler scheduler;
+
     /**
      * Activate this component.
      * @param context
@@ -371,20 +376,16 @@
                                     final Node eventNode = (Node) this.backgroundSession.getItem(info.nodePath);
                                     if ( !eventNode.isLocked() && !eventNode.hasProperty(EventHelper.NODE_PROPERTY_FINISHED)) {
                                         final EventInfo eInfo = info;
-                                        // we put it back into the queue after a specific time
-                                        this.threadPool.execute(new Runnable() {
+                                        final Date fireDate = new Date();
+                                        fireDate.setTime(System.currentTimeMillis() + this.sleepTime * 1000);
+
+                                            // we put it back into the queue after a specific time
+                                        final Runnable r = new Runnable() {
 
                                             /**
                                              * @see java.lang.Runnable#run()
                                              */
                                             public void run() {
-                                                // wait time before we put it back into the pool
-                                                try {
-                                                    Thread.sleep(sleepTime * 1000);
-                                                } catch (InterruptedException e) {
-                                                    // ignore
-                                                    ignoreException(e);
-                                                }
                                                 try {
                                                     queue.put(eInfo);
                                                 } catch (InterruptedException e) {
@@ -393,7 +394,22 @@
                                                 }
                                             }
 
-                                        });
+                                        };
+                                        try {
+                                            this.scheduler.fireJobAt(null, r, null, fireDate);
+                                        } catch (Exception e) {
+                                            // we ignore the exception
+                                            ignoreException(e);
+                                            // then wait for the time and readd the job
+                                            try {
+                                                Thread.sleep(sleepTime * 1000);
+                                            } catch (InterruptedException ie) {
+                                                // ignore
+                                                ignoreException(ie);
+                                            }
+                                            r.run();
+                                        }
+
                                     }
                                 } catch (RepositoryException e) {
                                     // ignore
@@ -868,15 +884,12 @@
                     // delay rescheduling?
                     if ( job.getProperty(EventUtil.PROPERTY_JOB_RETRY_DELAY) != null ) {
                         final long delay = (Long)job.getProperty(EventUtil.PROPERTY_JOB_RETRY_DELAY);
+                        final Date fireDate = new Date();
+                        fireDate.setTime(System.currentTimeMillis() + delay);
+
                         final Runnable t = new Runnable() {
                             public void run() {
                                 try {
-                                    Thread.sleep(delay);
-                                } catch (InterruptedException e) {
-                                    // this should never happen
-                                    ignoreException(e);
-                                }
-                                try {
                                     queue.put(info);
                                 } catch (InterruptedException e) {
                                     // this should never happen
@@ -884,7 +897,13 @@
                                 }
                             }
                         };
-                        this.threadPool.execute(t);
+                        try {
+                            this.scheduler.fireJobAt(null, t, null, fireDate);
+                        } catch (Exception e) {
+                            // we ignore the exception and just put back the job in the queue
+                            ignoreException(e);
+                            t.run();
+                        }
                     } else {
                         // put directly into queue
                         try {