Example: Using ProgramCall

Note: Read the Code example disclaimer for important legal information.
/////////////////////////////////////////////////////////////////////////
//
// Program call example.  This program calls the QWCRSSTS server program
// to retrieve the status of the system.
//
// Command syntax:
//    PCSystemStatusExample system
//
// This source is an example of IBM Toolbox for Java "ProgramCall".
//
/////////////////////////////////////////////////////////////////////////




import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.Thread.*;
import com.ibm.as400.access.*;

public class PCSystemStatusExample extends Object
{
   public static void main(String[] parameters)
   {
      System.out.println( " " );



      // if a system was not specified, display help text and exit.

      if (parameters.length >= 1)
      {

         try
         {
            // Create an AS400 object for the server that contains the
            // program.  Assume the first parameter is the system name.

            AS400 as400 = new AS400(parameters[0]);



            // Create the path to the program.

            QSYSObjectPathName programName = new QSYSObjectPathName("QSYS", "QWCRSSTS", "PGM");



            // Create the program call object.  Assocate the object with the
            // AS400 object that represents the server we get status from.

            ProgramCall getSystemStatus = new ProgramCall(as400);



            // Create the program parameter list.  This program has five
            // parameters that will be added to this list.

            ProgramParameter[] parmlist = new ProgramParameter[5];



            // The server program returns data in parameter 1.  It is an output
            // parameter.  Allocate 64 bytes for this parameter.

            parmlist[0] = new ProgramParameter( 64 );



            // Parameter 2 is the buffer size of parm 1.  It is a numeric input
            // parameter.  Sets its value to 64, convert it to the server format,
            // then add the parm to the parm list.

            AS400Bin4 bin4 = new AS400Bin4( );
            Integer iStatusLength = new Integer( 64 );
            byte[]  statusLength = bin4.toBytes( iStatusLength );
            parmlist[1] = new ProgramParameter( statusLength );



            // Parameter 3 is the status-format parameter.  It is a string input
            // parameter.  Set the string value, convert it to the server format,
            // then add the parameter to the parm list.

            AS400Text text1 = new AS400Text(8, as400);
            byte[] statusFormat = text1.toBytes("SSTS0200");
            parmlist[2] = new ProgramParameter( statusFormat );



            // Parameter 4 is the reset-statistics parameter.  It is a string input
            // parameter.  Set the string value, convert it to the server format,
            // then add the parameter to the parm list.

            AS400Text text3 = new AS400Text(10, as400);
            byte[] resetStats = text3.toBytes("*NO       ");
            parmlist[3] = new ProgramParameter( resetStats );



            // Parameter 5 is the error info parameter.  It is an input/output
            // parameter.  Add it to the parm list.

            byte[] errorInfo = new byte[32];
            parmlist[4] = new ProgramParameter( errorInfo, 0 );



            // Set the program to call and the parameter list to the program
            // call object.

            getSystemStatus.setProgram(programName.getPath(), parmlist );



            // Run the program then sleep.  We run the program twice because
            // the first set of results are inflated.  If we discard the first
            // set of results and run the command again five seconds later the
            // number will be more accurate.

            getSystemStatus.run();
            Thread.sleep(5000);



            // Run the program

            if (getSystemStatus.run()!=true)
            {

               // If the program did not run get the list of error messages
               // from the program object and display the messages.  The error
               // would be something like program-not-found or not-authorized
               // to the program.

               AS400Message[] msgList = getSystemStatus.getMessageList();

               System.out.println("The program did not run.  Server messages:");

               for (int i=0; i<msgList.length; i++)
               {
                   System.out.println(msgList[i].getText());
               }
            }


            // Else the program did run.

            else
            {

               // Create a server to Java numeric converter.  This converter
               // will be used in the following section to convert the numeric
               // output from the server format to Java format.

               AS400Bin4 as400Int = new AS400Bin4( );



               // Get the results of the program.  Output data is in
               // a byte array in the first parameter.

               byte[] as400Data = parmlist[0].getOutputData();



               // CPU utilization is a numeric field starting at byte
               // 32 of the output buffer.  Convert this number from the
               // server format to Java format and output the number.

               Integer cpuUtil = (Integer)as400Int.toObject( as400Data, 32 );
               cpuUtil = new Integer(cpuUtil.intValue()/10);
               System.out.print("CPU Utilization:  ");
               System.out.print(cpuUtil);
               System.out.println("%");



               // DASD utilization is a numeric field starting at byte
               // 52 of the output buffer.  Convert this number from the
               // server format to Java format and output the number.

               Integer dasdUtil = (Integer)as400Int.toObject( as400Data, 52 );
               dasdUtil = new Integer(dasdUtil.intValue()/10000);
               System.out.print("Dasd Utilization: ");
               System.out.print(dasdUtil);
               System.out.println("%");



               // Number of jobs is a numeric field starting at byte
               // 36 of the output buffer.  Convert this number from the
               // server format to Java format and output the number.

               Integer nj = (Integer)as400Int.toObject( as400Data, 36 );
               System.out.print("Active jobs:      ");
               System.out.println(nj);

            }

               // This program is done running program so disconnect from
               // the command server on the server.  Program call and command
               // call use the same server on the server.

            as400.disconnectService(AS400.COMMAND);
         }
         catch (Exception e)
         {
            // If any of the above operations failed say the program failed
            // and output the exception.

            System.out.println("Program call failed");
            System.out.println(e);
         }
      }

      // Display help text when parameters are incorrect.

      else
      {
         System.out.println("");
         System.out.println("");
         System.out.println("");
         System.out.println("Parameters are not correct.  Command syntax is:");
         System.out.println("");
         System.out.println("   PCSystemStatusExample myServer");
         System.out.println("");
         System.out.println("Where");
         System.out.println("");
         System.out.println("   myServer = get status of this server ");
         System.out.println("");
         System.out.println("For example:");
         System.out.println("");
         System.out.println("   PCSystemStatusExample mySystem");
         System.out.println("");
         System.out.println("");
      }

      System.exit(0);
   }
}