Essential ATG Dynamo Training - Got atg Certified Relationship Management Developer?
This is not an official ATG site: ATG, Dynamo, Scenario Server and Personalization Server are trademarks or registered trademarks of Art Technology Group
Articles Exercises Resources Links Search

Scheduled Task Example

Overview

There are a few simple things to watch out for when writing a Scheduled Task in Dynamo. This example can be used as a boiler plate for your own tasks.

The code shown in gray is specific to this example, so copy the whole file and simply modify the bits you don't need.

Source Code and Configuration Files

Repeater.java - imagescript.atg.schedule.Repeater

package imagescript.atg.schedule;

import atg.nucleus.GenericService;
import atg.service.scheduler.*;
import atg.servlet.*;

public class Repeater 
               extends GenericService 
               implements Schedulable
{
  Schedule mSchedule;
  Scheduler mScheduler;
  int mJobId;
  String mMessage;

  public String getMessage(){ return mMessage; }
  public void setMessage(String s){ mMessage = s; }

  public void performScheduledTask(Scheduler sch, ScheduledJob job)
  {
    if(isLoggingDebug())
    {
      logDebug("Job Name = " + job.getJobName());
      logDebug("Job Desc = " + job.getJobDescription());
      logDebug("Job Id = " + job.getJobId());
      logDebug("Job Source = " + job.getSourceName());
    }

    if(isLoggingInfo())
    {
      logInfo(getMessage());
    }
  }

  
  //Demonstration of using the value parser to manipulate the
  // schedule programmatically
  public String getScheduleString()
  {
    String str;
    if(getSchedule() != null)
    {
      str = getSchedule().scheduleString();
    }
    else
    {
      str = "No Schedule Specified";
    }

    return str;
  }

  public void setScheduleString(String s)
  {
     SchedulePropertyValueParser parser = new SchedulePropertyValueParser();

     try
     {
       setSchedule((Schedule)parser.parsePropertyValue(s, Schedule.class));

     }
     catch(Exception e)
     {
       if(isLoggingError()){ logError(e); }
     }
  }

  public void setSchedule(Schedule s){ mSchedule = s; }
  public Schedule getSchedule(){ return mSchedule; }

  public void setScheduler(Scheduler s){ mScheduler = s; }
  public Scheduler getScheduler(){ return mScheduler; }

  public int getJobId(){ return mJobId; }


  public Repeater()
  {
    mJobId = 0;
    mMessage = "Default Message";
  }

  public void doStartService()
  {
    startJob();
  }

  public void doStopService()
  {
    stopJob();
  }

  void restartJob()
  {
    stopJob();
    startJob();
  }

  void startJob()
  {
    if(getScheduler() != null)
    {
      if(mJobId == 0)
      {
         ScheduledJob job = new ScheduledJob("repeater",
                                             "Demonstrates schedule",
                                             getAbsoluteName(),
                                             getSchedule(),
                                             (Schedulable)this,
                                             ScheduledJob.SCHEDULER_THREAD);
         mJobId = getScheduler().addScheduledJob(job);

      }
      else
      {
        if(isLoggingError())
        {
          logError("Attempted to start job without stopping it first");
        }
      }
    }
    else
    {
        if(isLoggingError())
        {
          logError("Scheduler not specified");
        }
    }
  }


  void stopJob()
  {
      if(getScheduler() != null)
      {
        if(mJobId != 0)
        {
           getScheduler().removeScheduledJob(mJobId);
           mJobId = 0;
        }
        else
        {
          if(isLoggingError())
          {
            logError("Attempted to stop job without starting it first");
          }
        }
      }
      else
      {
          if(isLoggingError())
          {
            logError("Scheduler not specified");
          }
      }
    }

  public boolean handleRestart(DynamoHttpServletRequest req,
                              DynamoHttpServletResponse res)
  {
    restartJob();
    return true;
  }
}

Repeater.properties

This is an example configuration file for the task

$class=imagescript.atg.schedule.Repeater
$scope=global
schedule=every\ 1\ minute
scheduler=/atg/dynamo/service/Scheduler

How to make sure the job starts automatically with Dynamo

Add your component to one of the inital arrays in an Initial component. Dynamo has an Initial component on the root /Initial. Usually we want to create our own Initial component for our application in a sub directory, /example/Initial and add that component to the /Initial initial list. Then add your component to your /example/Initial initial components list



Technical Training Advertise your Training Programs for Free! Los Angeles Web Design Shopping Cart Software  Form a Corporation