COBOL and JNI

Calling a COBOL Program from a Java Program

To call a COBOL program from a Java(TM) program, perform the following steps:

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:

  1. 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.
  2. Identify the COBOL program with a name that consists of:
  3. Copy the predefined interface function table into the program. For a listing of the predefined interface function table, see Member JNI.
  4. 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:
    1. The JNI interface pointer
    2. A reference to the Java class (for a static native method) or to the object (for a nonstatic native method)
    3. Any additional arguments that are required. These arguments correspond to regular Java method arguments.
    Note that COBOL and Java data types are not completely equivalent. See COBOL and Java Data Types.
Figure 61. COBOL Program HELLO
 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.
Figure 62. 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.
Create the COBOL Module

To create a COBOL module, use the CRTCBLMOD command, as shown in the examples on the two following screens.

                         Create COBOL Module (CRTCBLMOD)

 Type choices, press Enter.

 Module . . . . . . . . . . . . . > BYE           Name, *PGMID
   Library  . . . . . . . . . . . >   *CURLIB     Name, *CURLIB
 Source file  . . . . . . . . . . > QCBLLESRC     Name
   Library  . . . . . . . . . . . >   *LIBL       Name, *LIBL, *CURLIB
 Source member  . . . . . . . . . > BYE           Name, *MODULE
 Source stream file . . . . . . .
 Output . . . . . . . . . . . . .   *PRINT        *PRINT, *NONE
 Generation severity level  . . .   30            0-30
 Text 'description' . . . . . . .   *SRCMBRTXT


                            Additional Parameters

 Replace module . . . . . . . . . > *YES          *YES, *NO



                                                                         Bottom
 F3=Exit   F4=Prompt   F5=Refresh   F10=Additional parameters   F12=Cancel
 F13=How to use this display        F24=More keys
                         Create COBOL Module (CRTCBLMOD)

 Type choices, press Enter.

 Module . . . . . . . . . . . . . > HELLO         Name, *PGMID
   Library  . . . . . . . . . . . >   *CURLIB     Name, *CURLIB
 Source file  . . . . . . . . . . > QCBLLESRC     Name
   Library  . . . . . . . . . . . >   *LIBL       Name, *LIBL, *CURLIB
 Source member  . . . . . . . . . > HELLO         Name, *MODULE
 Source stream file . . . . . . .
 Output . . . . . . . . . . . . .   *PRINT        *PRINT, *NONE
 Generation severity level  . . .   30            0-30
 Text 'description' . . . . . . .   *SRCMBRTXT


                            Additional Parameters

 Replace module . . . . . . . . . > *YES          *YES, *NO



                                                                         Bottom
 F3=Exit   F4=Prompt   F5=Refresh   F10=Additional parameters   F12=Cancel
 F13=How to use this display        F24=More keys
Create a Service Program

Bind the module or modules into a service program, using the CRTSRVPGM command as shown below. Specify the EXPORT option.

                       Create Service Program (CRTSRVPGM)

 Type choices, press Enter.

 Service program  . . . . . . . . SRVPGM       > HELLOBYE
   Library  . . . . . . . . . . .              >   *CURLIB
 Module . . . . . . . . . . . . . MODULE       > HELLO
   Library  . . . . . . . . . . .              >   *CURLIB
                           + for more values   > BYE
                                               >   *CURLIB
 Export . . . . . . . . . . . . . EXPORT       > *ALL
 Export source file . . . . . . . SRCFILE        QSRVSRC
   Library  . . . . . . . . . . .                  *LIBL
 Export source member . . . . . . SRCMBR         *SRVPGM
 Text 'description' . . . . . . . TEXT           *BLANK





                                                                        More...
 F3=Exit   F4=Prompt   F5=Refresh   F12=Cancel   F13=How to use this display
 F24=More keys
Code the Java Program

This section describes how to code a Java program that calls a COBOL program. The guidelines are illustrated in two sample Java programs, which call the COBOL programs that were shown in a previous section.

Java source files are stored in the Integrated File System (IFS). You can use the stream file editor, EDTF, to edit these files.

If your Java program will call a COBOL program:

  1. Make a static initializing call to the system method System.loadLibrary to load the COBOL service program that you created in the previous step. (In this example, the service program is named HELLOBYE.)
  2. Declare the COBOL method with the keyword native. For the body of the native method, specify only a semicolon. This indicates that the implementation is omitted.

    You can specify the short name (the name without the argument signature). The JVM will look for a method with this name in the native library; if that fails, the JVM will look for the long name. If you want to overload another native method, use the long name. If a native method has the same name as a Java method, you do not need to specify the long name because the Java method will not exist in the native library.

Figure 63. Java Program Hello.java
 class Hello {
         static {
                 System.loadLibrary("HELLOBYE");      1 
         }

         static native void displayHello(int parm1, String parm2);      2 

         public static void main(String[ ] args) {
               int titleCode;
               String name;

               switch (args.length) {
               case 1:
                            titleCode = Integer.parseInt(args[0]);
                            name = "Someone";
                            break;
               case 2:
                            titleCode = Integer.parseInt(args[0]);
                            name = args[1];
                            break;
               default:
                            titleCode = 0;
                            name = "Someone";
                            break;
               }
               displayHello(titleCode, name);
               Bye bye = new Bye( );
               bye.displayBye(titleCode, name);
         }
 }
Figure 64. Java Program Bye.java
 class Bye {
          static {
                  System.loadLibrary("HELLOBYE");      1 
          }
          static native void displayBye(int parm1, String parm2);      2 
 }
Compile the Java Program

To compile the Java source programs, you can enter the Qshell interpreter (QSH) and issue the following commands:

javac Hello.java

javac Bye.java
Invoke theJava program

To invoke the Java source programs, you can enter the Qshell interpreter (QSH) and issue the following commands:

>java Hello
Hello, Someone
Bye, Someone
>java Hello 1
Hello, Mr. Someone
Bye, Mr. Someone
>java Hello 2 USA
Hello, Ms. USA
Bye, Ms. USA 

You can use the javah tool to generate header files for the Java programs. These header files are used by C and C++ compilers, not by the COBOL compiler, but you might find them useful for checking the naming of native programs.

javah -jni Hello

javah -jni Bye

Calling Java Methods from a COBOL Program

To call a Java method from a COBOL program, perform the following steps:

Code the COBOL Program

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:

  1. Use the PROCESS statement NOMONOPRC (for case-sensitive names) and the option THREAD(SERIALIZE).
  2. Copy the JDKINIT and JNI members. For listings of these members, see Member JNI and Member JDK11INIT.
  3. Call the appropriate Java invocation API functions. The following API functions are available:

    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:

    1. Specify the classpath for the JVM.
    2. The JVM is invoked.
    3. The DestroyJavaVM( ) procedure unloads the JVM and reclaims its resources.

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.


Create the COBOL Program

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
Code the Java Program
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");

     }

}
Compile the Java Program

To compile the Java source program, you can enter the Qshell interpreter (QSH) and issue the following command:

  javac HelloWorld.java