Ejemplo n.º 1
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testMigrateHistoricIncidentAddScope()
        public virtual void testMigrateHistoricIncidentAddScope()
        {
            // given
            ProcessDefinition sourceProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_USER_TASK_PROCESS);
            ProcessDefinition targetProcess = testHelper.deployAndGetDefinition(AsyncProcessModels.ASYNC_BEFORE_SUBPROCESS_USER_TASK_PROCESS);

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcess.Id, targetProcess.Id).mapActivities("userTask", "userTask").build();

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcess.Id);

            Job job = managementService.createJobQuery().singleResult();

            managementService.setJobRetries(job.Id, 0);

            // when
            runtimeService.newMigration(migrationPlan).processInstanceIds(Arrays.asList(processInstance.Id)).execute();

            // then
            ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id);

            HistoricIncident historicIncident = historyService.createHistoricIncidentQuery().singleResult();

            Assert.assertNotNull(historicIncident);
            Assert.assertEquals(activityInstance.getTransitionInstances("userTask")[0].ExecutionId, historicIncident.ExecutionId);
        }
Ejemplo n.º 2
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testExecuteExclusiveFollowUpJobInDifferentProcessInstance()
        public virtual void testExecuteExclusiveFollowUpJobInDifferentProcessInstance()
        {
            testHelper.deploy(CALL_ACTIVITY_PROCESS, ONE_TASK_PROCESS);

            // given
            // a process instance with a single job
            ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceByKey("callActivityProcess");

            jobExecutor.start();

            // and first job acquisition that acquires the job
            acquisitionThread.waitForSync();
            acquisitionThread.makeContinueAndWaitForSync();
            // and job is executed
            acquisitionThread.makeContinueAndWaitForSync();

            // then
            // the called instance has been created
            ProcessInstance calledInstance = engineRule.RuntimeService.createProcessInstanceQuery().superProcessInstanceId(processInstance.Id).singleResult();

            Assert.assertNotNull(calledInstance);

            // and there is a transition instance for the service task
            ActivityInstance activityInstance = engineRule.RuntimeService.getActivityInstance(calledInstance.Id);

            Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask").Length);

            // but the corresponding job is not locked
            JobEntity followUpJob = (JobEntity)engineRule.ManagementService.createJobQuery().singleResult();

            Assert.assertNotNull(followUpJob);
            Assert.assertNull(followUpJob.LockOwner);
            Assert.assertNull(followUpJob.LockExpirationTime);
        }
Ejemplo n.º 3
0
        public virtual void testDefaultCompensationHandlerHistoryActivityInstance()
        {
            // given a process instance
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("defaultHandlerProcess");

            // when throwing compensation
            Task beforeCompensationTask = taskService.createTaskQuery().singleResult();

            taskService.complete(beforeCompensationTask.Id);

            ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id);
            string           compensationHandlerActivityInstanceId = tree.getActivityInstances("compensationHandler")[0].Id;

            string subProcessActivityInstanceId = tree.getActivityInstances("subProcess")[0].Id;

            // .. and completing compensation
            Task compensationHandler = taskService.createTaskQuery().singleResult();

            taskService.complete(compensationHandler.Id);

            // then there is a historic activity instance for the compensation handler
            HistoricActivityInstance historicCompensationHandlerInstance = historyService.createHistoricActivityInstanceQuery().activityId("compensationHandler").singleResult();

            assertNotNull(historicCompensationHandlerInstance);
            assertEquals(compensationHandlerActivityInstanceId, historicCompensationHandlerInstance.Id);
            assertEquals(subProcessActivityInstanceId, historicCompensationHandlerInstance.ParentActivityInstanceId);
        }
Ejemplo n.º 4
0
        public virtual void testMigrateHistoryUserTaskInstance()
        {
            //given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(ProcessModels.ONE_TASK_PROCESS);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(ProcessModels.ONE_TASK_PROCESS).changeElementId("Process", "Process2").changeElementId("userTask", "userTask2"));

            MigrationPlan migrationPlan = runtimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask", "userTask2").build();

            ProcessInstance processInstance = runtimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            HistoricTaskInstanceQuery sourceHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(sourceProcessDefinition.Id);
            HistoricTaskInstanceQuery targetHistoryTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery().processDefinitionId(targetProcessDefinition.Id);

            ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id);

            //when
            assertEquals(1, sourceHistoryTaskInstanceQuery.count());
            assertEquals(0, targetHistoryTaskInstanceQuery.count());
            ProcessInstanceQuery sourceProcessInstanceQuery = runtimeService.createProcessInstanceQuery().processDefinitionId(sourceProcessDefinition.Id);

            runtimeService.newMigration(migrationPlan).processInstanceQuery(sourceProcessInstanceQuery).execute();

            //then
            assertEquals(0, sourceHistoryTaskInstanceQuery.count());
            assertEquals(1, targetHistoryTaskInstanceQuery.count());

            HistoricTaskInstance instance = targetHistoryTaskInstanceQuery.singleResult();

            assertEquals(targetProcessDefinition.Key, instance.ProcessDefinitionKey);
            assertEquals(targetProcessDefinition.Id, instance.ProcessDefinitionId);
            assertEquals("userTask2", instance.TaskDefinitionKey);
            assertEquals(activityInstance.getActivityInstances("userTask")[0].Id, instance.ActivityInstanceId);
        }
Ejemplo n.º 5
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCanOnlyTriggerCompensationInParentOfRemovedScope()
        public virtual void testCanOnlyTriggerCompensationInParentOfRemovedScope()
        {
            BpmnModelInstance sourceModel = ProcessModels.newModel().startEvent().subProcess("outerSubProcess").embeddedSubProcess().startEvent().userTask("userTask1").boundaryEvent("compensationBoundary").compensateEventDefinition().compensateEventDefinitionDone().moveToActivity("userTask1").subProcess("innerSubProcess").embeddedSubProcess().startEvent().userTask("userTask2").endEvent().subProcessDone().endEvent().subProcessDone().done();

            CompensationModels.addUserTaskCompensationHandler(sourceModel, "compensationBoundary", "compensationHandler");

            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(sourceModel);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL).endEventBuilder("subProcessEnd").compensateEventDefinition().waitForCompletion(true).compensateEventDefinitionDone().done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("innerSubProcess", "subProcess").mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("userTask1");
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // when
            testHelper.completeTask("userTask2");

            // then compensation is not triggered from inside the inner sub process
            // but only on process definition level
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id);

            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done());
        }
Ejemplo n.º 6
0
        public virtual void FAILING_testDefaultCompensationHandlerHistoryVariableInstance()
        {
            // given a process instance
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("defaultHandlerProcess");

            // when throwing compensation
            Task beforeCompensationTask = taskService.createTaskQuery().singleResult();

            taskService.complete(beforeCompensationTask.Id);

            ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id);
            string           compensationHandlerActivityInstanceId = tree.getActivityInstances("compensationHandler")[0].Id;

            // .. setting a variable via task service API
            Task compensationHandler = taskService.createTaskQuery().singleResult();

            runtimeService.setVariableLocal(compensationHandler.ExecutionId, "apiVariable", "someValue");

            // .. and completing compensation
            taskService.complete(compensationHandler.Id);

            // then there is a historic variable instance for the variable set by API
            HistoricVariableInstance historicVariableInstance = historyService.createHistoricVariableInstanceQuery().singleResult();

            assertNotNull(historicVariableInstance);
            assertEquals(compensationHandlerActivityInstanceId, historicVariableInstance.ActivityInstanceId);
        }
Ejemplo n.º 7
0
        public virtual void testInterruptingEscalationEventSubprocessInsideSubprocess()
        {
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("escalationProcess");
            // an escalation event is thrown from embedded subprocess and caught by interrupting event subprocess inside the subprocess

            ActivityInstance tree = runtimeService.getActivityInstance(processInstance.Id);

            assertThat(tree).hasStructure(describeActivityInstanceTree(processInstance.ProcessDefinitionId).beginScope("subProcess").beginScope("escalationEventSubprocess").activity("taskAfterCatchedEscalation").done());
        }
Ejemplo n.º 8
0
	  public virtual void testInitConcurrentTriggerCompensationActivityInstanceTree()
	  {
		// given active compensation
		ProcessInstance instance = rule.processInstance();

		// then the activity instance tree is meaningful
		ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);
		Assert.assertNotNull(activityInstance);
		assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("throwCompensate").activity("undoTask1").activity("undoTask2").done());
	  }
Ejemplo n.º 9
0
        public virtual string getInstanceIdForActivity(ActivityInstance activityInstance, string activityId)
        {
            ActivityInstance instance = getChildInstanceForActivity(activityInstance, activityId);

            if (instance != null)
            {
                return(instance.Id);
            }
            return(null);
        }
Ejemplo n.º 10
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Deployment public void testNonInterruptingEventInCombinationWithReceiveTaskInsideSubProcess()
        public virtual void testNonInterruptingEventInCombinationWithReceiveTaskInsideSubProcess()
        {
            // given
            ProcessInstance instance          = runtimeService.startProcessInstanceByKey("process");
            string          processInstanceId = instance.Id;

            // when (1)
            runtimeService.correlateMessage("firstMessage");

            // then (1)
            ActivityInstance activityInstance = runtimeService.getActivityInstance(instance.Id);

            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("subProcess").activity("task1").beginScope("innerSubProcess").activity("receiveTask").done());

            assertEquals(1, taskService.createTaskQuery().count());

            Task task1 = taskService.createTaskQuery().taskDefinitionKey("task1").singleResult();

            assertNotNull(task1);

            Execution task1Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult();

            assertFalse(processInstanceId.Equals(((ExecutionEntity)task1Execution).ParentId));

            // when (2)
            runtimeService.correlateMessage("secondMessage");

            // then (2)
            assertEquals(2, taskService.createTaskQuery().count());

            task1 = taskService.createTaskQuery().taskDefinitionKey("task1").singleResult();
            assertNotNull(task1);

            task1Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult();

            assertFalse(processInstanceId.Equals(((ExecutionEntity)task1Execution).ParentId));

            Task task2 = taskService.createTaskQuery().taskDefinitionKey("task2").singleResult();

            assertNotNull(task2);

            Execution task2Execution = runtimeService.createExecutionQuery().activityId("task1").singleResult();

            assertFalse(processInstanceId.Equals(((ExecutionEntity)task2Execution).ParentId));

            assertTrue(((ExecutionEntity)task1Execution).ParentId.Equals(((ExecutionEntity)task2Execution).ParentId));

            assertEquals(0, runtimeService.createEventSubscriptionQuery().count());

            taskService.complete(task1.Id);
            taskService.complete(task2.Id);

            assertProcessEnded(processInstanceId);
        }
Ejemplo n.º 11
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: protected org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity determineSourceInstanceExecution(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        protected internal override ExecutionEntity determineSourceInstanceExecution(CommandContext commandContext)
        {
            ActivityInstance   instance         = commandContext.runWithoutAuthorization(new CallableAnonymousInnerClass(this, commandContext));
            TransitionInstance instanceToCancel = findTransitionInstance(instance, transitionInstanceId);

            EnsureUtil.ensureNotNull(typeof(NotValidException), describeFailure("Transition instance '" + transitionInstanceId + "' does not exist"), "transitionInstance", instanceToCancel);

            ExecutionEntity transitionExecution = commandContext.ExecutionManager.findExecutionById(instanceToCancel.ExecutionId);

            return(transitionExecution);
        }
Ejemplo n.º 12
0
        public virtual void testInitAsyncBeforeSubprocessActivityInstanceTree()
        {
            // given
            ProcessInstance instance = rule.processInstance();

            // when
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);

            // then
            Assert.assertNotNull(activityInstance);
            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).transition("miSubProcess").done());
        }
Ejemplo n.º 13
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: @Override public void execute(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception
            public virtual void execute(DelegateExecution execution)
            {
                RuntimeService runtimeService = engine.RuntimeService;

                ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("process");

                // then the wait state is reached immediately after instantiation
                ActivityInstance activityInstance = runtimeService.getActivityInstance(processInstance.Id);

                ActivityInstance[] activityInstances = activityInstance.getActivityInstances("waitState");
                Assert.assertEquals(1, activityInstances.Length);
            }
Ejemplo n.º 14
0
        public virtual void testInitNestedActivityInstance()
        {
            // given
            ProcessInstance instance = rule.processInstance();

            // when
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);

            // then
            Assert.assertNotNull(activityInstance);
            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("subProcess").activity("task1").activity("task2").done());
        }
Ejemplo n.º 15
0
        public virtual void testActivityInstanceTree()
        {
            // given
            ProcessInstance instance = rule.processInstance();

            // when
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);

            // then
            Assert.assertNotNull(activityInstance);
            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("eventSubProcessTask").done());
        }
Ejemplo n.º 16
0
        public virtual void testInitNonInterruptingBoundaryEventActivityInstanceTree()
        {
            // given
            ProcessInstance instance = rule.processInstance();

            // when
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);

            // then
            Assert.assertNotNull(activityInstance);
            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("afterBoundaryTask").beginMiBody("miSubProcess").activity("subProcessTask").done());
        }
Ejemplo n.º 17
0
            public void execute(ProcessEngine engine, string scenarioName)
            {
                string processDefinitionId = engine.RepositoryService.createProcessDefinitionQuery().processDefinitionKey("oneTaskProcessInstanceModification_710").singleResult().Id;

                string processInstanceId = engine.RuntimeService.startProcessInstanceById(processDefinitionId, "ProcessInstanceModificationScenario").Id;

                engine.RuntimeService.createModification(processDefinitionId).processInstanceIds(processInstanceId).startBeforeActivity("userTask2").execute();

                ActivityInstance tree = engine.RuntimeService.getActivityInstance(processInstanceId);

                engine.RuntimeService.createProcessInstanceModification(processInstanceId).cancelActivityInstance(tree.getActivityInstances("userTask1")[0].Id).cancelTransitionInstance(tree.getTransitionInstances("userTask2")[0].Id).executeAsync();
            }
Ejemplo n.º 18
0
        public virtual void testInitThrowCompensateActivityInstanceTree()
        {
            // given
            ProcessInstance processInstance = rule.processInstance();

            // when
            ActivityInstance tree = rule.RuntimeService.getActivityInstance(processInstance.Id);

            // then
            Assert.assertNotNull(tree);
            assertThat(tree).hasStructure(describeActivityInstanceTree(processInstance.ProcessDefinitionId).activity("outerTask").beginScope("throwCompensate").activity("undoTask").done());
        }
Ejemplo n.º 19
0
	  public virtual void testInitActivityInstanceTree()
	  {
		// given
		ProcessInstance instance = rule.processInstance();

		// when compensation is thrown
		Task beforeCompensationTask = rule.taskQuery().singleResult();
		rule.TaskService.complete(beforeCompensationTask.Id);

		// then the activity instance tree is meaningful
		ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);
		Assert.assertNotNull(activityInstance);
		assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).activity("throwCompensate").beginScope("subProcess").activity("undoTask").done());
	  }
Ejemplo n.º 20
0
        public virtual void testInitThrowErrorActivityInstanceTree()
        {
            // given
            ProcessInstance instance = rule.processInstance();
            Task            innerEventSubProcessTask = rule.taskQuery().taskDefinitionKey("innerEventSubProcessTask").singleResult();

            // when
            rule.RuntimeService.setVariable(instance.Id, ThrowBpmnErrorDelegate.ERROR_INDICATOR_VARIABLE, true);
            rule.TaskService.complete(innerEventSubProcessTask.Id);
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(instance.Id);

            // then
            Assert.assertNotNull(activityInstance);
            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(instance.ProcessDefinitionId).beginScope("outerEventSubProcess").activity("outerEventSubProcessTask").done());
        }
Ejemplo n.º 21
0
        public static ActivityInstanceDto fromActivityInstance(ActivityInstance instance)
        {
            ActivityInstanceDto result = new ActivityInstanceDto();

            result.id = instance.Id;
            result.parentActivityInstanceId = instance.ParentActivityInstanceId;
            result.activityId               = instance.ActivityId;
            result.activityType             = instance.ActivityType;
            result.processInstanceId        = instance.ProcessInstanceId;
            result.processDefinitionId      = instance.ProcessDefinitionId;
            result.childActivityInstances   = fromListOfActivityInstance(instance.ChildActivityInstances);
            result.childTransitionInstances = TransitionInstanceDto.fromListOfTransitionInstance(instance.ChildTransitionInstances);
            result.executionIds             = instance.ExecutionIds;
            result.activityName             = instance.ActivityName;
            return(result);
        }
Ejemplo n.º 22
0
//JAVA TO C# CONVERTER WARNING: 'final' parameters are not available in .NET:
//ORIGINAL LINE: protected org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity determineSourceInstanceExecution(final org.camunda.bpm.engine.impl.interceptor.CommandContext commandContext)
        protected internal override ExecutionEntity determineSourceInstanceExecution(CommandContext commandContext)
        {
            ExecutionEntity processInstance = commandContext.ExecutionManager.findExecutionById(processInstanceId);

            // rebuild the mapping because the execution tree changes with every iteration
            ActivityExecutionTreeMapping mapping = new ActivityExecutionTreeMapping(commandContext, processInstanceId);

            ActivityInstance instance = commandContext.runWithoutAuthorization(new CallableAnonymousInnerClass(this, commandContext));

            ActivityInstance instanceToCancel = findActivityInstance(instance, activityInstanceId);

            EnsureUtil.ensureNotNull(typeof(NotValidException), describeFailure("Activity instance '" + activityInstanceId + "' does not exist"), "activityInstance", instanceToCancel);
            ExecutionEntity scopeExecution = getScopeExecutionForActivityInstance(processInstance, mapping, instanceToCancel);

            return(scopeExecution);
        }
Ejemplo n.º 23
0
        public virtual ActivityInstance getChildInstanceForActivity(ActivityInstance activityInstance, string activityId)
        {
            if (activityId.Equals(activityInstance.ActivityId))
            {
                return(activityInstance);
            }

            foreach (ActivityInstance childInstance in activityInstance.ChildActivityInstances)
            {
                ActivityInstance instance = getChildInstanceForActivity(childInstance, activityId);
                if (instance != null)
                {
                    return(instance);
                }
            }

            return(null);
        }
Ejemplo n.º 24
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void modifyAProcessInstanceWithLocalVariableCreation()
        public virtual void modifyAProcessInstanceWithLocalVariableCreation()
        {
            // given a process that sets a local variable when entering the user task
            BpmnModelInstance instance = Bpmn.createExecutableProcess("Process").startEvent().userTask("userTask").camundaTaskListenerClass("create", "org.camunda.bpm.engine.test.api.runtime.util.CreateLocalVariableEventListener").endEvent().done();

            testHelper.deployAndGetDefinition(instance);
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("Process");

            ActivityInstance updatedTree = runtimeService.getActivityInstance(processInstance.Id);

            // when I start another activity and delete the old one
            runtimeService.createProcessInstanceModification(processInstance.Id).startBeforeActivity("userTask").cancelActivityInstance(updatedTree.getActivityInstances("userTask")[0].Id).execute(false, false);

            // then migration was successful and I can finish the process
            Task task = taskService.createTaskQuery().singleResult();

            taskService.complete(task.Id);
            testHelper.assertProcessEnded(processInstance.Id);
        }
Ejemplo n.º 25
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testExecuteExclusiveFollowUpJobInSameProcessInstance()
        public virtual void testExecuteExclusiveFollowUpJobInSameProcessInstance()
        {
            testHelper.deploy(TWO_TASKS_PROCESS);

            // given
            // a process instance with a single job
            ProcessInstance processInstance = engineRule.RuntimeService.startProcessInstanceByKey("process");

            jobExecutor.start();

            // and first job acquisition that acquires the job
            acquisitionThread.waitForSync();
            acquisitionThread.makeContinueAndWaitForSync();
            // and first job execution
            acquisitionThread.makeContinue();

            // waiting inside delegate
            executionThread.waitForSync();

            // completing delegate
            executionThread.makeContinueAndWaitForSync();

            // then
            // the follow-up job should be executed right away
            // i.e., there is a transition instance for the second service task
            ActivityInstance activityInstance = engineRule.RuntimeService.getActivityInstance(processInstance.Id);

            Assert.assertEquals(1, activityInstance.getTransitionInstances("serviceTask2").Length);

            // and the corresponding job is locked
            JobEntity followUpJob = (JobEntity)engineRule.ManagementService.createJobQuery().singleResult();

            Assert.assertNotNull(followUpJob);
            Assert.assertNotNull(followUpJob.LockOwner);
            Assert.assertNotNull(followUpJob.LockExpirationTime);

            // and the job can be completed successfully such that the process instance ends
            executionThread.makeContinue();
            acquisitionThread.waitForSync();

            // and the process instance has finished
            testHelper.assertProcessEnded(processInstance.Id);
        }
Ejemplo n.º 26
0
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCase2AssertActivityInstance()
        public virtual void testCase2AssertActivityInstance()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.COMPENSATION_ONE_TASK_SUBPROCESS_MODEL);

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("userTask1");
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // when throwing compensation
            testHelper.completeTask("userTask2");

            // then the activity instance tree is correct
            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id);

            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done());
        }
Ejemplo n.º 27
0
        /// <summary>
        /// The guarantee given by the API is: Compensation can be triggered in the scope that it could be triggered before
        ///   migration. Thus, it should not be possible to trigger compensation from the new sub process instance but only from the
        ///   parent scope, i.e. the process definition instance
        /// </summary>
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void testCase1CannotTriggerCompensationInNewScope()
        public virtual void testCase1CannotTriggerCompensationInNewScope()
        {
            // given
            ProcessDefinition sourceProcessDefinition = testHelper.deployAndGetDefinition(CompensationModels.ONE_COMPENSATION_TASK_MODEL);
            ProcessDefinition targetProcessDefinition = testHelper.deployAndGetDefinition(modify(CompensationModels.COMPENSATION_TWO_TASKS_SUBPROCESS_MODEL).endEventBuilder("subProcessEnd").compensateEventDefinition().waitForCompletion(true).compensateEventDefinitionDone().done());

            MigrationPlan migrationPlan = rule.RuntimeService.createMigrationPlan(sourceProcessDefinition.Id, targetProcessDefinition.Id).mapActivities("userTask2", "userTask2").mapActivities("compensationBoundary", "compensationBoundary").build();

            ProcessInstance processInstance = rule.RuntimeService.startProcessInstanceById(sourceProcessDefinition.Id);

            testHelper.completeTask("userTask1");

            // when
            testHelper.migrateProcessInstance(migrationPlan, processInstance);

            // then compensation is only caught outside of the subProcess
            testHelper.completeTask("userTask2");

            ActivityInstance activityInstance = rule.RuntimeService.getActivityInstance(processInstance.Id);

            assertThat(activityInstance).hasStructure(describeActivityInstanceTree(targetProcessDefinition.Id).activity("compensationEvent").beginScope("subProcess").activity("compensationHandler").done());
        }
Ejemplo n.º 28
0
        public virtual void testInitThrowCompensateCancelEventSubProcess()
        {
            // given
            ProcessInstance processInstance = rule.processInstance();
            Task            outerTask       = rule.taskQuery().taskDefinitionKey("outerTask").singleResult();
            Task            undoTask        = rule.taskQuery().taskDefinitionKey("undoTask").singleResult();

            // when compensation is finished
            rule.TaskService.complete(undoTask.Id);

            Task afterCompensateTask = rule.taskQuery().taskDefinitionKey("afterCompensate").singleResult();

            Assert.assertNotNull(afterCompensateTask);

            // then the event sub process instance can be cancelled with modification
            ActivityInstance tree = rule.RuntimeService.getActivityInstance(processInstance.Id);
            ActivityInstance afterCompensateInstance = tree.getActivityInstances("afterCompensate")[0];

            rule.RuntimeService.createProcessInstanceModification(processInstance.Id).cancelActivityInstance(afterCompensateInstance.Id).execute();

            // and the remaining outerTask can be completed successfully
            rule.TaskService.complete(outerTask.Id);
            rule.assertScenarioEnded();
        }
Ejemplo n.º 29
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void execute(org.camunda.bpm.engine.delegate.DelegateExecution execution) throws Exception
        public virtual void execute(DelegateExecution execution)
        {
            activityInstance = execution.ProcessEngineServices.RuntimeService.getActivityInstance(execution.ProcessInstanceId);
        }