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

Compare with Current View Page History

« Previous Version 11 Next »

This job is used as a standalone solution or triggered by orders to execute statements in a database.
These can be database procedures or SQL statements.

The description JobSchedulerManagedDatabaseJob.xml is stored in the ./jobs directory of your Job Scheduler installation.

The SQL instructions are written in the command parameter.
It is possible to define more than one instruction in the command parameter.
Such instructions are then carried out in the order in which they are written and must be separated by a semicolon and a subsequent new line.

The Managed Jobs PHP web interface provides a textarea for this, while in the Job Scheduler Object Editor (JOE), only an 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:

 <[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.

 <[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.

 <[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.

 <[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>

If you prefer a shell solution, then you need only one (standalone) job and a database client:

 <[http://www.sos-berlin.com/doc/en/scheduler.doc/xml/job.xml job] title="Launch Database Statement">
     <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"/>
     </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
  mysqlErr=$?
  rm myupdate.sql
  exit $mysqlErr
         ]]>
     </script>
     <run_time/>
 </job>
  • No labels