Search code examples
javadb2ibm-midrange

How can I add DB2 libraries using java code to call AS400 PGM


I am calling an AS400 program using java code. The call is successful when the program is simple and not trying to write in any DB2 table. When I try to call another program that tries to write in a DB2 table its not successful because I have to add the DB2 libraries related to this table. I have to add the libraries using the java code. an example was given to me using coldfusion code to add these libraries. I want to know how to add the DB2 libraries using java code.

private static final String HOST = "XXX.XXX.XXX.XXX";
private static final String UID = "XXX";
private static final String PWD = "XXX";

String fullProgramName = "/QSYS.LIB/TSTOBJ.LIB/GETAB.PGM";
String input = "12345678";
AS400 as400 = null;
byte[] inputData;
byte[] outputData;
String  SCAB;
AS400Text textData;
ProgramParameter[] parmList;
ProgramCall programCall;

try {
            // Create an AS400 object
            as400 = new AS400(HOST, UID, PWD);
            // Create a parameter list
            // The list must have both input and output parameters
            parmList = new ProgramParameter[2];
// Convert the Strings to IBM format

        inputData = input.getBytes("IBM285");

            // Create the input parameter  

        parmList[0] = new ProgramParameter(inputData);

            // Create the output parameter
            //Prarameterised Constructor is for the OUTPUT LENGTH. here it is 10
            parmList[1] = new ProgramParameter(20);


            /**
             * Create a program object specifying the name of the program and
             * the parameter list.
             */
            programCall = new ProgramCall(as400);
            programCall.setProgram(fullProgramName, parmList);
            // Run the program.  
            if (!programCall.run()) {
                /**
                 * If the AS/400 is not run then look at the message list to
                 * find out why it didn't run.
                 */
                AS400Message[] messageList = programCall.getMessageList();
                for (AS400Message message : messageList) {
                    System.out.println(message.getID() + " - " + message.getText());                

                }
            } else {
                /**
                 * Else the program is successfull. Process the output, which
                 * contains the returned data.
                 */
            outputData = parmList[1].getOutputData();
                  SCAB = new String(outputData, "IBM285").trim();

               /* System.out.println("Output is " + SCAB );*/
            }

        } catch (PropertyVetoException | AS400SecurityException | ErrorCompletingRequestException | IOException | InterruptedException | ObjectDoesNotExistException e) {
            System.err.println(":: Exception ::" + e.toString());
        } finally {
            try {
                // Make sure to disconnect 
                if (as400 != null) {
                    as400.disconnectAllServices();
                }
            } catch (Exception e) {
                System.err.println(":: Exception ::" + e.toString());
            }

COLDFUSION CODE=====>>>

<CFSET MYCMD = "ADDLIBLE KINP#Application.EQ_UNIT#   "  >
<cfset vretval = vcommand.run("#MYCMD#") >

<CFSET MYCMD = "ADDLIBLE KFIL#Application.EQ_UNIT#   "  >
<cfset vretval = vcommand.run("#MYCMD#") >

<CFSET MYCMD = "ADDLIBLE KWRK#Application.EQ_UNIT#   "  >
<cfset vretval = vcommand.run("#MYCMD#") >

<CFSET MYCMD = "ADDLIBLE KLIB#Application.EQ_UNIT#   "  >
<cfset vretval = vcommand.run("#MYCMD#") >

<CFSET MYCMD = "ADDLIBLE LIBK311F  "  >
<cfset vretval = vcommand.run("#MYCMD#") > 

Solution

  • Use commandcall to execute commands. See following link for details.

    https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/rzahh/javadoc/com/ibm/as400/access/CommandCall.html