MIDRANGE dot COM Mailing List Archive



Home » JAVA400-L » October 2005

RE: Passing parameters between Java and CL/COBOL/RPG programs



fixed

This is a simple example; a key is written to a dataque and the 1 row
from the table whose primary key matches is retrieved, padded and
written to a dataque so that an RPG program can retrieve it into a data
structure. This is an example of how to do this; it is not very reusable
or flexible nor is it an example of great coding technique.

Hopefully it will end up formatted Ok.

RPG snippit:
dout1             s             10    inz('FULFILLOUT')   
dout2             s             10    inz('PRODLIB')      
dout3             s              5P 0 inz(13)             
dout4             s             13     
din1              s             10    inz('FULFILLIN')      
din2              s             10    inz('PRODLIB')        
din3              s              5P 0                       
din4              s           1000                          
din5              s              5P 0 inz(-1)               
din6              s              2    inz('EQ')             
din7              s              3P 0 inz(26)               
din8              s             26                          
din9              s              3P 0 inz(0)                
din10             s              8 

C* write the key value to the data que

c                   eval      out4='YOURKEYVAL'       
c                   call      'QSNDDTAQ'                      
c                   parm                    out1              
c                   parm                    out2              
c                   parm                    out3              
c                   parm                    out4
C* read the results from the data que
c                   eval      in8='YOURKEYVAL'       
c                   call      'QRCVDTAQ'                     
c                   parm                    in1              
c                   parm                    in2              
c                   parm                    in3              
c                   parm                    in4              
c                   parm                    in5              
c                   parm                    in6              
c                   parm                    in7              
c                   parm                    in8              
c                   parm                    in9              
c                   parm                    in10  

In4 will have the data passed from the sql server it                
                                                     

Java:
import java.sql.*;
import java.util.*;
import com.ibm.as400.access.*;
public class demo
{ //open class
        private static AS400 a4 = null;
        private static KeyedDataQueue dqin = null;
        private static DataQueue dqout = null;
        private static int retrycount=0;
        private static String dqKey= "";
        private static Connection sqlcon = null;
        private static String sqlurl = "jdbc:microsoft:sqlserver://";

        public static void main (String[] params)
        { //open main
                String versionID = System.getProperty("java.version");
                System.out.println("JDK is: " + versionID );
                try
                {
                        boolean cont=true;
                        while (cont)
                        {
                        String iseriesname = "localhost";
                        String iuser="ISERIESUSER";
                        String ipw="ISERIESPASSWORD";
                        //get Iseries connection for dataqueues
                        a4 = new AS400(iseriesname, iuser, ipw);
                        dqin= new KeyedDataQueue(a4,
"/qsys.lib/prodlib.lib/FULFILLIN.dtaq");
                        dqout= new DataQueue(a4,
"/qsys.lib/prodlib.lib/FULFILLOUT.dtaq");
        
sqlurl="jdbc:microsoft:sqlserver://YOURSERVERIP:1433;DatabaseName=SCHEMA
NAME;";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 
                                //in
mssqlserver.jar;msbase.jar;msutil.jar
                        System.out.println(" SQL Server URL is:\n\t" +
sqlurl);
                        String sqluser="YOURSQLUSER";
                        String sqlpassword="YOURSQLPASSWORD";
                        //get sqlserver connection
                        sqlcon =
DriverManager.getConnection(sqlurl,sqluser,sqlpassword);
                        cont=copytesttbl();
            try
            {
                        sqlcon.close();
                }
                catch(Exception e) {}

                }
                }
                catch(SQLException se)
                {
                        System.out.println("Fatal SQL Error in main: " +
se.getErrorCode() + 
                                "\n\t" + se.getLocalizedMessage() );
                }
                catch(Exception e)
                {
                        System.out.println("Fatal Error in main: " +
"\n\t" + e.getLocalizedMessage() );
                }
        }//close main
//**********************************************************************
******************
public static String fieldpad (String in, int numchar, String chartopad,
boolean leftalign)
{//open copytesttbl
        String out=in;
        if(out==null)
                out="";
        int length=out.length();
        while(length < numchar)
        {
                if (leftalign)
                        out=out+chartopad;
                else
                        out=chartopad+out;
                    length=out.length();
        }
        return out;
}
//**********************************************************************
********************
public static boolean copytesttbl ()
{//open copytesttbl
        String sql="";
        try
        {
                boolean jobIsActive = true;
                Statement si = sqlcon.createStatement();
                System.out.println("Waiting for entry");
           while (jobIsActive)
           {
                        DataQueueEntry dqEntry = null;
                        if (dqKey.equals(""))
                        {
                        dqEntry = dqout.read(-1);
                        dqKey = dqEntry.getString().trim();
                    }
                        if (dqKey.equals("*EXIT"))
                        {
                                jobIsActive=false;
                                System.out.println("Program Exiting
Normally");
                                return false;
                        }
                        else
                        {
                                sql="select * from TABLENAME where
KEYFLD=" + qKey;
                                ResultSet rs=si.executeQuery(sql);
                                String data="";
                                System.out.println("key is" + dqKey);
                                while( rs.next())
                                {
                                        data=
        
fieldpad(rs.getString("FLD1NUMERIC"),20,"0",false)+
        
fieldpad(rs.getString("FLD2CHAR"),20," ",true);
                                }
                                dqin.write(fieldpad(dqKey.trim(),26,"
",true),data);
                                retrycount=0;
                                dqKey="";
                        }
                }
                si.close();
        }
        catch(Exception e)
        {
                System.out.println("Fatal Error
"+e.getLocalizedMessage());
                System.out.println("\t data: " +dqKey);
                retrycount++;
                if (retrycount<3)
                        return true;
                        else
                        return false;
        }
        return false;
        }//close copytesttbl
}//close class 

-----Original Message-----
From: java400-l-bounces+jehimes=liberty.edu@xxxxxxxxxxxx
[mailto:java400-l-bounces+jehimes=liberty.edu@xxxxxxxxxxxx] On Behalf Of
Winchester Terry
Sent: Wednesday, October 26, 2005 1:03 PM
To: Java Programming on and around the iSeries / AS400
Subject: RE: Passing parameters between Java and CL/COBOL/RPG programs

Jay,

I would love to see this too :)

Terry

> -----Original Message-----
> From: java400-l-bounces@xxxxxxxxxxxx
> [mailto:java400-l-bounces@xxxxxxxxxxxx] On Behalf Of Kelly Cookson
> Sent: Wednesday, October 26, 2005 12:37 PM
> To: Java Programming on and around the iSeries / AS400
> Subject: RE: Passing parameters between Java and CL/COBOL/RPG programs
> 
> 
> An example would be great! Thanks!
> Kelly
> 
> -----Original Message-----
> From: java400-l-bounces@xxxxxxxxxxxx
> [mailto:java400-l-bounces@xxxxxxxxxxxx]On Behalf Of Himes, Jay
> Sent: Wednesday, October 26, 2005 11:03 AM
> To: Java Programming on and around the iSeries / AS400
> Subject: RE: Passing parameters between Java and CL/COBOL/RPG programs
> 
> 
> What I have done for cases like this is to create a java program which

> runs in a separate job. I write the SQL statement to be run to a data 
> que from the program that needs the information; the java program runs

> the sql statement and writes the row (or rows) to a keyed data que the

> original program is reading from (the key is the original program's 
> job indicator so that multiple jobs can use the same que).
> 
> You can avoid the overhead of invoking the program an making a 
> connection for every row you whish to retrieve; which can be 
> significant.
> 
> If you are interested I can dig up an example.
> 
              <snipped for bandwidth>

--
This is the Java Programming on and around the iSeries / AS400
(JAVA400-L) mailing list To post a message email: JAVA400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/java400-l
or email: JAVA400-L-request@xxxxxxxxxxxx Before posting, please take a
moment to review the archives at http://archive.midrange.com/java400-l.







Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2014 by MIDRANGE dot COM and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available here. If you have questions about this, please contact