IBM Support

IBM InfoSphere Information Server OMDMonApp service cannot start due to a java.lang.IllegalArgumentException

Troubleshooting


Problem

IBM InfoSphere Information Server OMDMonApp service cannot start due to the "java.lang.IllegalArgumentException: Comparison method violates its general contract!".

Cause

The issue is caused by a defect which affects both versions 7 and 8 of JDK.

Diagnosing The Problem

The OMDMonApp service shows as "NOT_RUNNING" from the DSOMDMonApp.sh -status command. In the relevant OMDMonApp log file (InformationServerRoot/Server/DSOMD/logs/dstage_OMD_trace_*.log), it contains the error below:
ERROR com.ibm.datastage.runtime.omdmonapp.OMDMonApp.startApplication(OMDMonApp.java:491) - Error occurred:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:884)
at java.util.TimSort.mergeAt(TimSort.java:501)
at java.util.TimSort.mergeCollapse(TimSort.java:426)
at java.util.TimSort.sort(TimSort.java:230)
at java.util.TimSort.sort(TimSort.java:189)
at java.util.Arrays.sort(Arrays.java:867)
at com.ibm.datastage.runtime.utils.DropFileDirectory.lookForFiles(DropFileDirectory.java:270)
at com.ibm.datastage.runtime.utils.DropFileDirectory.watchForFiles(DropFileDirectory.java:309)
at com.ibm.datastage.runtime.omdmonapp.OMDMonApp.run(OMDMonApp.java:268)
at com.ibm.datastage.runtime.omdmonapp.OMDMonApp.startApplication(OMDMonApp.java:463)
at com.ibm.datastage.runtime.omdmonapp.OMDMonApp.main(OMDMonApp.java:386)

Resolving The Problem

Please follow these steps to resolve:
1. Log in to the engine tier
On Linux and Unix

    - ssh to the engine tier as dsadm or equivalent
    - cd `cat /.dshome`/../DSOMD/bin

On Windows
    - Start a Command Prompt as Administrator
    - Go to the DSOMD\bin directory. For example:
      cd C:\IBM\InformationServer\Server\DSOMD\bin

2. Back up the original DSOMDMonApp.sh script.
For example,
cp -p DSOMDMonApp.sh DSOMDMonApp.sh.orig

3
. Add java.util.Arrays.useLegacyMergeSort property in DSOMDMonApp.sh as shown below:
if [ "$ACTION" = "-startalways" ]
then
#   we don't want to start if OMDMonApp is already running
    if [ "$OMAPid" = "" ]
    then
        $APW_NOHUP_CMD "$JAVA"
-Djava.util.Arrays.useLegacyMergeSort=true -DPSMARKER=$PSMARKER -Xms32m -Xmx384m -classpath "$CLASSPATH" com.ibm.datastage.runtime.omdmonapp.OMDMonApp  -start  > $DSOMD_LOGS/start.dsomd.out 2>&1 &
    fi


4
. Start the OMDMonApp service
On Linux and Unix
    - ./DSOMDMonApp.sh -start

On Windows
    - DSOMDMonApp.sh -start
or
    - Control Panel > DataStage Control Panel
    a. Stop All Services
    b. Start All Services

[{"Product":{"code":"SSVSEF","label":"IBM InfoSphere DataStage"},"Business Unit":{"code":"BU059","label":"IBM Software w\/o TPS"},"Component":"--","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF033","label":"Windows"}],"Version":"11.5;11.3.1.2;11.3.1.1;11.3.1.0;11.3;11.5.0.1;11.5.0.2","Edition":"","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
21 October 2018

UID

swg22003827