h1. Example: File transfer using JadeJob
The following scenario is given:
Job Scheduler Reads a status from an Oracle Database table where we store triggers (every 5 minutes) (for demo treat oracle table as though there is only one row of data)
If the Oracle Table.Statush1. “GO” then
- Read Additional FTP Job Attributes from an Oracle Table (i.e. $SourceFilePath, %SourceFileName, $TargetFilePath, $TargetFileName, $EncryptedYN)
- Store FTP Attributes as Memory Variables for later use
- Call JADE to SFTP files using Memory Variables
- If $SourceFile does not exist send email indicating the error with the file properties (source file name, source file size, source file date/time created, date/time of failure, target file name, target directory, failure detail)
- If $SourceFile does exist
- If $EncryptedYN Y
- run through Encryption Routine
- Perform SFTP to target
- Confirm that File has been successfully received at destination
- If File has not been successfully received at destination
- Send email indicating the error that occurred with file properties (source file name, source file size, source file date/time created, date/time of failure, target file name, target directory, failure detail)
- If File has been successfully received
- send a confirmation email with file properties (source file name, source file size, source file date/time created, date/time of failure, target file name, target director)
- If $EncryptedYN Y
- Log All transport activities
- Produce PDF report of all transport activities between two dates/times
Graphical Representation of the Solution
Components of the Solution
checkDB: Access to Oracle™ RDBMS DB using pl/sql
For the connection to the Oracle™ RDBMSDB we use the pl/sql script plsql_script.txt which is executed by the JAVA-AdapterClass
{*}sos.scheduler.db.JobSchedulerPLSQLJobJSAdapterClass{*}.
The pl/sql script is defined as
declare status varchar2(64); sourcefilepath varchar2(2048); sourcefilename varchar2(2048); targetfilepath varchar2(2048); targetfilename varchar2(2048); encryptedyn varchar2(16); begin select STATUS, SOURCEFILEPATH, SOURCEFILENAME, TARGETFILEPATH, TARGETFILENAME, ENCRYPTEDYN into status, sourcefilepath, sourcefilename, targetfilepath, targetfilename, encryptedyn from scenario1; dbms_output.put_line('status=' || status); dbms_output.put_line('sourcefilepath=' || sourcefilepath); dbms_output.put_line('sourcefilename=' || sourcefilename); dbms_output.put_line('targetfilepath=' || targetfilepath); dbms_output.put_line('targetfilename=' || targetfilename); dbms_output.put_line('encryptedyn=' || encryptedyn); end;
The parameters used by the adapter class are
- name of the pl/sql script and where it is found
- name of the DB and access parameters
For the interpretation of the table status "GO" a postprocessing routine is used (here programmed in javax.script:rhino)
function spooler_process_after(spooler_process_result) \{ var params = spooler_task.order().params(); var status = params.value("status"); if ( status == "GO" ) \{ spooler_log.info("Table status is \"GO\", continue!"); \} else \{ spooler_log.info("Waiting until table status is \"GO\" ..."); spooler_task.order().set_state("WAITING"); \} return spooler_process_result; \}
CheckFileExists: check File exist
The file defined by the parameters sourcefilepath and sourcefilename is checked with the JITL job
sos.scheduler.file.JobSchedulerExistsFile.
checkEncrypted: Interpretation of Parameter encryptedyn
The value of the parameter encryptedyn decides wether the file is to be encrypted or not. The encryption is done in a local copy of the file, therefore different steps of the jobchain are used. The functions are part of the job checkEncrypted programmed in javax.script:rhino.
function spooler_process()\{ spooler_log.info("------- " + spooler_job.name() + " -------"); var encryptedyn = spooler_task.order().params().value("encryptedyn"); if ( "Y" == encryptedyn ) \{ spooler_log.info("Encryption required"); spooler_task.order().set_state("transportSourceToLocal"); \} else if ( "N" == encryptedyn ) \{ spooler_log.info("No encryption required"); spooler_task.order().set_state("transportSourceToTarget"); \} else \{ spooler_log.error("encryptedyn = \"" + encryptedyn + "\" (must be Y or N)"); return false; \} return true; \}
In case of encrypting we have the steps
- transportSourceToLocal: copy file from source to local
- encrypt: encrypting file
- transportLocalToTarget: copy file from local to target
Without encrypting only one transfer is used to copy the file from source to target in step
- transportSourceToTarget
Transport-Steps
The transport steps are using the JITL job sos.scheduler.jade.JadeJob.
These parameters are needed:
encrypt: encryption of the local file
In our example the encryption is only simulated. An own routine may be used here.
Report: Mailing a report
A mail is generated to send the JADE history file as an example for a report. External report features may be used here. The JITL job sos.scheduler.managed.JobSchedulerManagedMailJob is used here to manage the mail.
JobChain in JOE