...
Scope
This document explains
- how to download the JobScheduler engine binaries from Maven Central,
- the structure of the binaries
...
- ,
- how to setup a minimal JobScheduler with
...
- the binaries.
Prerequisites
In order to be able to download the binaries and to integrate them in your application, you need to have Maven installed.
Maven
- You can find Check the Maven documentation hereDocumentation.
- SOS uses Maven 3.2.1. You can download Download the latest Release from here.Maven release
- Maven's
/bin
folder has to be added to the global variable "PATH
" in order to take effect. - No further configuration is required for Maven in order to compile. If further configuration is wanted, for example to receive certain 3rd Party libraries from an official Maven2 repository, e.g. http://repo1.maven.org/maven2, then you have to configure the settings.xml file.
...
jobscheduler.engine-1.9.6.jar
jobscheduler.engine-1.9.6.pom
The version number 1.9.6
from this sample is based on the semantic versioning scheme. This sample version number is used for the examples in this article.
The structure of the Binaries
The jobscheduler.engine-1.9.6.jar
file is a bundle jar with all binaries as well as the JobScheduler engine java Java library included.
To integrate it in the library into your own maven project or to download it via maven, add the following configuration to the pom.xml
file of your project.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<dependency> <groupId>com.sos-berlin</groupId> <artifactId>jobscheduler.engine</artifactId> <version>1.9.6</version> </dependency> |
The structure of the jobscheduler.engine-1.9.6.jar
file looks like this:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
|-linux-x64 | |-bin | | |---.version-engine | | |---scheduler | |-lib | | |---libjobscheduler-engine.so |-linux-x86 | |-bin | | |---.version-engine | | |---scheduler | |-lib | | |---libjobscheduler-engine.so |-windows-x64 | |-bin | | |---.version-engine | | |---jobscheduler-engine.dll | | |---scheduler.exe |-windows-x86 | |-bin | | |---.version-engine | | |---scheduler.exe |---com.sos-berlin.jobscheduler.engine-1.9.6.jar |
Setting up a JobScheduler with the
...
Binaries
Required configuration files
sos.ini
factory.ini
scheduler.xml
Configuration
Step 1
To get a minimal JobScheduler up and running, create a folder, e.g. "myJobScheduler
" , and copy the binaries according to your operating system as well as the java Java library to this folder.
Step 2
Add the 3rd Party libraries which are configured in the jobscheduler.engine-1.9.6.pom
file to a folder as well as the JDBC database driver you use. You can If you copy the 3rd party libraries to a different folder as well, as long as you make sure then you have to configure the path in the factory.ini
file.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>18.0</version> </dependency> <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> <version>1</version> </dependency> <dependency> <groupId>com.google.inject</groupId> <artifactId>guice</artifactId> <version>3.0</version> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.186</version> </dependency> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>javax.persistence</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.scalactic</groupId> <artifactId>scalactic_2.11</artifactId> <version>2.2.4</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-library</artifactId> <version>2.11.6</version> </dependency> <dependency> <groupId>org.scala-lang</groupId> <artifactId>scala-reflect</artifactId> <version>2.11.6</version> </dependency> <dependency> <groupId>org.scala-lang.modules</groupId> <artifactId>scala-xml_2.11</artifactId> <version>1.0.3</version> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.11.0</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.4.01</version> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.joda</groupId> <artifactId>joda-convert</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlets</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-xml</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-client</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-websocket</artifactId> <version>8.1.16.v20140903</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.19</version> </dependency> <dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-guice</artifactId> <version>1.19</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.19</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jul-to-slf4j</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>com.google.code.findbugs</groupId> <artifactId>jsr305</artifactId> <version>3.0.0</version> </dependency> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-guava</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-scala_2.11</artifactId> <version>2.4.3</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.9.2</version> </dependency> <dependency> <groupId>io.spray</groupId> <artifactId>spray-json_2.11</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>io.spray</groupId> <artifactId>spray-http_2.11</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>io.spray</groupId> <artifactId>spray-client_2.11</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.typesafe</groupId> <artifactId>config</artifactId> <version>1.2.1</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-actor_2.11</artifactId> <version>2.3.9</version> </dependency> <dependency> <groupId>com.typesafe.akka</groupId> <artifactId>akka-slf4j_2.11</artifactId> <version>2.3.9</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.jvnet.mimepull</groupId> <artifactId>mimepull</artifactId> <version>1.9.4</version> </dependency> </dependencies> |
Step 3
Create a sos.ini
file and copy your licence license key to the file. This is a technical license key that ships with the Open Source License and with the Commercial License of the software. The file should look like this:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
[licence]
key1 = PUT_YOUR_KEY_HERE
|
Create a factory.ini
file with e.g. the following configuration:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
[spooler] ; enable job history, if set to True the scheduler keeps a job history in database tables history = yes ; store job protocol for task history (yes|no|gzip, default: no) history_with_log = gzip ; store job protocol for order history (yes|no|gzip, default: no) order_history_with_log = gzip ; store protocol for scheduler history (yes|no|gzip, default: no) history_archive = gzip ; database configuration examples for job history ; active configuration db = jdbc -class=org.mariadb.jdbc.Driver jdbc:mysql://localhost:3306/scheduler -user=DB_USER -password=DB_USER_PASSWD db_class = SOSMySQLConnection ; sample configuration for MySQL ;db = jdbc -class=com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSMySQLConnection ; sample configuration for MySQL via mariaDB ;db = jdbc -class=org.mariadb.jdbc.Driver jdbc:mysql://localhost:3306/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSMySQLConnection ; sample configuration for Oracle ;db = jdbc -class=oracle.jdbc.driver.OracleDriver jdbc:oracle:thin:@//localhost:1521/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSOracleConnection ; sample configuration for Microsoft SQL Server ;db = jdbc -class=com.microsoft.sqlserver.jdbc.SQLServerDriver jdbc:sqlserver://localhost:1433;sendStringParametersAsUnicode=false;selectMethod=cursor;databaseName=scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSMSSQLConnection ; sample configuration for Microsoft SQL Server via jTDS ;db = jdbc -class=net.sourceforge.jtds.jdbc.Driver jdbc:jtds:sqlserver://localhost:1433;sendStringParametersAsUnicode=false;selectMethod=cursor;databaseName=scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSMSSQLConnection ; sample configuration for Postgres SQL ;db = jdbc -class=org.postgresql.Driver jdbc:postgresql://localhost:5432/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSPgSQLConnection ; sample configuration for Firebird ;db = jdbc -class=org.firebirdsql.jdbc.FBDriver jdbc:firebirdsql://localhost:3050/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSFbSQLConnection ; sample configuration for DB2 ;db = jdbc -class=com.ibm.db2.jcc.DB2Driver jdbc:db2://localhost:50000/scheduler:driverType=2;retrieveMessagesFromServerOnGetMessage=true; -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSDB2Connection ; sample configuration for Sybase ;db = jdbc -class=com.sybase.jdbc3.jdbc.SybDriver jdbc:sybase:Tds:localhost:5000/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSSybaseConnection ; sample configuration for Sybase via jTDS ;db = jdbc -class=net.sourceforge.jtds.jdbc.Driver jdbc:jtds:sybase://localhost:5000/scheduler -user=DB_USER -password=DB_USER_PASSWD ;db_class = SOSSybaseConnection ; log level (info|debug1|...|debug9, default: info) log_level = info ; log directory log_dir = logs ; log filename and log categories (see http://www.sos-berlin.com/doc/en/scheduler.doc/factory_ini_spooler.xml#entry_log) log = PATH/TO/YOUR/logs/scheduler.log [java] class_path = PATH/TO/YOUR/3rdPartyLibraries/*.jar; ; put your Java VM parameters here options = -Dlog4j.configuration="file:///PATH/TO/YOUR/log4j.properties" ; enable detailed Java debug messages debug = no |
Create a file scheduler.xml
and configure the port your scheduler JobScheduler should run withlisten to:
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<spooler>
<config port="4444">
<params>
<param name="scheduler.order.keep_order_content_on_reschedule" value="false"/>
</params>
<security ignore_unknown_hosts="yes">
<allowed_host host="localhost" level="all"/>
</security>
<plugins>
<plugin java_class="com.sos.scheduler.engine.plugins.webservice.WebServicePlugin"/>
<plugin java_class="com.sos.scheduler.engine.plugins.nodeorder.NodeOrderPlugin"/>
</plugins>
</config>
</spooler>
|
At last, Finally create a start script like this:
...
Now your folder should contain at least these files (windows-x64 - example, other platforms differ):
factory.ini
jobscheduler-engine.dll
log4j.properties(optional)
scheduler.exe
scheduler.xml
sos.ini
start.cmd
Testing the
...
JobScheduler
Create a folder named "with the name
live
" in your working directory (your folder). Create a simple hello-world- job in thelive
- folder.Code Block language xml title hello world job example collapse true <?xml version="1.0" encoding="ISO-8859-1"?> <job > <script language="shell"> <![CDATA[echo Hello World!]]> </script> <run_time once="yes"/> </job>
Open a console in your working directory and start the scheduler JobScheduler with the
start.cmd
start script.
If you have configured logging (log4j.properties and path to the properties file infactory.ini
) then you should see a task log and job and a task log for the hello-world-job, which should look sample job like this:Code Block language text title task log collapse true 2015-10-07 14:58:45.515+0200 [info] SCHEDULER-918 state=starting (at=never) 2015-10-07 14:58:45.516+0200 [info] SCHEDULER-987 Starting process: "C:\Users\YOUR_USERNAME\AppData\Local\Temp\\sos5051B.cmd" 2015-10-07 14:58:45.526+0200 [info] 2015-10-07 14:58:45.526+0200 [info] PATH_TO_YOUR_FOLDER>echo Hello World! 2015-10-07 14:58:45.526+0200 [info] Hello World! 2015-10-07 14:58:45.527+0200 [info] SCHEDULER-915 Process event 2015-10-07 14:58:45.556+0200 [info] SCHEDULER-918 state=closed 2015-10-07 14:58:45.556+0200 [info] SCHEDULER-962 Protocol ends in logs/task.HalloWorldExample.log
Code Block language text title job log collapse true 2015-10-07 14:58:45.507+0200 [info] SCHEDULER-893 Job is 'active' now 2015-10-07 14:58:45.512+0200 [info] SCHEDULER-930 Task 6114864 started - cause: period_once 2015-10-07 14:59:45.716+0200 [info] SCHEDULER-931 state=stopped 2015-10-07 14:59:45.717+0200 [info] SCHEDULER-962 Protocol ends in logs/job.HalloWorldExample.log
...