cancel
Showing results for 
Search instead for 
Did you mean: 

Parallel multi instance usertasks collection from service

mindaugas
Champ in-the-making
Champ in-the-making
The example: (from http://activiti.org/userguide/index.html#bpmnMultiInstance)
<userTask id="miTasks" name="My Task" activiti:assignee="${assignee}">  <multiInstanceLoopCharacteristics isSequential="true"      activiti:collection="${myService.resolveUsersForTask()}" activiti:elementVariable="assignee" >  </multiInstanceLoopCharacteristics></userTask>‍‍‍‍‍

The problem is that service "myService" method resolveUsersForTask are invoked multi-times.

In activiti-engine class method: org.activiti.engine.impl.bpmn.behavior.ParallelMultiInstanceBehavior.createInstances evaluate expresion values multi-times.

First resolving:
int nrOfInstances = resolveNrOfInstances(execution);‍

Second only for setting assignee (string value from collection) are invoked collectionExpression (myService.resolveUsersForTask()):
    for (int loopCounter=0; loopCounter<nrOfInstances; loopCounter++) {    …        executeOriginalBehavior(concurrentExecution, loopCounter);      }    }‍‍‍‍‍‍‍

So totally this service are invoked collection.size()+1 times. May be in near future possible optimize this part?
1 REPLY 1

mindaugas
Champ in-the-making
Champ in-the-making
Can someone comment this situation? Does there are any other way using UserTask for multi users, get in current state assignee's list from java service meanwhile this service retrieve list from third-party app using web-service. So calling myService.resolveUsersForTask() many times are unacceptable.

Regards,
Mindaugas