MultiInstance UserTask - add/remove executor while running
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
10-28-2016 04:43 AM
Hi. I need to implement votes with ability of adding/removing voters while usertask is still running. How is it possible? Can i use multiinstance usertask for this by doing some interventions in it?
Labels:
- Labels:
-
Archive
1 REPLY 1
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
11-18-2016 07:53 AM
I took <java>createInstances</java> from ParallelMultiInstanceBehavior.java as a starting point and got this dirty solution:
<java>
public static void addChildConcurrentExecutionToCurrentExecution(String processId, final String uuid, final String assigneeVarName)
{
final ExecutionEntity execution = ActivitiUtil.getCurrentExecution(processId);
getCommandExecutor().execute(new Command<Object>() {
public Object execute(CommandContext commandContext) {
Integer numInstances = (Integer) execution.getVariableLocal(NUMBER_OF_INSTANCES);
execution.setVariableLocal(NUMBER_OF_INSTANCES, numInstances + 1);
execution.setVariableLocal(NUMBER_OF_ACTIVE_INSTANCES, numInstances + 1);
ExecutionEntity newExecution = execution.createExecution();
newExecution.setActive(true);
newExecution.setConcurrent(true);
newExecution.setScope(false);
newExecution.setVariableLocal(LOOP_COUNTER, numInstances + 1);
newExecution.setVariableLocal(assigneeVarName, uuid);
// executeOriginalBehavior(newExecution, numInstances + 1);
// newExecution.setVariableLocal(behavior.getCollectionElementVariable(), "corebofs002080000ldurpmdvigvgcu0");
// ee.setActive(false);
newExecution.executeActivity(newExecution.getActivity());
return null;
}
});
}
public static void delecteConcurrentExecutionByAssignee(String processId, String uuid)
{
final String executionId = getExecutionIdByAssignee(processId, uuid);
if ( null == executionId ) return;
getCommandExecutor().execute(new Command<Object>() {
public Object execute(CommandContext commandContext)
{
ExecutionEntity execution = Context
.getCommandContext()
.getExecutionEntityManager()
.findExecutionById(executionId);
execution.deleteCascade("User manual");
return null;
}
});
}
public static CommandExecutor getCommandExecutor()
{
ProcessEngine processEngine = ActivitiEngineServiceImpl.getInstance().getProcessEngine();
ProcessEngineConfigurationImpl processEngineConfiguration = ((ProcessEngineImpl) processEngine).getProcessEngineConfiguration();
return processEngineConfiguration.getCommandExecutorTxRequired();
}
public static ExecutionEntity getCurrentExecution(String processInstanceId)
{
RuntimeService runtimeService = ActivitiEngineServiceImpl.getInstance().getRuntimeService();
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
for ( Execution exec: executions )
{
ExecutionEntity ee = (ExecutionEntity)exec;
if ( ee.isActive() )
if ( ee.isConcurrent() )
return (ExecutionEntity)runtimeService.createExecutionQuery().executionId(ee.getParentId()).singleResult();
else
return ee;
}
return null;
}
public static String getExecutionIdByAssignee(String processInstanceId, String assignee)
{
return ActivitiEngineServiceImpl
.getInstance()
.getTaskService()
.createTaskQuery()
.processInstanceId(processInstanceId)
.taskAssignee(assignee)
.singleResult()
.getExecutionId();
}
public static List<ExecutionEntity> getCurrentChildConcurrentExecutions(String processInstanceId)
{
RuntimeService runtimeService = ActivitiEngineServiceImpl.getInstance().getRuntimeService();
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
List<ExecutionEntity> parallelExecutions = new ArrayList<ExecutionEntity>();
for ( Execution exec: executions )
{
ExecutionEntity ee = (ExecutionEntity)exec;
if ( ee.isActive() && ee.isConcurrent() )
parallelExecutions.add(ee);
}
return parallelExecutions;
}
public static ExecutionEntity getExecutionInitialized(final ExecutionEntity execution)
{
return getCommandExecutor().execute(new Command<ExecutionEntity>() {
public ExecutionEntity execute(CommandContext commandContext)
{
execution.initialize();
return execution;
}
});
}
public static TaskEntity getTaskByExecution(String executionId)
{
return (TaskEntity) ActivitiEngineServiceImpl.getInstance().getTaskService().createTaskQuery()
.executionId(executionId).singleResult();
}
public static ExecutionEntity getExecutionById(final String executionId)
{
return getCommandExecutor().execute(new Command<ExecutionEntity>() {
public ExecutionEntity execute(CommandContext commandContext)
{
return Context
.getCommandContext()
.getExecutionEntityManager()
.findExecutionById(executionId);
}
});
}
</java>
<java>
public static void addChildConcurrentExecutionToCurrentExecution(String processId, final String uuid, final String assigneeVarName)
{
final ExecutionEntity execution = ActivitiUtil.getCurrentExecution(processId);
getCommandExecutor().execute(new Command<Object>() {
public Object execute(CommandContext commandContext) {
Integer numInstances = (Integer) execution.getVariableLocal(NUMBER_OF_INSTANCES);
execution.setVariableLocal(NUMBER_OF_INSTANCES, numInstances + 1);
execution.setVariableLocal(NUMBER_OF_ACTIVE_INSTANCES, numInstances + 1);
ExecutionEntity newExecution = execution.createExecution();
newExecution.setActive(true);
newExecution.setConcurrent(true);
newExecution.setScope(false);
newExecution.setVariableLocal(LOOP_COUNTER, numInstances + 1);
newExecution.setVariableLocal(assigneeVarName, uuid);
// executeOriginalBehavior(newExecution, numInstances + 1);
// newExecution.setVariableLocal(behavior.getCollectionElementVariable(), "corebofs002080000ldurpmdvigvgcu0");
// ee.setActive(false);
newExecution.executeActivity(newExecution.getActivity());
return null;
}
});
}
public static void delecteConcurrentExecutionByAssignee(String processId, String uuid)
{
final String executionId = getExecutionIdByAssignee(processId, uuid);
if ( null == executionId ) return;
getCommandExecutor().execute(new Command<Object>() {
public Object execute(CommandContext commandContext)
{
ExecutionEntity execution = Context
.getCommandContext()
.getExecutionEntityManager()
.findExecutionById(executionId);
execution.deleteCascade("User manual");
return null;
}
});
}
public static CommandExecutor getCommandExecutor()
{
ProcessEngine processEngine = ActivitiEngineServiceImpl.getInstance().getProcessEngine();
ProcessEngineConfigurationImpl processEngineConfiguration = ((ProcessEngineImpl) processEngine).getProcessEngineConfiguration();
return processEngineConfiguration.getCommandExecutorTxRequired();
}
public static ExecutionEntity getCurrentExecution(String processInstanceId)
{
RuntimeService runtimeService = ActivitiEngineServiceImpl.getInstance().getRuntimeService();
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
for ( Execution exec: executions )
{
ExecutionEntity ee = (ExecutionEntity)exec;
if ( ee.isActive() )
if ( ee.isConcurrent() )
return (ExecutionEntity)runtimeService.createExecutionQuery().executionId(ee.getParentId()).singleResult();
else
return ee;
}
return null;
}
public static String getExecutionIdByAssignee(String processInstanceId, String assignee)
{
return ActivitiEngineServiceImpl
.getInstance()
.getTaskService()
.createTaskQuery()
.processInstanceId(processInstanceId)
.taskAssignee(assignee)
.singleResult()
.getExecutionId();
}
public static List<ExecutionEntity> getCurrentChildConcurrentExecutions(String processInstanceId)
{
RuntimeService runtimeService = ActivitiEngineServiceImpl.getInstance().getRuntimeService();
List<Execution> executions = runtimeService.createExecutionQuery().processInstanceId(processInstanceId).list();
List<ExecutionEntity> parallelExecutions = new ArrayList<ExecutionEntity>();
for ( Execution exec: executions )
{
ExecutionEntity ee = (ExecutionEntity)exec;
if ( ee.isActive() && ee.isConcurrent() )
parallelExecutions.add(ee);
}
return parallelExecutions;
}
public static ExecutionEntity getExecutionInitialized(final ExecutionEntity execution)
{
return getCommandExecutor().execute(new Command<ExecutionEntity>() {
public ExecutionEntity execute(CommandContext commandContext)
{
execution.initialize();
return execution;
}
});
}
public static TaskEntity getTaskByExecution(String executionId)
{
return (TaskEntity) ActivitiEngineServiceImpl.getInstance().getTaskService().createTaskQuery()
.executionId(executionId).singleResult();
}
public static ExecutionEntity getExecutionById(final String executionId)
{
return getCommandExecutor().execute(new Command<ExecutionEntity>() {
public ExecutionEntity execute(CommandContext commandContext)
{
return Context
.getCommandContext()
.getExecutionEntityManager()
.findExecutionById(executionId);
}
});
}
</java>
