Java Virtual Machine
You can edit, debug, and compile COBOL applications to JVM byte code (.class files) so that they can be run on a Java Virtual
Machine. The following limitations and restrictions apply:
- Currently, JVM COBOL is only supported on System z running Linux 390 when the JIT compiler is restricted to use only the cold
level optimisations.
This can be done by specifying 'cobjrun -Xjit:optLevel=cold
ProgramName' (or 'java -Xjit:optLevel=cold
ProgramName') to launch the program. For more information, see the topic
Selectively disabling the JIT in the Java SDK documentation available on IBM's Web site.
- In JVM_LOAD_NATIVE, the
myLibrary parameter must be passed as a literal; it cannot be declared in a COBOL storage section.
- You cannot use the COBCONFIG or COBCONFIG_ environment variables. You must use COBCONFIGJVM instead.
- The format of a JVM tunables file must be that of a standard Java properties file and not the format used by the native runtime.
- XML PARSE is not supported in JVM COBOL code. XML GENERATE is supported.
- You cannot use generics in your JVM COBOL code.
- COBOL class package and the directory structure is enforced. You might get errors finding source code.
For example:
If a
COBOLClass1.cbl is within a package
com.microfocus.core then it should be in the
Project/src/com/microfocus/core/COBOLClass1.cbl directory. In the case the
com.microfocus.core package is mapped to
com/microfocus/core directory.
- You cannot pass a JVM procedure-pointer to a native COBOL application.
- There is a known issue with IBM’s JVM support for the Java™ Attach API which causes the API to leak semaphores under certain
conditions. If you are running IBM’s JVM on AIX and Redhat or SUSE Linux on z390, this can cause your machine to run out of
semaphore space resulting in the machine running slower or causing intermittent failures.
To determine whether you are experiencing this issue, type the following at the command line to check the number of semaphores
that start with the 0xa1 prefix:
"ipcs -s -r | grep 0xa1 | wc –l"
If this number is very high and keeps growing you need to follow the cleanup procedure described in the "IBM Developer Kit
and Runtime Environment Diagnostics Guide", "Chapter 19. Attach API problem determination", ftp://public.dhe.ibm.com/software/dw/jdk/diagnosis/diag50.pdf
You can disable the Java™ Attach APIs to avoid the issue. Note, however, that when Attach API is disabled, it will not be
possible for other Java application to attach to your application and features such as jtop, jstat, jconsole, JMX agents,
JVMTI agents will cease to function.
The Attach API is enabled by default for Java 6 SR6 and later. To disable the feature you need to set the IBM JVM property
com.ibm.tools.attach.enable to "no".
You can use this property with any Java trigger, or with IBM’s environment variable IBM_JAVA_OPTIONS which allows you to pass
extra arguments to the JVM without changing any command lines.
You can set the variable as follows:
export IBM_JAVA_OPTIONS=-Dcom.ibm.tools.attach.enable=no
- A combination of using continuation lines and a source-format of variable has been known to produce screen corruption and
sometimes crash the JVM. A workaround is to compile your application with the source-format"fixed" directive, or if that is
not possible, set and then unset the directive immediately before and after the code containing the continuation lines.
- You can run some COBOL classes as COBOL JVM applications even when the COBOL class does not explicitly define a main method
that satisfies all criteria for JVM, which are that the main method:
- Is named
main
- Is marked
public static
- Uses the
string occurs any arguments
However, the application must not contain a
using clause in at least one static method or in the class itself.
When all of these criteria are met, the
Run as COBOL JVM Application option is available.
Application Servers
You can edit, debug, and compile COBOL applications to run on a variety of application servers. The following are not supported:
- COBOL file handling (including ACUCOBOL-GT file handling and Fileshare)
- Threading syntax, such as START and WAIT, and the CBL_THREAD library routines
- The PC_PRINTER library routines
- CALLing native COBOL library routines or OS-native APIs
- The STATIC keyword for class members
- Enhanced ACCEPT/DISPLAY statements
- Deploying the SQL runtime in a shared model while deploying the COBOL runtime in a per-bean model when using a class that
implements the EJB specification to run your JVM COBOL code.