cancel
Showing results for 
Search instead for 
Did you mean: 

execution.take() creates a new activity instance

eransinger
Champ in-the-making
Champ in-the-making
Hello,
I have a flow with an external agent doing a job triggered by an activiti service task.
I want to be able to model the signals sent by this agent as exception or successe in the activiti.

i do not want to wrap my service task with boundery events, or proccess or sequence flows.

I tried implementing my own TaskActivityBehavior in a way that when the signal received is a failed one- i am calling execution.take()

Problem is each time it creates a new activity instance so retries are not decreasing and there is a loop.
Do you have any idea of how can i go back from the signal to the execution without creating a new activity?

Thanks in advance
———————————–

public void execute(ActivityExecution execution) throws Exception {
        try {
            if(ActivityLocalContext.getProperty('jobStatus').equals('fail')){
                throw new FailedException("job failed");
            }
            String jobId = submitAction(migrationRule, titleId, execution.getId());
            ActivityLocalContext.setProperty(execution, "jobStatus", "Running");
            ActivityLocalContext.setProperty(execution, "jobId", jobId);
        } catch (Exception e) {
            if(failedAndNoMoreRetries()){
                 ActivityLocalContext.setProperty(execution, "jobStatus", "New");
            }
            logger.error("ApplyMigrationPolicy->notifiy() failed: " + e.getMessage(), e);
            throw new FailedException("ApplyMigrationPolicy->notifiy() failed: " + e.getMessage());
        }
    }

    public void signal(ActivityExecution execution, String signalName, Object data) throws Exception {
        PvmTransition inTransition = execution.getActivity().getIncomingTransitions().get(0);
        if(signaledException()) {
            ActivityLocalContext.setProperty(execution, "jobStatus", "Failed");
                execution.take(inTransition);
        }else {
            ActivityLocalContext.setProperty(execution, "jobStatus", "complete");
            this.leave(execution);
        }
    }
1 REPLY 1

jbarrez
Star Contributor
Star Contributor
I'm not following what you are trying to do here, can you elaborate a bit?

execution.take() normally simply follows the transition you select.