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
*/