Endevor web services - "CEE3501S The module libjvm.so was not found" in Tomcat STC
search cancel

Endevor web services - "CEE3501S The module libjvm.so was not found" in Tomcat STC


Article ID: 259402


Updated On:




Startup of JVM for the Tomcat server to be used for Endevor web services might fail with

 CEE3501S The module libjvm.so was not found.                                                                                      From entry point JzosVM::initializeVMArgs() at compile unit offset +00000094 at entry offset +00000094 at                address 2E90622C.

How to deal with this situation?


Release : 19.0


File libjvm.so is the main program of the Java VM. The program that intends to build the JVM (in the case of the Tomcat server, the IBM batch launcher) tries to invoke this library to start the JVM.

IBM LE (Language Environment) tries to load this library from each and every of the folders named in the LIBPATH environment variable.

This variable is exported by the script specified in STDENV DD in the JCL that starts the Tomcat server

The script is customized by the install scripts based on what is specified in file ENWSInstallOptions.properties

The folders related to Java are located from the base folder named in JAVA_HOME parameter


It is important to locate the right JAVA_HOME folder, specify it in the properties file and run the install script. This way, the script found in STDENV DD will name the right folders in variable LIBPATH

The installation of Java places symbolic links in folder /usr/lpp/java that point to the folders where the JVMs  reside. They may be found opening an Unix shell session via TSO OMVS command. For example:

$ cd /usr/lpp/java
$ ls -l
total 0
lrwxrwxrwx   1 STCSYS   OMLV2GRP      40 Aug  4  2021 J11.0 -> /sys/java31bt/v11
lrwxrwxrwx   1 STCSYS   OMLV2GRP      44 Aug  4  2021 J11.0_64 -> /sys/java64bt/
lrwxrwxrwx   1 STCSYS   OMLV2GRP      38 Aug  4  2021 J8.0 -> /sys/java31bt/v8r0
lrwxrwxrwx   1 STCSYS   OMLV2GRP      42 Aug  4  2021 J8.0_64 -> /sys/java64bt/v

In theory, any of the above folders (/usr/lpp/java/J11.0, /usr/lpp/java/J11.0_64 and so on) is candidate to be used for the JAVA_HOME specification. However, the recommendation is to use only the Java v8 folders. It is important to use the right version (31-bit or 64-bit)

It is possible to further test whether the selected folder contains a working Java environment by using it to run the sample 'HelloWorld' class. For example, still in the Unix shell session:

$ export JAVA_HOME=/usr/lpp/java/J8.0_64
$ $JAVA_HOME/bin/java -version
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build - pmz6480sr7fp10-20220505_01(SR7
IBM J9 VM (build 2.9, JRE 1.8.0 z/OS s390x-64-Bit Compressed References 20220427
_27745 (JIT enabled, AOT enabled)
OpenJ9   - b15041a
OMR      - 3671a9f
IBM      - 1b0232b)
JCL - 20220504_01 based on Oracle jdk8u331-b09
$ $JAVA_HOME/bin/java -cp $JAVA_HOME HelloWorld
Hello World

File libjvm.so is present at several locations below the Java home folder. For example:

$ cd /usr/lpp/java/J8.0_64
$ find . -name "libjvm.so"

The exact file taken will depend on the LIBPATH setting passed to the JVM launcher via STDENV DD in the JCL. Note that the tailored STDENV script includes $JAVA_HOME/lib/s390x/classic (if using 64-bit Java) or $JAVA_HOME/lib/s390/classic (if using 31-bit Java) so the Java batch launcher should be able to find the library in LIBPATH