Accessing JNI services
The Java™ Native
Interface (JNI) provides many callable services that you can use when
you develop applications that mix COBOL and Java. To facilitate access to these services,
copy JNI.cpy into the LINKAGE SECTION
of
your COBOL program.
The JNI.cpy copybook contains these definitions:
- COBOL data definitions that correspond to the Java JNI types
- JNINativeInterface, the JNI environment structure that contains function pointers for accessing the callable service functions
You obtain the JNI environment structure by two levels of indirection from the JNI environment pointer, as the following illustration shows:
Use
the special register JNIEnvPtr
to reference the JNI
environment pointer to obtain the address for the JNI environment
structure. JNIEnvPtr
is implicitly defined as USAGE
POINTER
; do not use it as a receiving data item. Before you
reference the contents of the JNI environment structure, you must
code the following statements to establish its addressability:
Linkage section.
COPY JNI
. . .
Procedure division.
Set address of JNIEnv to JNIEnvPtr
Set address of JNINativeInterface to JNIEnv
. . .
The code above sets the addresses of the following items:
- JNIEnv, a pointer data item that JNI.cpy provides.
JNIEnvPtr
is the COBOL special register that contains the environment pointer. - JNINativeInterface, the COBOL group structure that JNI.cpy contains. This structure maps the JNI environment structure, which contains an array of function pointers for the JNI callable services.
After you code the statements above, you can access the
JNI callable services with CALL
statements that reference
the function pointers. You can pass the JNIEnvPtr
special
register as the first argument to the services that require the environment
pointer, as shown in the following example:
01 InputArrayObj usage object reference jlongArray.
01 ArrayLen pic S9(9) comp-5.
. . .
Call GetArrayLength using by value JNIEnvPtr InputArrayObj
returning ArrayLen
Some JNI callable services require a Java class-object reference as an argument. To obtain a reference to the class object that is associated with a class, use one of the following JNI callable services:
- GetObjectClass
- FindClass