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 2013/10/07 18:12:41 UTC

svn commit: r1529990 - in /sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event: impl/jobs/ impl/support/ jobs/

Author: cziegeler
Date: Mon Oct  7 16:12:41 2013
New Revision: 1529990

URL: http://svn.apache.org/r1529990
Log:
SLING-3139 : Provide a way to schedule jobs
SLING-3138 : Add fluent api to create new jobs

Modified:
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobBuilderImpl.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobSchedulerImpl.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/ScheduledJobInfoImpl.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ScheduleInfo.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobBuilder.java
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/ScheduledJobInfo.java

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobBuilderImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobBuilderImpl.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobBuilderImpl.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobBuilderImpl.java Mon Oct  7 16:12:41 2013
@@ -94,13 +94,13 @@ public class JobBuilderImpl implements J
         }
 
         @Override
-        public boolean periodically(final int minutes) {
+        public boolean hourly(final int minutes) {
             if ( check() ) {
                 if ( minutes > 0 ) {
-                    final ScheduleInfo info = ScheduleInfo.PERIODIC(minutes);
+                    final ScheduleInfo info = ScheduleInfo.HOURLY(minutes);
                     return jobManager.addScheduledJob(topic, name, properties, scheduleName, suspend, info);
                 }
-                logger.warn("Discarding scheduled job - period must be higher than 0 : {}", minutes);
+                logger.warn("Discarding scheduled job - minutes must be between 0 and 59 : {}", minutes);
             }
             return false;
         }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobSchedulerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobSchedulerImpl.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobSchedulerImpl.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/JobSchedulerImpl.java Mon Oct  7 16:12:41 2013
@@ -275,15 +275,13 @@ public class JobSchedulerImpl
                 switch ( info.getScheduleType() ) {
                     case DAILY:
                     case WEEKLY:
+                    case HOURLY:
                         this.scheduler.addJob(info.getSchedulerJobId(), this, config, info.getCronExpression(), false);
                         break;
                     case DATE:
                         this.scheduler.fireJobAt(info.getSchedulerJobId(), this, config, info.getNextScheduledExecution());
                         break;
-                    case PERIODICALLY:
-                        this.scheduler.addPeriodicJob(info.getSchedulerJobId(), this, config, info.getPeriod() * 1000, false);
-                        break;
-                    }
+                }
             } catch (final Exception e) {
                 // we ignore it if scheduled fails...
                 this.ignoreException(e);

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/ScheduledJobInfoImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/ScheduledJobInfoImpl.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/ScheduledJobInfoImpl.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/jobs/ScheduledJobInfoImpl.java Mon Oct  7 16:12:41 2013
@@ -104,9 +104,12 @@ public class ScheduledJobInfoImpl implem
                               nextW.add(Calendar.WEEK_OF_YEAR, 1);
                           }
                           return nextW.getTime();
-            case PERIODICALLY : final Calendar nextP = Calendar.getInstance();
-                                nextP.add(Calendar.MINUTE, this.getPeriod()); // TODO - this is not correct
-                                return nextP.getTime();
+            case HOURLY : final Calendar nextH = Calendar.getInstance();
+                          nextH.set(Calendar.MINUTE, this.getMinuteOfHour());
+                          if ( nextH.before(now) ) {
+                              nextH.add(Calendar.HOUR_OF_DAY, 1);
+                          }
+                          return nextH.getTime();
         }
         return null;
     }
@@ -132,15 +135,7 @@ public class ScheduledJobInfoImpl implem
      */
     @Override
     public int getMinuteOfHour() {
-        return this.scheduleInfo.getPeriod();
-    }
-
-    /**
-     * @see org.apache.sling.event.jobs.ScheduledJobInfo#getPeriod()
-     */
-    @Override
-    public int getPeriod() {
-        return this.scheduleInfo.getPeriod();
+        return this.scheduleInfo.getMinuteOfHour();
     }
 
     /**
@@ -237,6 +232,11 @@ public class ScheduledJobInfoImpl implem
             sb.append(" * * ");
             sb.append(this.scheduleInfo.getDayOfWeek());
             return sb.toString();
+        } else if ( this.scheduleInfo.getScheduleType() == ScheduleType.HOURLY ) {
+            final StringBuilder sb = new StringBuilder("0 ");
+            sb.append(this.scheduleInfo.getMinuteOfHour());
+            sb.append(" * * * *");
+            return sb.toString();
         }
         return null;
     }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ScheduleInfo.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ScheduleInfo.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ScheduleInfo.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/ScheduleInfo.java Mon Oct  7 16:12:41 2013
@@ -31,26 +31,24 @@ public class ScheduleInfo implements Ser
     /** Serialization version. */
     private static final int VERSION = 1;
 
-    public static ScheduleInfo PERIODIC(final int minutes) {
-        return new ScheduleInfo(ScheduleType.PERIODICALLY, minutes, -1, -1, -1, null);
+    public static ScheduleInfo HOURLY(final int minutes) {
+        return new ScheduleInfo(ScheduleType.HOURLY, -1, -1, minutes, null);
     }
 
     public static ScheduleInfo AT(final Date at) {
-        return new ScheduleInfo(ScheduleType.DATE, -1, -1, -1, -1, at);
+        return new ScheduleInfo(ScheduleType.DATE, -1, -1, -1, at);
     }
 
     public static ScheduleInfo WEEKLY(final int day, final int hour, final int minute) {
-        return new ScheduleInfo(ScheduleType.WEEKLY, -1, day, hour, minute, null);
+        return new ScheduleInfo(ScheduleType.WEEKLY, day, hour, minute, null);
     }
 
     public static ScheduleInfo DAYLY(final int hour, final int minute) {
-        return new ScheduleInfo(ScheduleType.DAILY, -1, -1, hour, minute, null);
+        return new ScheduleInfo(ScheduleType.DAILY, -1, hour, minute, null);
     }
 
     private ScheduleType scheduleType;
 
-    private int period;
-
     private int dayOfWeek;
 
     private int hourOfDay;
@@ -60,13 +58,11 @@ public class ScheduleInfo implements Ser
     private Date at;
 
     private ScheduleInfo(final ScheduleType scheduleType,
-            final int period,
             final int dayOfWeek,
             final int hourOfDay,
             final int minuteOfHour,
             final Date at) {
         this.scheduleType = scheduleType;
-        this.period = period;
         this.dayOfWeek = dayOfWeek;
         this.hourOfDay = hourOfDay;
         this.minuteOfHour = minuteOfHour;
@@ -84,7 +80,6 @@ public class ScheduleInfo implements Ser
             throws IOException {
         out.writeInt(VERSION);
         out.writeObject(this.scheduleType.name());
-        out.writeInt(this.period);
         out.writeInt(this.dayOfWeek);
         out.writeInt(this.hourOfDay);
         out.writeInt(this.minuteOfHour);
@@ -103,7 +98,6 @@ public class ScheduleInfo implements Ser
             throw new ClassNotFoundException(this.getClass().getName());
         }
         this.scheduleType = ScheduleType.valueOf((String)in.readObject());
-        this.period = in.readInt();
         this.dayOfWeek = in.readInt();
         this.hourOfDay = in.readInt();
         this.minuteOfHour = in.readInt();
@@ -129,8 +123,4 @@ public class ScheduleInfo implements Ser
     public int getMinuteOfHour() {
         return this.minuteOfHour;
     }
-
-    public int getPeriod() {
-        return this.period;
-    }
 }

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobBuilder.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobBuilder.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/JobBuilder.java Mon Oct  7 16:12:41 2013
@@ -70,12 +70,12 @@ public interface JobBuilder {
         ScheduleBuilder suspend(final boolean flag);
 
         /**
-         * Schedule the job periodically every N minutes.
-         * If the minutes argument is less than 1, the job can't be scheduled.
-         * @param minutes Positive number of minutes
+         * Schedule the job hourly at the given minute.
+         * If the minutes argument is less than 0 or higher than 59, the job can't be scheduled.
+         * @param minutes Between 0 and 59.
          * @return <code>true</code> if the job could be scheduled, <code>false</code>otherwise.
          */
-        boolean periodically(final int minutes);
+        boolean hourly(final int minutes);
 
         /**
          * Schedule the job daily, the time needs to be specified in addition.

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/ScheduledJobInfo.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/ScheduledJobInfo.java?rev=1529990&r1=1529989&r2=1529990&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/ScheduledJobInfo.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/jobs/ScheduledJobInfo.java Mon Oct  7 16:12:41 2013
@@ -32,7 +32,7 @@ public interface ScheduledJobInfo {
 
     enum ScheduleType {
         DATE,         // scheduled for a date
-        PERIODICALLY, // scheduled periodically (minutes)
+        HOURLY,       // scheduled hourly
         DAILY,        // scheduled once a day
         WEEKLY        // scheduled once a week
     }
@@ -67,18 +67,12 @@ public interface ScheduledJobInfo {
     int getHourOfDay();
 
     /**
-     * Return the minute of the hour for daily and weekly scheduled jobs.
+     * Return the minute of the hour for daily, weekly and hourly scheduled jobs.
      * @return The minute of the hour (from 0 to 59) or -1
      */
     int getMinuteOfHour();
 
     /**
-     * For periodically scheduled jobs, return the period in minutes.
-     * @return The period in minutes or -1
-     */
-    int getPeriod();
-
-    /**
      * Return the job topic.
      * @return The job topic
      */