To call a Java method from a COBOL program, perform the following steps:
This section describes how to code a COBOL program that calls Java methods. The guidelines are illustrated in a sample COBOL program and a sample Java program.
If your COBOL program will call a Java method:
For detailed information about the parameters associated with these invocation API functions, refer to Java Native Interface Specification Release 1.1 (Revised May, 1997).
In the example below:
COBOL Program HELLOWORLD
PROCESS MAP NOMONOPRC OPTIONS THREAD(SERIALIZE). (1) Author. INSTALLATION. IBM Toronto Lab. DATE-WRITTEN. DATE-COMPILED. ENVIRONMENT DIVISION. CONFIGURATION SECTION. SOURCE-COMPUTER. IBM-ISERIES. OBJECT-COMPUTER. IBM-ISERIES. INPUT-OUTPUT SECTION. FILE-CONTROL. DATA DIVISION. FILE SECTION. WORKING-STORAGE SECTION. *** JDK 1.2 VM initialization arguments 01 VM-INIT-ARGS. 05 VERSION PIC S9(9) BINARY VALUE 65538. 05 NUMBER-OF-OPTIONS PIC S9(9) BINARY. 05 OPTIONS-PTR USAGE POINTER. 05 FILLER PIC X(1). 01 VM-OPTIONS. 05 OPTIONS-STRING-PTR USAGE POINTER. 05 EXTRA-INFO-PTR USAGE POINTER. *** 01 JVM-PTR USAGE POINTER. 01 ENV-PTR USAGE POINTER. 01 RC1 PIC S9(9) BINARY VALUE 1. 01 RC2 PIC S9(9) BINARY VALUE 1. 01 RC3 PIC S9(9) BINARY VALUE 1. 01 CLASS-NAME PIC X(30). 01 CLASS-NAME-PTR USAGE POINTER. 01 METHOD-NAME PIC X(30). 01 METHOD-NAME-PTR USAGE POINTER. 01 SIGNATURE-NAME PIC X(30). 01 SIGNATURE-NAME-PTR USAGE POINTER. *** CLASSPATH Parameters 01 CLASSPATH PIC X(500). *** Object Reference Variables 01 MY-CLASS-REF PIC S9(9) BINARY. 01 STRING-CLASS-REF PIC S9(9) BINARY. 01 METHOD-ID PIC S9(9) BINARY. 01 INIT-METHOD-ID PIC S9(9) BINARY. 01 STATIC-METHOD-ID PIC S9(9) BINARY. 01 OBJECT-REF PIC S9(9) BINARY. 01 ARG-REF PIC S9(9) BINARY. 01 STRING-REF PIC S9(9) BINARY. *** Parameter Array for calling METHODA 01 PARM-ARRAY. 05 PARM-ARRAY-ELEMENT OCCURS 10 TIMES. 10 PARM-ARRAY-ELEMENT-VALUE PIC S9(9) BINARY. 10 FILLER PIC X(4). 01 PARM-ARRAY-PTR USAGE POINTER. LINKAGE SECTION. *** JNI interface function table COPY JNI. (2) 01 INTERFACE-PTR USAGE POINTER. 01 JVM PIC S9(9) BINARY. PROCEDURE DIVISION. MAIN-LINE SECTION. MAIN-PROGRAM-LOGIC. *** In V5R3, the procedure call JNI_GetDefaultJavaVMInitArgs *** is no longer required. *** Retrieve default JVM initiliazion arguments * * SET VM-ARGS-PTR TO ADDRESS OF VM-INIT-ARGS. * CALL PROCEDURE "JNI_GetDefaultJavaVMInitArgs" * USING VM-INIT-ARGS * RETURNING INTO RC1. * * DISPLAY RC1. * *** Append my classpath (:/home/myclass) to CLASSPATH * * SET ADDRESS OF CLASSPATH-DEFAULT TO CLASSPATH. * STRING FUNCTION UTF8STRING("-Djava.class.path=/home/myclass") (3a) DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO CLASSPATH SET OPTIONS-STRING-PTR TO ADDRESS OF CLASSPATH. MOVE 1 TO NUMBER-OF-OPTIONS. SET OPTIONS-PTR TO ADDRESS OF VM-OPTIONS. *** Load and initializes the Java VM (3b) CALL PROCEDURE "JNI_CreateJavaVM" USING JVM-PTR ENV-PTR VM-INIT-ARGS RETURNING INTO RC2. DISPLAY RC2. SET ADDRESS OF INTERFACE-PTR TO ENV-PTR. SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR. *** Callback JNI interface function FIND-CLASS "HelloWorld" STRING FUNCTION UTF8STRING("HelloWorld") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO CLASS-NAME. SET CLASS-NAME-PTR TO ADDRESS OF CLASS-NAME. CALL FIND-CLASS USING BY VALUE ENV-PTR CLASS-NAME-PTR RETURNING INTO MY-CLASS-REF. DISPLAY MY-CLASS-REF. *** Callback JNI interface function FIND-CLASS "java/lang/String" STRING FUNCTION UTF8STRING("java/lang/String") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO CLASS-NAME. SET CLASS-NAME-PTR TO ADDRESS OF CLASS-NAME. CALL FIND-CLASS USING BY VALUE ENV-PTR CLASS-NAME-PTR RETURNING INTO STRING-CLASS-REF. DISPLAY STRING-CLASS-REF. *** Callback JNI interface function GET-METHOD-ID "<init>" *** to retrieve constructor method ID STRING FUNCTION UTF8STRING("<init>") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO METHOD-NAME. STRING FUNCTION UTF8STRING("()V") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO SIGNATURE-NAME. SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME. SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME. CALL GET-METHOD-ID USING BY VALUE ENV-PTR MY-CLASS-REF METHOD-NAME-PTR SIGNATURE-NAME-PTR RETURNING INTO INIT-METHOD-ID. DISPLAY INIT-METHOD-ID. *** Callback JNI interface function NEW-OBJECT "HelloWorld" CALL NEW-OBJECT USING BY VALUE ENV-PTR MY-CLASS-REF INIT-METHOD-ID RETURNING INTO OBJECT-REF. DISPLAY OBJECT-REF. *** Callback JNI interface function GET-STATIC-METHOD-ID "main" STRING FUNCTION UTF8STRING("main") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO METHOD-NAME. STRING FUNCTION UTF8STRING("([Ljava/lang/String;)V") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO SIGNATURE-NAME. SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME. SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME. CALL GET-STATIC-METHOD-ID USING BY VALUE ENV-PTR MY-CLASS-REF METHOD-NAME-PTR SIGNATURE-NAME-PTR RETURNING INTO STATIC-METHOD-ID. DISPLAY STATIC-METHOD-ID. *** Callback JNI interface function NEW-OBJECT-ARRAY CALL NEW-OBJECT-ARRAY USING BY VALUE ENV-PTR 0 STRING-CLASS-REF 0 RETURNING INTO ARG-REF. DISPLAY ARG-REF. *** Callback JNI interface function CALL-STATIC-VOID-METHODA SET PARM-ARRAY-PTR TO ADDRESS OF PARM-ARRAY. INITIALIZE PARM-ARRAY. MOVE ARG-REF TO PARM-ARRAY-ELEMENT-VALUE(1). CALL CALL-STATIC-VOID-METHODA USING BY VALUE ENV-PTR MY-CLASS-REF STATIC-METHOD-ID PARM-ARRAY-PTR. *** Callback JNI interface function GET-METHOD-ID "display" STRING FUNCTION UTF8STRING("display") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO METHOD-NAME. STRING FUNCTION UTF8STRING("([II)V") DELIMITED BY SIZE X"00" DELIMITED BY SIZE INTO SIGNATURE-NAME. SET METHOD-NAME-PTR TO ADDRESS OF METHOD-NAME. SET SIGNATURE-NAME-PTR TO ADDRESS OF SIGNATURE-NAME. CALL GET-METHOD-ID USING BY VALUE ENV-PTR MY-CLASS-REF METHOD-NAME-PTR SIGNATURE-NAME-PTR RETURNING INTO METHOD-ID. DISPLAY METHOD-ID. *** Callback JNI interface function NEW-INT-ARRAY CALL NEW-INT-ARRAY USING BY VALUE ENV-PTR 10 RETURNING INTO ARG-REF. DISPLAY ARG-REF. *** Callback JNI interface function CALL-VOID-METHODA SET PARM-ARRAY-PTR TO ADDRESS OF PARM-ARRAY. INITIALIZE PARM-ARRAY. MOVE ARG-REF TO PARM-ARRAY-ELEMENT-VALUE(1). MOVE 2 TO PARM-ARRAY-ELEMENT-VALUE(2). CALL CALL-VOID-METHODA USING BY VALUE ENV-PTR OBJECT-REF METHOD-ID PARM-ARRAY-PTR. *** Destroy the Java VM (3c) SET ADDRESS OF JVM TO JVM-PTR. CALL PROCEDURE "DestroyJavaVM" USING JVM RETURNING INTO RC3. DISPLAY RC3. GOBACK.
To create a COBOL module, use the CRTBNDCBL command, as shown below.
+--------------------------------------------------------------------------------+ | Create Bound COBOL Program (CRTBNDCBL) | | | | Type choices, press Enter. | | | | Program . . . . . . . . . . . . > HELLOWORLD Name, *PGMID | | Library . . . . . . . . . . . *CURLIB Name, *CURLIB | | Source file . . . . . . . . . . > QCBLLESRC Name | | Library . . . . . . . . . . . > *CURLIB Name, *LIBL, *CURLIB | | Source member . . . . . . . . . > HELLOWORLD Name, *PGM | | Source stream file . . . . . . . | | Output . . . . . . . . . . . . . *PRINT *PRINT, *NONE | | Generation severity level . . . 30 0-30 | | Text 'description' . . . . . . . *SRCMBRTXT | | | | | | Additional Parameters | | | | Replace program . . . . . . . . > *YES *YES, *NO | | | | | | | | Bottom | | F3=Exit F4=Prompt F5=Refresh F10=Additional parameters F12=Cancel | | F13=How to use this display F24=More keys | | | +--------------------------------------------------------------------------------+
Figure 65. Java Program HelloWorld.java
class HelloWorld { public static void main(String[] args) { System.out.println("Hello World"); } void display(int[] args, int i) { System.out.println("Length of integer array is " + args.length); System.out.println("Value of integer variable is " + i); System.out.println("Bye World"); } } |
To compile the Java source program, you can enter the Qshell interpreter (QSH) and issue the following command:
javac HelloWorld.java
(C) Copyright IBM Corporation 1992, 2005. All Rights Reserved.