//COB#JAV6 JOB , // MSGCLASS=H,TIME=(,9),REGION=190M,MSGLEVEL=(2,0) //* From chapter 16 of the Enterprise COBOL Programming //* Guide. SC23-8529-01 //* Before submitting this, go to /u/DPGROSS/ootest/tsthello //* then compile IBMExample2.java and HelloJ.java //* following the directions therein. //* Set the CLASSPATH in the file ENV6. //* The three steps below, LIST1 LIST2 LIST3, will print these files. //* The _CEE_ENVFILE is documented in the C/C++ Prog Guide 4.12.2.3. //* Now submit this job. /*JOBPARM S=MVS1 //* ------------- Print IBMExample2.java ------------------------ //LIST1 EXEC PGM=ICEGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD PATH='/u/DPGROSS/ootest/tsthello/IBMExample2.java', // LRECL=80,RECFM=F,BLKSIZE=80,FILEDATA=TEXT //SYSUT2 DD SYSOUT=* //* ------------- Print HelloJ.java ------------------------------ //LIST2 EXEC PGM=ICEGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD PATH='/u/DPGROSS/ootest/tsthello/HelloJ.java', // LRECL=180,RECFM=F,BLKSIZE=180,FILEDATA=TEXT //SYSUT2 DD SYSOUT=* //* ------------- Print environment variables -------------------- //LIST3 EXEC PGM=ICEGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD PATH='/u/DPGROSS/ootest/tsthello/ENV6', // LRECL=180,RECFM=F,BLKSIZE=180,FILEDATA=TEXT //SYSUT2 DD SYSOUT=* //* ------------- Compile ---------------------------------------- //COBOL EXEC PGM=IGYCRCTL //STEPLIB DD DSNAME=IGYV4R20.SIGYCOMP,DISP=SHR Must use v4.2.0. //SYSPRINT DD SYSOUT=* //SYSMDECK DD SYSOUT=* //SYSADATA DD DUMMY //SYSLIN DD DSNAME=&&OBJECT(IBMEXAM2),DISP=(NEW,PASS), // SPACE=(CYL,(1,1,1)),UNIT=SYSDA,DSNTYPE=LIBRARY //SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT2 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT5 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT6 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSUT7 DD UNIT=SYSDA,SPACE=(CYL,(1,1)) //SYSIN DD * CBL NOXREF,LINECOUNT(0),DLL,THREAD,PGMNAME(LONGMIXED),RENT,LIB IDENTIFICATION DIVISION. PROGRAM-ID. 'IBMEXAM2' IS RECURSIVE. AUTHOR. Chapter 16 of COBOL Programming guide SC23-8529-01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. REPOSITORY. CLASS IBMExample2 IS 'IBMExample2' CLASS HelloJ IS "HelloJ" CLASS jstring IS 'jstring'. DATA DIVISION. WORKING-STORAGE SECTION. 01 DATA1 PICTURE S9(6) VALUE 2 COMPUTATIONAL. 01 DATA2 PICTURE S9(6) VALUE 0 COMPUTATIONAL. 01 inCharArrayPtr pointer. 01 inCharArrayLen pic S9(9) comp-5. 01 injString1 object reference jstring. 01 outjString1 object reference jstring. 01 inStringBuf pic x(500) usage display. 01 outStringBuf pic x(500) usage display. 01 outStringLen pic s9(9) comp-5. 01 rc pic s9(9) comp-5. 01 len pic s9(9) comp-5. 01 inStringObj usage object reference jstring. 01 outStringObj usage object reference jstring. LINKAGE SECTION. * COPY JNI SUPPRESS. * You'll have to make a local file for the COPY to work. * /usr/lpp/cobol/include/JNI.cpy PROCEDURE DIVISION. PERFORM B100-INITIALISE PERFORM C100-MAIN DISPLAY "STOP RUN." STOP RUN. B100-INITIALISE. DISPLAY 'B100-INITIALISE. ' MOVE Z"Hello" TO inStringBuf * MOVE LOW-VALUES TO inStringBuf(6:1) PERFORM B200-INIT-INPUT-VALUES PERFORM B300-INIT-OUTPUT-VALUES. B200-INIT-INPUT-VALUES. DISPLAY 'B200-INIT-INPUT-VALUES ' DISPLAY 'Call "NewStringPlatform" inStringBuf.....' Call "NewStringPlatform" using by value JNIEnvPtr address of inStringBuf address of inStringObj 0 returning rc if rc not = zero then display "Error occured creating in jstring object" stop run end-if . B300-INIT-OUTPUT-VALUES. DISPLAY 'B300-INIT-OUTPUT-VALUES ' DISPLAY 'Call "NewStringPlatform" outStringBuf.....' Call "NewStringPlatform" using by value JNIEnvPtr address of outStringBuf address of outStringObj 0 returning rc if rc not = zero then display "Error occured creating out jstring object" stop run end-if . C100-MAIN. DISPLAY 'C100-MAIN.' DISPLAY 'About to call HelloJ'. INVOKE HelloJ "sayHello" USING BY VALUE DATA1 RETURNING DATA2. DISPLAY "Returned from sayHello data2 = " data2. DISPLAY 'About to call IBMExample2 & pass a string'. INVOKE IBMExample2 'main3' USING BY VALUE inStringObj RETURNING outStringObj. DISPLAY 'Just returned from JAVA '. INITIALIZE outStringLen CALL 'GetStringPlatformLength' USING BY VALUE JNIEnvPtr outStringObj ADDRESS OF outStringLen 0 RETURNING RC IF RC NOT EQUAL ZERO DISPLAY 'GetStringPlatformLength Failed' EVALUATE RC WHEN -1 DISPLAY ' => Malformed input or illegal input' ' character' WHEN -2 DISPLAY ' => Unsupported encoding; the jstring' ' reference pointer is set to NULL' END-EVALUATE STOP RUN ELSE DISPLAY 'Method:GetStringPlatformLength returned (' outStringLen ')' END-IF CALL 'GetStringPlatform' USING BY VALUE JNIEnvPtr outStringObj ADDRESS OF outStringBuf outStringLen 0 RETURNING RC IF RC NOT EQUAL ZERO DISPLAY 'GetStringPlatform Failed' EVALUATE RC WHEN -1 DISPLAY ' => Malformed input or illegal input' ' character' WHEN -2 DISPLAY ' => Unsupported encoding; the jstring' ' reference pointer is set to NULL' END-EVALUATE STOP RUN END-IF DISPLAY 'Method:GetStringPlatformString returned (' outStringBuf(1:outStringLen) ')'. //* --------------- Binder ------------------------------------------ //LKED EXEC PGM=IEWL, // PARM='LINECT=0,DYNAM=DLL,CASE=MIXED,NOXREF,RENT,LIST=NOIMP,MAP' //SYSLIB DD DSNAME=CEEV1RCZ.SCEELKED,DISP=SHR // DD DSNAME=CEEV1RCZ.SCEELKEX,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSLMOD DD DSNAME=&&GOSET(IBMEXAM2),DISP=(NEW,PASS),UNIT=SYSDA, // SPACE=(CYL,(1,1,1)),DSNTYPE=LIBRARY //SYSDEFSD DD DUMMY //OBJMOD DD DSNAME=&&OBJECT,DISP=(OLD,DELETE) //SYSLIN DD * * COBOL 4.1.0: Java v1.4, not v5. This restriction is documented at * http://www-01.ibm.com/support/docview.wss?&uid=swg21289885 * COBOL 4.2.0: Java v1.4,5, or 6 is okay. INCLUDE OBJMOD(IBMEXAM2) *INCLUDE '/usr/lpp/java/J1.4/bin/classic/libjvm.x' INCLUDE '/usr/lpp/java/J6.0/bin/j9vm/libjvm.x' INCLUDE '/usr/lpp/cobol/lib/igzcjava.x' //*----------------- Execute --------------------------------------- //GO EXEC PGM=IBMEXAM2 , //* PARM='/ENVAR("_CEE_ENVFILE=/u/DPGROSS/ootest/tsthello/ENV6"), //* POSIX(ON),XPLINK(ON)' //* Notice the ENV5 file is listed above in step LIST3. //CEEOPTS DD * Same as above PARM= without the leading slash. ENVAR("_CEE_ENVFILE=/u/DPGROSS/ootest/tsthello/ENV6"), POSIX(ON),XPLINK(ON) RPTOPTS(OFF) //STEPLIB DD DSNAME=*.LKED.SYSLMOD,DISP=SHARE // DD DSNAME=CEEV1RCZ.SCEERUN2,DISP=(SHR) // DD DSNAME=CEEV1RCZ.SCEERUN,DISP=SHR //SYSOUT DD SYSOUT=* //CEEDUMP DD SYSOUT=* Look at the options. //*JAVAOUT DD SYSOUT=* does not work. //JAVAOUT DD PATH='/u/DPGROSS/ootest/tsthello/javaout', // PATHOPTS=(OWRONLY,OCREAT,OTRUNC),PATHMODE=(SIRUSR,SIWUSR,SIRGRP) //IDIOFF DD DUMMY //* ---------------- Print javaout ------------------------------ //LIST4 EXEC PGM=ICEGENER //SYSIN DD DUMMY //SYSPRINT DD DUMMY //SYSUT1 DD PATH='/u/DPGROSS/ootest/tsthello/javaout', // LRECL=180,RECFM=F,BLKSIZE=180,FILEDATA=TEXT //SYSUT2 DD SYSOUT=*