Sometimes, many events are stuck in the in-progress state in the collaboration, but no error is reported and no events are processed.
Typically, you can observe a large number of events in the collaboration statistics as in-progress, and those events are persisted in the work in progress (WIP) table with the status 1.
A typical message that you see when this problem occurs is a null message:
[Time: 2008/07/13 20:18:59.141] [System: Collaboration] [SS: t1] [Thread: t1.thread1 (#946857058)] [Mesg: null]
The cause of the problem is that, during processing, the collaboration unlocks an event abruptly. This occurs during execution of the iterator task when the iterator BusObj type or the BusObjArray type variable value is null. These events are reprocessed when WebSphere® Interchange Server is restarted.
The error-handling feature of the iterator does not handle null values for the objects that are defined as BusObj type or BusObjArray in the iterator for looping. This causes the collaboration to unlock events abruptly and leave them in the in-progress state.
Example scenario for this problem:
BO1 is the BusObj type variable defined as below during collaboration template design:
The 2 places where we can use this BusObj type variable for iterator processing is given as below:
1. Iterate through this business object:
2. Iterate business object in an array:
If you do not initialize the variable BO1 and use it for iteration then the collaboration unlocks the event at the iterator step, leaving the entry in the WIP table as in-progress with the status 1. These events get reprocessed by the collaboration when InterChange Server is restarted. Over a period of time, you might see a large number of events in the WIP table with the status 1.
Resolving the problem
One way to resolve this problem is that during collaboration template design when a BusObj type is to be used for the iterator then its defined and declared at the same time as below:
or You must initialize it sometime during the flow before the iterator step
Other way to avoid this is to ensure that the value on which the iterator will iterate is not null by doing a check just before the event is processed by the iterator. Use the "Check" task before the iterator step as follows: