Solr

If you need basic idea of Cron job, Please go through below link
Cron job overview

We all know that creating cron job is time consuming as it involves multiple steps

Example : We need to create java class, define spring bean,build and restart server etc.

But through dynamic scripting, Cron jobs can be created with very minimal steps and more importantly we don’t need to build and restart server.

Yes It allows the creation of cronjobs dynamically at run time.

Before jumping on how it can be achieved, lets understand below jargons

Script : It is an item type(corresponding table) called Script created by Hybris to store the script content
Script content can be written in any of the supported dynamic languages like “Groovy”

Scripting Job : It is also an item type called ScriptingJob created by Hybris to store new Service layer Job item,
This contains the reference to defined Script using ScriptURI

ScriptingJobPerformable : This is the actual Java class created by Hybris which contains the Perform method
This java class is responsible for executing scripted cronjob logic

Whenever the cronjob is triggered,The execution will be delegated to the ScriptingJobPerfomable class.

Lets see how we define Dynamic Scripting Jobs

Step 1

Define the Script as below

  1. INSERT_UPDATE Script; code[unique=true];content
  2. ;myFirstDynamicScript;println 'Welcome to Dynamic Scripting Job! '+ new Date()
INSERT_UPDATE Script; code[unique=true];content 
;myFirstDynamicScript;println 'Welcome to Dynamic Scripting Job! '+ new Date()

code: Represents the unique code within that type

Content : Content above is a groovy script to just print Welcome message with Today’s date
This can be a complex logic based on the requirement
Example : Deletion of few rows in some table.
Run the above impex in HAC, this will store the script in DB

Step 2

Define the Scripting Job as below

  1. INSERT_UPDATE ScriptingJob; code[unique=true];scriptURI
  2. ;myFirstDynamicScriptJob;model://myFirstDynamicScript
INSERT_UPDATE ScriptingJob; code[unique=true];scriptURI
;myFirstDynamicScriptJob;model://myFirstDynamicScript

code : Represents the unique code within that type
scriptURI : This will point to the location of Script
In our case, we stored Script in DB, we refer it using model://referenceToScript

Run the above impex in HAC, this will store the Scripting Job along with reference to Script in DB

Step 3

Define the Cronjob
This step is similar to traditional way of defining cron job

  1. INSERT_UPDATE CronJob; code[unique=true];job(code);singleExecutable;sessionLanguage(isocode)
  2. ;myFirstDynamicScriptCronJob;myFirstDynamicScriptJob;true;en
INSERT_UPDATE CronJob; code[unique=true];job(code);singleExecutable;sessionLanguage(isocode)
;myFirstDynamicScriptCronJob;myFirstDynamicScriptJob;true;en

code: Represents the unique code within that type
job(code) : Holds the reference to the above defined job(in Step 2)

Step 4

Executing the CronJob

We will define Groovy script to execute the cron job as below

  1. def dynamicCJ = cronJobService.getCronJob("myFirstDynamicScriptCronJob")
  2. cronJobService.performCronJob(dynamicCJ,true)
def dynamicCJ = cronJobService.getCronJob("myFirstDynamicScriptCronJob")
cronJobService.performCronJob(dynamicCJ,true)

Go to the scripting languages console in HAC,select Groovy as scripting language, Run the above script in Commit mode

Step 5

If you want to schedule the cron job instead of running it at directly,then we can avoid Step 4 and can be scheduled using Trigger as below

  1. INSERT_UPDATE Trigger;cronjob(code)[unique=true];cronExpression
  2. ;myFirstDynamicScriptCronJob; 0 0 * ? * * *
INSERT_UPDATE Trigger;cronjob(code)[unique=true];cronExpression
;myFirstDynamicScriptCronJob; 0 0 * ? * * *

Now above trigger defines the schedule to run the cron job for every one hour

Output of the defined scron job is very simple, it just prints Welcome message with Current date

Note : It is possible to define much complex logic instead of just Welcome message in the real time requirements.

Limitation:

One of the main limitations of this approach is that, since script content is stored as column value in DB,we can not store large chunk of content due to column length limit in DB

Share this article on

Comment (9)

    1. Karibasappa G C (KB)
      Karibasappa G C (KB)

      First thing, static variables will never be a part of method, it will be a part of class always.

      So only we cant declare any static variables inside a method but we can access them inside a method.

      All static variables will be stored in separate segment inside Heap area only.

      1. The blog is very helpful. Thanks a lot for sharing! Also the “Inheritance in interface” page is not opening. Can you please fix that?

Leave a Comment

  • You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code lang=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" extra="">

    • Please answer this simple challenge to post your valuable comment *