Kilro
Kilro

Reputation: 39

Hybris -> how to create cronjob with execute beanshell script?

I have a beanshell script and I would like it to automate. I need to create cronjob and add my beanshell code to it. Maybe someone do that think? Is anyone know how to do this? or how to match my script with cronjob?

Upvotes: 3

Views: 7337

Answers (4)

HybrisHelp
HybrisHelp

Reputation: 5810

I have tried below steps for the groovy script. You can try the same for the beanshell.


You have to create an instance of

Script - the item type where the script content is going to store.

ScriptingJob - a new ServicelayerJob item, which contains additionally the scriptURI

CronJob - This is where the "scripted" cronjob logic is executed


1. Create a Script

Script code: HelloScript
Script engine type: beanshell
Content: log.info("Hello");

2. Create the Scripting Job

Again from HMC/Backoffice, find ScriptinJobs and create the new instance of it. Here you have to define Code and ScriptURI like

Code: HelloScriptJob
ScriptURI: model://HelloScript

You can access this job in the next step to create the CronJob

3. Create a CronJob

From HMC/BackOffice, create an instance of cronJob. Select above-created job(HelloScriptJob) in
Job definition drops down and save the changes. Now you good to schedule/run this cronJob.


Refer detailed post cronjob-using-groovy-script-hybris

Upvotes: 0

alain.janinm
alain.janinm

Reputation: 20065

The answer is actually given in Cronjob scripting documentation.

In a nutshell, you will use dynamic scripting to create the cronjob instead of using the slow old-fashioned way.


Concept

There are three new objects used (quoted from doc):

  • Script - the item type where the script content is stored (a separate deployment table)
  • ScriptingJob - a new ServicelayerJob item, which contains additionally the scriptURI (consequently, the stored script can be found at runtime from different locations (classpath, db, etc..)
  • ScriptingJobPerformable - the spring bean assigned to every ScriptingJob instance; it implements the usual perform() method (like for any other cronjob). This is where the "scripted" cronjob logic is executed

How to use Cronjob scripting

First step - save your Script instance in the database. For this example I've used a code from http://www.beanshell.org/manual/quickstart.html

Note: you can create script with Groovy, BeanShell ad JavaScript

INSERT_UPDATE Script; code[unique=true];content;scriptType(code)
;myBshScript;"foo = ""Foo"";    
four = (2 + 2)*2/2;
print( foo + "" = "" + four );  // print() is a BeanShell command

// Do a loop
for (i=0; i<5; i++)
    print(i);   

// Pop up a frame with a button in it
button = new JButton( ""My Button"" );
frame = new JFrame( ""My Frame"" );
frame.getContentPane().add( button, ""Center"" );
frame.pack();
frame.setVisible(true);";BEANSHELL

Don't forget to escape " in the script with an other " (Impex restriction).

Second step - create a ScriptingJob that use the previously created Script

INSERT_UPDATE ScriptingJob; code[unique=true];scriptURI
;myBshDynamicJob;model://myBshScript

model://myBshScript is used to retrieve a Script stored in the DB

Third step - create the CronJob

INSERT_UPDATE CronJob; code[unique=true];job(code);singleExecutable;sessionLanguage(isocode)
;myBshDynamicCronJob;myBshDynamicJob;true;en

Optional step - create a trigger for the CronJob

INSERT_UPDATE Trigger;cronjob(code)[unique=true];cronExpression
;myBshDynamicCronJob;0 0 0/1 1/1 * ? *

This executes the cronjob every hour.

Execute the CronJob by script

In the hac scripting tab, choose Groovy and run this in commit mode.

def dynamicCJ = cronJobService.getCronJob("myBshDynamicCronJob")
cronJobService.performCronJob(dynamicCJ,true)

After running the Script you should have this displayed

enter image description here

And in the console

INFO  [hybrisHTTP27] (myBshDynamicCronJob) [ScriptingJobPerformable] Foo = 4
0
1
2
3
4

Upvotes: 2

user6904265
user6904265

Reputation: 1938

If you have access to hybris wiki, here you can find how to create and execute a cronjob.

In order to execute bean shell, in the cronjob "perform" method you should do this:

SimpleScriptContent content = new SimpleScriptContent("beanshell", "here your beanshell script code as string");
ScriptExecutable script = scriptingLanguagesService.getExecutableByContent(content);
ScriptExecutionResult result = script.execute();
...

Here the import section:

import de.hybris.platform.scripting.engine.content.impl.SimpleScriptContent;
import de.hybris.platform.scripting.engine.ScriptExecutionResult;
import de.hybris.platform.scripting.engine.ScriptExecutable;

You should access to scriptingLanguagesService with annotation:

@Autowired
ScriptingLanguagesService scriptingLanguagesService;

Upvotes: 0

Sanchit Khera
Sanchit Khera

Reputation: 1005

In Hybris, go to HMC> System> CronJobs> Search your created cronjob or create a new cronjob> Time Schedule tab> Trigger> Create Trigger.

From this Trigger tab window, you can schedule the interval eg. daily, weekly, etc. Also you can set the start time and frequency.

You can also do this trigger setting via impex as below:

INSERT_UPDATE Trigger;cronJob(code)[unique=true];second;minute;hour;day;month;year;relative;active;maxAcceptableDelay
;CartRemovalJob;0;5;4;-1;-1;-1;false;true;-1

For more detailed information, have a look at this, in case you have access to Hybris Wiki.

Upvotes: 0

Related Questions