You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 12 Next »


Introduction

JS7 offers a number of JS7 - Job Classes including JS7 - Shell JobsJS7 - JavaScript Jobs and Java Jobs.

  • Java Jobs are operated in the Java Virtual Machine of the JS7 Agent
  • Java Jobs are loaded on start-up of the JS7 Agent, this means there is zero latency when starting Java Jobs.

JS7 offers the JS7 - Job API to Java Jobs that serves the purpose of

  • accessing arguments available to the job from various sources such as JS7 - Order Variables, job and node arguments, JS7 - Job Resources,
  • allowing to specify the outcome of a job including return values that are passed to subsequent jobs from order variables.

Java jobs are available starting from the following releases:

FEATURE AVAILABILITY STARTING FROM RELEASE 2.5.4

FEATURE AVAILABILITY STARTING FROM RELEASE 2.6.1

Implementation

Implementing a basic Job

A Java Job extends the class com.sos.js7.job.Job like this:

Example for implementation of a HelloWorld job with Java
import com.sos.js7.job.Job;
import com.sos.js7.job.JobArguments;
import com.sos.js7.job.OrderProcessStep;

public class HelloWorld extends Job<JobArguments> {

	@Override
	public void processOrder(OrderProcessStep<JobArguments> step) throws Exception {
		
		step.getLogger().info("Hello World!");
		
	}

}


Explanation:

  • The extension of the class com.sos.js7.job.Job is required.
  • The processOrder() method is required to be implemented by the job.
    • The method is parameterized by the OrderProcessStep object provided by the Job API.
    • The OrderProcessStep object is used with its getLogger() method to write output to the job's log.

Accessing Arguments

A Java Job can access arguments from a number of sources, see JS7 - Job API

  • The straightforward way how to read arguments is explained from the next chapter.

Example: Reading specific Arguments

Example for implementation of a Job with Java
import java.util.List;

import com.sos.js7.job.Job;
import com.sos.js7.job.JobArgument;
import com.sos.js7.job.OrderProcessStep;
import com.sos.js7.job.OrderProcessStepOutcome;

public class JobWithParams extends Job<MyJobArguments> {

	@Override
	public void processOrder(OrderProcessStep<MyJobArguments> step) throws Exception {
		
		// reading all arguments with "getAllArgumentsAsNameValueMap"
		step.getAllArgumentsAsNameValueMap().forEach((name, value) -> {
			step.getLogger().info("argument: " + name + "=" + value.toString());
		});
		
		// reading all arguments with "getAllArguments"
		step.getAllArguments().forEach((name, jobArgument) -> {
			step.getLogger().info("argument: " + name + "=" + jobArgument.getValue().toString());
		});
        
        MyJobArguments myArgs = step.getDeclaredArguments();
		
		// reading job-specific argument: myString
		JobArgument<String> myString = myArgs.getMyString();
		step.getLogger().info(myString.getName() + "=" + myString.getValue());
		
		// reading job-specific argument: myBool
		JobArgument<Boolean> myBool = myArgs.getMyBool();
		step.getLogger().info(myBool.getName() + "=" + myBool.getValue());
		
		// reading job-specific argument: myList
		JobArgument<List<String>> myList = myArgs.getMyList();
		step.getLogger().info(myList.getName() + "=" + myList.getValue().toString());
		
		// return values
		OrderProcessStepOutcome outcome = step.getOutcome();
		outcome.putVariable(myString.getName(), "hello world");
		outcome.putVariable("myInteger", 42);
	}

}


Explanation:

  • The getAllArgumentsAsNameValueMap() method provides a map of all argument values.
  • The getAllArguments() method provides a map of argument objects.
  • The OrderProcessStep object is here typed by MyJobArguments that is a class with job-specific declared arguments.
    • A class with job specific declared arguments extends com.sos.js7.job.JobArguments

      Example of a class of the job-specific declared arguments
      import java.util.List;
      
      import com.sos.js7.job.JobArgument;
      import com.sos.js7.job.JobArguments;
      
      public class MyJobArguments extends JobArguments {
      	
      	private JobArgument<String> myString = new JobArgument<String>("myString", false);
          private JobArgument<List<String>> myList = new JobArgument<>("myList", false);
          private JobArgument<Boolean> myBool = new JobArgument<>("test", false, true);
      
          public JobArgument<String> getMyString() {
              return myString;
          }
      
          public JobArgument<List<String>> getMyList() {
              return myList;
          }
      
          public JobArgument<Boolean> getMyBool() {
              return myBool;
          }
      }
  • For further methods to access arguments see JS7 - Job API

Creating a Maven project in the development environment

The classes com.sos.js7.job.Job, com.sos.js7.job.JobArguments etc. are not available in a public Maven repository, so a local repository must be created in the Maven project.

  • The directory sos has to be created



  • The following .jar files have to be copied from a JS7 Agent installation ./lib/sos directory to the sos directory of the Maven project. The example makes use of release 2.6.1, users should check for a current release.
    • com.sos-berlin.js7.engine.js7-base-2.6.1.jar
    • com.sos-berlin.js7.engine.js7-data-for-java-2.6.1.jar
    • com.sos-berlin.js7.engine.js7-launcher-for-java-2.6.1.jar
    • sos-commons-exception-2.6.1.jar
    • sos-commons-util-2.6.1.jar
    • sos-js7-job-2.6.1.jar
  • The following pom.xml file can be used as a base in the Maven project.

    pom.xml
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<groupId>com.sos-berlin</groupId>
    	<artifactId>my-js7-jobs</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    
    	<properties>
    		<!-- release version of js7 jars -->
      		<sos.js7.version>2.6.1</sos.js7.version>
      		<!-- 3rd party versions -->
      		<scala.library.version>2.13.11</scala.library.version>
      		<slf4j.version>1.7.36</slf4j.version>
      		<io.vavr.version>0.10.4</io.vavr.version>
      		
      		<!-- groupId and artifactIds of js7 jars -->
      		<sos.js7.groupId>com.sos-berlin</sos.js7.groupId>
      		<sos.js7.job.artifactId>sos-js7-job</sos.js7.job.artifactId>
      		<sos.js7.commons.util.artifactId>sos-commons-util</sos.js7.commons.util.artifactId>
      		<sos.js7.commons.exception.artifactId>sos-commons-exception</sos.js7.commons.exception.artifactId>
      		
      		<sos.js7.engine.groupId>com.sos-berlin.js7.engine</sos.js7.engine.groupId>
      		<sos.js7.launcher.artifactId>js7-launcher-for-java</sos.js7.launcher.artifactId>
      		<sos.js7.data.artifactId>js7-data-for-java</sos.js7.data.artifactId>
      		<sos.js7.base.artifactId>js7-base</sos.js7.base.artifactId>
      		
      		<!-- directories with js7 jars to install the local project repository -->
      		<sos.js7.external.srcdir>${project.basedir}/sos</sos.js7.external.srcdir>
      		<!-- directory of local project repository  -->
    	</properties>
    	
    	<repositories>
    		<!-- public repository for 3rd party jars -->
    		<repository>
    			<id>central</id>
    			<name>Central Repository</name>
    			<url>https://repo1.maven.org/maven2</url>
    			<snapshots>
    				<enabled>false</enabled>
    				<updatePolicy>never</updatePolicy>
    			</snapshots>
    		</repository>
    	</repositories>
    	
    	<dependencies>
      		<dependency>
    			<groupId>${sos.js7.engine.groupId}</groupId>
    			<artifactId>${sos.js7.launcher.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>${sos.js7.engine.groupId}</groupId>
    			<artifactId>${sos.js7.data.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>${sos.js7.engine.groupId}</groupId>
    			<artifactId>${sos.js7.base.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		
    		<dependency>
    			<groupId>${sos.js7.groupId}</groupId>
    			<artifactId>${sos.js7.job.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>${sos.js7.groupId}</groupId>
    			<artifactId>${sos.js7.commons.util.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>${sos.js7.groupId}</groupId>
    			<artifactId>${sos.js7.commons.exception.artifactId}</artifactId>
    			<version>${sos.js7.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		
    		<!-- 3rd Party -->
    		<dependency>
    			<groupId>org.scala-lang</groupId>
    			<artifactId>scala-library</artifactId>
    			<version>${scala.library.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>io.vavr</groupId>
    			<artifactId>vavr</artifactId>
            	<version>${io.vavr.version}</version>
    			<scope>provided</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.slf4j</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>${slf4j.version}</version>
    			<scope>provided</scope>
    		</dependency>
    	</dependencies>
    	
    	<profiles>
    		<profile>
    			<id>create-local-repo</id>
    			<build>
    				<plugins>
    					<plugin>
    	                	<artifactId>maven-install-plugin</artifactId>
    	                	<version>2.5.2</version>
    	                	<executions>
    	                    	<execution>
    	                        	<id>install-${sos.js7.launcher.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.engine.groupId}.${sos.js7.launcher.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.engine.groupId}</groupId>
    									<artifactId>${sos.js7.launcher.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
    	                    	<execution>
    	                        	<id>install-${sos.js7.data.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.engine.groupId}.${sos.js7.data.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.engine.groupId}</groupId>
    									<artifactId>${sos.js7.data.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
    	                    	<execution>
    	                        	<id>install-${sos.js7.base.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.engine.groupId}.${sos.js7.base.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.engine.groupId}</groupId>
    									<artifactId>${sos.js7.base.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
    	                    	
    	                    	<execution>
    	                        	<id>install-${sos.js7.job.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.job.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.groupId}</groupId>
    									<artifactId>${sos.js7.job.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
    	                    	<execution>
    	                        	<id>install-${sos.js7.commons.util.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.commons.util.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.groupId}</groupId>
    									<artifactId>${sos.js7.commons.util.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
    	                    	<execution>
    	                        	<id>install-${sos.js7.commons.exception.artifactId}</id>
    	                        	<goals>
    	                            	<goal>install-file</goal>
    	                        	</goals>
    	                        	<phase>initialize</phase>
    	                        	<configuration>
    	                            	<file>${sos.js7.external.srcdir}/${sos.js7.commons.exception.artifactId}-${sos.js7.version}.jar</file>
    	                            	<groupId>${sos.js7.groupId}</groupId>
    									<artifactId>${sos.js7.commons.exception.artifactId}</artifactId>
    	                            	<version>${sos.js7.version}</version>
    	                            	<packaging>jar</packaging>
    	                            	<createChecksum>true</createChecksum>
    	                        	</configuration>
    	                    	</execution>
                    		</executions>
                		</plugin>
    				</plugins>
    			</build>
    		</profile>
    	</profiles>
    	
    	<build>
    		<pluginManagement>
    			<plugins>
    				<plugin>
    					<artifactId>maven-compiler-plugin</artifactId>
    					<version>3.10.1</version>
    					<configuration>
    						<source>1.8</source>
    						<target>1.8</target>
    						<optimize>true</optimize>
    						<showDeprecation>true</showDeprecation>
    						<showWarnings>true</showWarnings>
    					</configuration>
    				</plugin>
    			</plugins>
    		</pluginManagement>
    	</build>
    </project>
  • groupId, artifactId and version should be adjusted.
  • The pom.xml file contains a profile create-local-repo that must be executed once after copying the jar files. It updates the users local .m2 repository with the jars from the sos folder.

    > mvn initialize -Pcreate-local-repo -U

Further Resources

Features

Articles

Pages


 
 

Navigation



  • No labels