Code the COBOL Program
This section describes how to code a COBOL program that is called by a Java™ program. The guidelines are illustrated in two sample COBOL programs. A later section shows two Java programs that interact with these COBOL programs.
If your COBOL program will be called by a Java program:
- Use the PROCESS statement NOMONOPRC (for case-sensitive names) and the option THREAD(SERIALIZE). When the COBOL program is invoked from a Java program, it will run in a Java thread. Specify the NOSTDTRUNC Process option to preserve the content of binary data items.
- Identify the COBOL program with a name that consists of:
- The prefix
Java_ - A mangled fully-qualified class name
- An underscore (
_) separator - A mangled method name
- For an overloaded native method, two underscores (
__) followed by the mangled argument signature.
- The prefix
- Copy the predefined interface function table into the program. For a listing of the predefined interface function table, see Member JNI.
- To pass a variable from a COBOL program to a Java program, specify the BY VALUE phrase on
the CALL. Receive the following arguments, in the following order:
- The JNI interface pointer
- A reference to the Java class (for a static native method) or to the object (for a nonstatic native method)
- Any additional arguments that are required. These arguments correspond to regular Java method arguments.
PROCESS NOMONOPRC NOSTDTRUNC OPTIONS THREAD (SERIALIZE). 1
*** COBOL native program called from Java
*** static method
IDENTIFICATION DIVISION.
PROGRAM-ID. "Java_Hello_displayHello". 2
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.
01 IS-COPY PIC 1.
01 NAME-PTR USAGE POINTER.
01 NAME-LENGTH PIC 9(4) BINARY.
01 I PIC 9(4) BINARY.
01 NAME-X.
05 CHAR-X OCCURS 20 TIMES PIC X.
LINKAGE SECTION.
*** JNI interface function table
COPY JNI. 3
01 NAME.
05 CHAR OCCURS 20 TIMES PIC N USAGE NATIONAL.
01 ENV-PTR USAGE POINTER.
01 CLASS-REF PIC S9(9) BINARY.
01 TITLE-CODE PIC S9(9) BINARY.
01 NAME-REF PIC S9(9) BINARY.
01 INTERFACE-PTR USAGE POINTER.
PROCEDURE DIVISION USING BY VALUE ENV-PTR 4a
CLASS-REF 4b
TITLE-CODE 4c
NAME-REF. 4c
MAIN-LINE SECTION.
MAIN-PROGRAM-LOGIC.
SET ADDRESS OF INTERFACE-PTR TO ENV-PTR.
SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR.
*** Callback JNI interface function GET-STRING-LENGTH to
*** retrieve the name length
CALL GET-STRING-LENGTH USING BY VALUE ENV-PTR 4
NAME-REF
RETURNING INTO NAME-LENGTH.
*** Callback JNI interface function GET-STRING-CHARS to
*** retrieve the name characters
CALL GET-STRING-CHARS USING BY VALUE ENV-PTR 4
NAME-REF
IS-COPY
RETURNING INTO NAME-PTR.
SET ADDRESS OF NAME TO NAME-PTR.
INITIALIZE NAME-X.
PERFORM VARYING I FROM 1 BY 1 UNTIL (I > NAME-LENGTH)
MOVE CHAR(I) TO CHAR-X(I)
END-PERFORM.
EVALUATE TITLE-CODE
WHEN 1
DISPLAY "Hello, Mr. ", NAME-X
WHEN 2
DISPLAY "Hello, Ms. ", NAME-X
WHEN OTHER
DISPLAY "Hello, ", NAME-X
END-EVALUATE.
GOBACK.
COBOL Program BYE
PROCESS NOMONOPRC NOSTDTRUNC OPTIONS THREAD(SERIALIZE). 1
*** COBOL native program called from Java
*** instance method
IDENTIFICATION DIVISION.
PROGRAM-ID. "Java_Bye_displayBye". 2
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.
01 IS-COPY PIC 1.
01 NAME-PTR USAGE POINTER.
01 NAME-LENGTH PIC 9(4) BINARY.
01 I PIC 9(4) BINARY.
01 NAME-X.
05 CHAR-X OCCURS 20 TIMES PIC X.
LINKAGE SECTION.
*** JNI interface function table
COPY JNI. 3
01 NAME.
05 CHAR OCCURS 20 TIMES PIC N USAGE NATIONAL.
01 ENV-PTR USAGE POINTER.
01 OBJECT-REF PIC S9(9) BINARY.
01 TITLE-CODE PIC S9(9) BINARY.
01 NAME-REF PIC S9(9) BINARY.
01 INTERFACE-PTR USAGE POINTER.
PROCEDURE DIVISION USING BY VALUE ENV-PTR 4
OBJECT-REF
TITLE-CODE
NAME-REF.
MAIN-LINE SECTION.
MAIN-PROGRAM-LOGIC.
SET ADDRESS OF INTERFACE-PTR TO ENV-PTR.
SET ADDRESS OF JNI-NATIVE-INTERFACE TO INTERFACE-PTR.
*** Callback JNI interface function GET-STRING-LENGTH to
*** retrieve the name length
CALL GET-STRING-LENGTH USING BY VALUE ENV-PTR 4
NAME-REF
RETURNING INTO NAME-LENGTH.
*** Callback JNI interface function GET-STRING-CHARS to
*** retrieve the name characters
CALL GET-STRING-CHARS USING BY VALUE ENV-PTR 4
NAME-REF
IS-COPY
RETURNING INTO NAME-PTR.
SET ADDRESS OF NAME TO NAME-PTR.
INITIALIZE NAME-X.
PERFORM VARYING I FROM 1 BY 1 UNTIL (I > NAME-LENGTH)
MOVE CHAR(I) TO CHAR-X(I)
END-PERFORM.
EVALUATE TITLE-CODE
WHEN 1
DISPLAY "Bye, Mr. ", NAME-X
WHEN 2
DISPLAY "Bye, Ms. ", NAME-X
WHEN OTHER
DISPLAY "Bye, ", NAME-X
END-EVALUATE.
GOBACK.