The JobScheduler can be controlled by commands (e.g. starting a jobs) from external applications (or scripts).
More information of all available commands can be found here: Jetty/xml_commands.xml Command List].
The syntax of the command is similar to the xml syntax which is used to implement JobScheduler objects. The external API contains commands, like "start_job, add_order, show_state, ...". Everytime when a command is sent to the JobScheduler engine, the engine will reply an answer. This answer is pure XML as well. JOC, for Example, is using this external API very intensive.
An external application, which is able and has the authorisation to send such commands to the JSEngine can use http(s) or tcp/ip to establish the communication. That means, that even a script language like javascript can be used to communicate. For Java users we have a wrapper class paket which was created using JAXB and the xsd schema for the commands and answers.
protocols
The commands can be transferred to the JobScheduler via the following protocols:
- http
- https
- tcp
- udp
and telnet.
In addition a cli is available via the "jobscheduler.sh" script.
Example using JOC
You can use JOC to send a command using the URL
http://[scheduler_host]:[scheduler_port]/<span style="color:red;"><show_state/></span>
or if you open JOC with [How_to_run_JobScheduler_with_Jetty then type
http://[scheduler_host]:[jetty_port]/jobscheduler/engine-cpp/<span style="color:red;"><show_state/></span>
where <span style="color:red;"><show_state/></span> is an example for a command of the JobScheduler external API.
Example using the JobScheduler script
You can use the startscript found in "./bin" to send a command too.
An example for using the command line option
jobscheduler.sh command "<span style="color:red;"><show_state/></span>"
The answer of jobscheduler.sh command ... is without indent and newlines.
If you want a more readable answer then type
jobscheduler.sh command "<span style="color:red;"><show_state/></span>" | sed -e 's;[^>]*$;;' | xmllint --format -
Object Model: start an order
package com.sos.scheduler.model.commands; import org.apache.log4j.Logger; import org.junit.BeforeClass; import org.junit.Test; import com.sos.JSHelper.Exceptions.JobSchedulerException; import com.sos.scheduler.model.SchedulerObjectFactory; import com.sos.scheduler.model.answers.Answer; import com.sos.scheduler.model.answers.ERROR; import com.sos.scheduler.model.objects.Param; import com.sos.scheduler.model.objects.Params; import com.sos.scheduler.model.objects.Spooler; public class JSCmdAddOrderTest \{ private final static Logger logger = Logger.getLogger(JSCmdAddOrderTest.class); private static SchedulerObjectFactory factory = null; @BeforeClass public static void setUpBeforeClass() throws Exception \{ factory = new SchedulerObjectFactory("localhost",4112); factory.initMarshaller(Spooler.class); \} @Test public final void testSetValidXmlContent() \{ JSCmdAddOrder cmdOrder = factory.createAddOrder(); cmdOrder.setJobChain("/job_chain_multiple_inheritance_sample/job_chain_multiple_inheritance_sample"); cmdOrder.setReplace("yes"); cmdOrder.setId("A"); cmdOrder.setTitle("JobNet: null"); Param p1 = factory.createParam("uuid_jobnet_identifier","989ac2ce-2538-4276-8003-3350a6224c97"); Param p2 = factory.createParam("jobnet","/job_chain_multiple_inheritance_sample/job_chain_multiple_inheritance_sample"); Param p3 = factory.createParam("successor","B,C,D,"); Param p4 = factory.createParam("predecessor",""); Param p5 = factory.createParam("script_to_execute","echo Here is the bootstrap order"); cmdOrder.setParams( new Params() ); cmdOrder.getParams().getParamOrCopyParamsOrInclude().add(p3); cmdOrder.getParams().getParamOrCopyParamsOrInclude().add(p4); cmdOrder.getParams().getParamOrCopyParamsOrInclude().add(p5); cmdOrder.getParams().getParamOrCopyParamsOrInclude().add(p1); cmdOrder.getParams().getParamOrCopyParamsOrInclude().add(p2); cmdOrder.setAt("2012-04-17 22:00"); cmdOrder.run(); Answer answer = cmdOrder.getAnswer(); ERROR jsError = answer.getERROR(); if (jsError != null) \{ String xml = cmdOrder.toXMLString(); logger.debug(xml); throw new JobSchedulerException("Command not executed due to an error"); \} \} \}
see also
- [Technical description of JobScheduler/scheduler.pdf], Chapter 5.2 ff
- [The xml for the external API/xml.xml]
- [SOSJobSchedulerModel/SOSJobSchedulerModel/html/index.html]
- [SOSJobSchedulerModel, junit testsSOSJobSchedulerModel.junit/html/index.html]