Clarity: Long process will not validate, gets HTTP 503 error, and causes java.lang.outofmemory errors.

Document ID : KB000022900
Last Modified Date : 14/02/2018
Show Technical Document Details

Description:

When you try to validate this long process it eventually returns the following error in the UI:

HTTP Status 503 -
-----------------------------------------------------------------------------

Type Status report message description.
The requested service () is not currently available.
------------------------------------------------------------------------------

Steps to Reproduce:

  1. XOG in the attached process.
  2. Validate the process.

Expected Result: The process will validate successfully
Actual Result: The process errors out with an HTTP 503 error in the UI and a java.lang.outofmemory error in the app-niku.log file.

Technical Details:
You see the following error in the app-niku.log under both MSSQL and Oracle:

FATAL 2013-03-18 11:20:11,937 [http-80-Processor24] web.WebControlServlet (admin:5342196__-91deef5:bpm.validateProcess) Action request error for request.
Could not render standard error page java.lang.OutOfMemoryError: Java heap space
at java.util.ArrayList.ensureCapacity(ArrayList.java:169)
at java.util.ArrayList.addAll(ArrayList.java:475)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:396)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)
at com.niku.bpm.graph.ComplexProcessDefinitionGraph.checkSplitJoinBlocksFor(ComplexProcessDefinitionGraph.java:428)

Solution:

WORKAROUND:
Break the process into two or more pieces and string them together using sub-processes or <gel:startProcess/> tag.

STATUS/RESOLUTION:
This process definition is simple but repeats the same pattern 32 times. The split/join matching algorithm used by process validation walks through each sub-graph recursively to validate split/join pairs. This algorithm runs into Stack Overflow error if the same pattern repeats over a limited number of times.
This issue is marked 'will not fix' and will remain outstanding without a targeted fix. Customers should use the identified workaround and if it does not help to resolve the issue, please contact Support.

Keywords: CLARITYKB, CLRT-27876, clarity12open, clarity13open, wnf

File Attachments:
TEC530989.zip