Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The Managed Jobs PHP web interface provides a text for this area, while in the Job Scheduler Object Editor (JOE), only one input field is available.
PHP converts the textarea hexadecimal because a newline can not be written in an XML attribute.
If you want to use the job with multiple statements without the MANAGED JOBS, then the statements must be changed hexadecimal.
The following is an example of a job chain in which the statements are converted before launching.

The job chain launchDB.job_chain.xml:

Code Block
 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job_chain.xml job_chain] orders_recoverable="yes" visible="yes">
     <job_chain_node state="prepare" job="prepareStatements" next_state="launch"  error_state="error"/>
     <job_chain_node state="launch"  job="launchDB"          next_state="success" error_state="error"/>
     <job_chain_node state="success"/>
     <job_chain_node state="error"/>
 </job_chain>

The order launchDB,updateMyTable.order.xml:
It contains an update statement and a commit. The value of the statement_newline parameter is used as separator.

Code Block

 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/order.xml order] title="update MY_TABLE">
     <params>
         <param name="statement_newline" value="__xA0__"/>
         <param name="statements"        value="update MY_TABLE set a='foo' where b='bar';__xA0__commit;"/>
     </params>
     <run_time/>
 </order>

The first job prepareStatements.job.xml:
It reads order parameter statements and statement_newline, replaces statement_newline to a real newline, converts statements hexadecimal and writes the result in the command parameter.

Code Block
 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job] order="yes" stop_on_error="no" title="set command param hexadecimal">
     <script language="javascript">
         <![CDATA[
 function spooler_process()\{
   spooler_log.info(spooler_job.name + " tries to set command parameter.")
   var orderParams = spooler_task.order.params;  
   var stmts = orderParams.value("statements");
   var sep = orderParams.value("statement_newline");
   spooler_log.info("param statements = " + stmts);
   spooler_log.info("param statement_newline = " + sep);
   stmts = stmts.split(sep).join("\n").bin2hex();
   orderParams.set_var("command", stmts);
   spooler_log.info("param command = " + orderParams.value("command"));  
   return true;
 \}
 
 String.prototype.bin2hex = function() \{
   var hex = "";
   var str = this;  
   var sLength = this.length;
   for( var i = 0; i < sLength; i++ ) \{ 
     hex += str.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
   \}
   return hex;
 \}
         ]]>
     </script>
     <run_time/>
 </job>

The second job launchDB.job.xml:
It executes the statements.

Code Block
 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job] title="Launch Database Statement" order="yes" stop_on_error="no">
     <description>
         <include file="jobs/JobSchedulerManagedDatabaseJob.xml"/>
     </description>
     <params>
         <param name="db_class"                value="SOSMySQLConnection"/>
         <param name="db_driver"               value="com.mysql.jdbc.Driver"/>
         <param name="db_url"                  value="jdbc:mysql://localhost:3306/scheduler"/>
         <param name="db_user"                 value="scheduler"/>
         <param name="db_password"             value="scheduler"/>
         <param name="command"                 value=""/>
     </params>
     <script language="java" java_class="sos.scheduler.managed.JobSchedulerManagedDatabaseJob"/>
     <run_time/>
 </job>

launchDB,updateMyTable.order.xmlIf you prefer a shell solution, then you need only one (standalone) job and a database client:

Code Block
 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/orderjob.xml orderjob] title="update MY_TABLE"Launch Database Statement" order="no" stop_on_error="yes">
     <params>
         <param name="statement_newline"       value="__xA0__"/>
         <param name="statements"              value="update MY_TABLE set a='foo' where b='bar';__xA0__commit;"/>
         <param name="db"                      value="scheduler"/>
         <param name="db_user"                 value="scheduler"/>
         <param name="db_password"             value="scheduler"/>
         <param name="command"                 value=""/>
     </params>
     <script language="shell">
         <![CDATA[
  echo $SCHEDULER_PARAM_STATEMENTS | sed -e 's/'$SCHEDULER_PARAM_STATEMENT_NEWLINE'/\n/g' > myupdate.sql
  mysql -u$SCHEDULER_PARAM_DB_USER -p$SCHEDULER_PARAM_DB_PASSWORD $SCHEDULER_PARAM_DB < myupdate.sql
  rm myupdate.sql
         ]]>
     </script>
     <run_time/>
 </order>job>