Java API:Schedule a Job

From AgileApps Support Wiki

The platform's scheduling APIs let you specify jobs to be carried out at regular intervals.

Schedule a Job

To schedule a job using the Java APIs:

1. Create an instance of a class that implements com.platform.api.Schedulable
Schedulable job = new DailyTask();
The execute() method specified by that interface is invoked when the job runs.
2. Create a string with a Cron Expression that specifies the repetition interval.
// "Secs Mins Hrs DayOfMon Mon DayOfWk Yr" 
// ?: don't care  a,b: list  a/b:interval  a-b: range
String cronExp = "0 0 3 ? ? * ?"; // Run every day at 3 am
3. Schedule it:
String jobId = Functions.schedule( "My Job", job, cronExp [ , (String) userId ] );
  • The method returns a jobId that can be used to monitor the job or delete it.
  • The optional userId specifies the user who is nominally carrying out the job's tasks when it runs.

Delete a Job

To delete a job:

Result result = Functions.deleteJob(String jobId);

Sample Code

The CronJobDemo sample class schedules a job that runs every day at 3 am.

How it Works

The run method does the scheduling:

public String run(Map params) 
{
    Logger.info("Scheduling...", "CronJob");
    String msg = "";
    try {
      // Format: "Secs  Mins  Hrs  DayOfMon  Mon  DayOfWk  Yr" 
      // Values: ?="don't care"  a,b=list  a/b=interval  a-b=range
      String cronExp = "0 0 3 ? * * *";   // Run every day at 3 am

      Schedulable task = new DailyTask();
      String jobId = Functions.schedule("Daily Task", task, cronExp);
      msg = "Job scheduled";
    }
    catch (Exception e) {
      msg = "Failed: " + e.getMessage();
    }
    Logger.info(msg, "CronJob");
    return msg;
}

While the inner class (DailyTask) does the required tasks when the job runs:

public class DailyTask implements Schedulable
{
    @Override
    public void execute() {
       // Do important stuff here      
    }   
}

Notes:

  • The run method's params argument is required to make the method callable using the REST API. Otherwise, it isn't used.
  • A cron expression can use a "?" for DayOfMon or for DayOfWk, but not both.
  • Similarly, it can use "*" for DayOfMon or for DayOfWk, but not both.

How to Run It

1. Put the CronJobDemo class on the platform, using either the GUI or the REST class Resource.
2. Schedule the job by using the REST class/operation/exec resource to invoke the run method:
<platform>
  <execClass>
    <clazz>com.platform.demo.cron.CronJobDemo</clazz>
    <method>run</method>
  </execClass>
</platform>
3. See the job's status either by using the REST scheduledJob Resource or by using the GUI:
GearIcon.png > Administration > Monitoring > Scheduled Job Log