Search in sources :

Example 1 with SignalThrowingEventListener

use of org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener in project Activiti by Activiti.

the class SignalThrowingEventListenerTest method testGlobalSignal.

/**
	 * Test if an engine-wide signal is thrown as response to a dispatched event.   
	 */
@Deployment(resources = { "org/activiti/engine/test/api/event/SignalThrowingEventListenerTest.globalSignal.bpmn20.xml", "org/activiti/engine/test/api/event/SignalThrowingEventListenerTest.globalSignalExternalProcess.bpmn20.xml" })
public void testGlobalSignal() throws Exception {
    SignalThrowingEventListener listener = null;
    try {
        listener = new SignalThrowingEventListener();
        listener.setSignalName("Signal");
        listener.setProcessInstanceScope(false);
        processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("globalSignalProcess");
        assertNotNull(processInstance);
        ProcessInstance externalProcess = runtimeService.startProcessInstanceByKey("globalSignalProcessExternal");
        assertNotNull(processInstance);
        // Make sure process is not ended yet by querying it again
        externalProcess = runtimeService.createProcessInstanceQuery().processInstanceId(externalProcess.getId()).singleResult();
        assertNotNull(externalProcess);
        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        assertNotNull(task);
        // Assign task to trigger signal
        taskService.setAssignee(task.getId(), "kermit");
        // Second process should have been signaled
        externalProcess = runtimeService.createProcessInstanceQuery().processInstanceId(externalProcess.getId()).singleResult();
        assertNull(externalProcess);
        // Task assignee should still be set
        task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        assertNotNull(task);
        assertEquals("kermit", task.getAssignee());
    } finally {
        processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
    }
}
Also used : Task(org.activiti.engine.task.Task) SignalThrowingEventListener(org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Deployment(org.activiti.engine.test.Deployment)

Example 2 with SignalThrowingEventListener

use of org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener in project Activiti by Activiti.

the class SignalThrowingEventListenerTest method testThrowSignalInterrupting.

@Deployment
public void testThrowSignalInterrupting() throws Exception {
    SignalThrowingEventListener listener = null;
    try {
        listener = new SignalThrowingEventListener();
        listener.setSignalName("Signal");
        listener.setProcessInstanceScope(true);
        processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testSignal");
        assertNotNull(processInstance);
        // Fetch the task and re-assig it to trigger the event-listener
        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        assertNotNull(task);
        taskService.setAssignee(task.getId(), "kermit");
        // Boundary-event should have been signalled and a new task should be available, the already
        // existing one is gone, since the cancelActivity='true'
        task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskDefinitionKey("subTask").singleResult();
        assertNull(task);
        Task boundaryTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskDefinitionKey("boundaryTask").singleResult();
        assertNotNull(boundaryTask);
    } finally {
        processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
    }
}
Also used : Task(org.activiti.engine.task.Task) SignalThrowingEventListener(org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Deployment(org.activiti.engine.test.Deployment)

Example 3 with SignalThrowingEventListener

use of org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener in project Activiti by Activiti.

the class DefaultListenerFactory method createEventThrowingEventListener.

@Override
public ActivitiEventListener createEventThrowingEventListener(EventListener eventListener) {
    BaseDelegateEventListener result = null;
    if (ImplementationType.IMPLEMENTATION_TYPE_THROW_SIGNAL_EVENT.equals(eventListener.getImplementationType())) {
        result = new SignalThrowingEventListener();
        ((SignalThrowingEventListener) result).setSignalName(eventListener.getImplementation());
        ((SignalThrowingEventListener) result).setProcessInstanceScope(true);
    } else if (ImplementationType.IMPLEMENTATION_TYPE_THROW_GLOBAL_SIGNAL_EVENT.equals(eventListener.getImplementationType())) {
        result = new SignalThrowingEventListener();
        ((SignalThrowingEventListener) result).setSignalName(eventListener.getImplementation());
        ((SignalThrowingEventListener) result).setProcessInstanceScope(false);
    } else if (ImplementationType.IMPLEMENTATION_TYPE_THROW_MESSAGE_EVENT.equals(eventListener.getImplementationType())) {
        result = new MessageThrowingEventListener();
        ((MessageThrowingEventListener) result).setMessageName(eventListener.getImplementation());
    } else if (ImplementationType.IMPLEMENTATION_TYPE_THROW_ERROR_EVENT.equals(eventListener.getImplementationType())) {
        result = new ErrorThrowingEventListener();
        ((ErrorThrowingEventListener) result).setErrorCode(eventListener.getImplementation());
    }
    if (result == null) {
        throw new ActivitiIllegalArgumentException("Cannot create an event-throwing event-listener, unknown implementation type: " + eventListener.getImplementationType());
    }
    result.setEntityClass(getEntityType(eventListener.getEntityType()));
    return result;
}
Also used : ErrorThrowingEventListener(org.activiti.engine.impl.bpmn.helper.ErrorThrowingEventListener) MessageThrowingEventListener(org.activiti.engine.impl.bpmn.helper.MessageThrowingEventListener) SignalThrowingEventListener(org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener) ActivitiIllegalArgumentException(org.activiti.engine.ActivitiIllegalArgumentException) BaseDelegateEventListener(org.activiti.engine.impl.bpmn.helper.BaseDelegateEventListener)

Example 4 with SignalThrowingEventListener

use of org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener in project Activiti by Activiti.

the class SignalThrowingEventListenerTest method testThrowSignalInRolledbackTransaction.

/**
	 * Test signal throwing when a job failed, signaling will happen in the rolled back transaction,
	 * not doing anything in the end...
	 */
@Deployment(resources = { "org/activiti/engine/test/api/event/SignalThrowingEventListenerTest.testThrowSignalInNewTransaction.bpmn20.xml" })
public void testThrowSignalInRolledbackTransaction() throws Exception {
    SignalThrowingEventListener listener = null;
    try {
        listener = new SignalThrowingEventListener();
        listener.setSignalName("Signal");
        listener.setProcessInstanceScope(true);
        processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.JOB_EXECUTION_FAILURE);
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testSignal");
        assertNotNull(processInstance);
        Job signalJob = managementService.createJobQuery().processInstanceId(processInstance.getId()).singleResult();
        try {
            managementService.executeJob(signalJob.getId());
            fail("Exception expected");
        } catch (ActivitiException ae) {
        // Ignore, expected exception
        }
        Job failedJob = managementService.createJobQuery().withException().processInstanceId(processInstance.getId()).singleResult();
        assertNotNull(failedJob);
        assertEquals(2, failedJob.getRetries());
        // Three retries should each have triggered dispatching of a retry-decrement event
        assertEquals(0, taskService.createTaskQuery().processInstanceId(processInstance.getId()).count());
        try {
            managementService.executeJob(failedJob.getId());
            fail("Exception expected");
        } catch (ActivitiException ae) {
            // Ignore, expected exception
            assertEquals(0, taskService.createTaskQuery().processInstanceId(processInstance.getId()).count());
        }
    } finally {
        processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
    }
}
Also used : ActivitiException(org.activiti.engine.ActivitiException) SignalThrowingEventListener(org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Job(org.activiti.engine.runtime.Job) Deployment(org.activiti.engine.test.Deployment)

Example 5 with SignalThrowingEventListener

use of org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener in project Activiti by Activiti.

the class SignalThrowingEventListenerTest method testThrowSignal.

@Deployment
public void testThrowSignal() throws Exception {
    SignalThrowingEventListener listener = null;
    try {
        listener = new SignalThrowingEventListener();
        listener.setSignalName("Signal");
        listener.setProcessInstanceScope(true);
        processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testSignal");
        assertNotNull(processInstance);
        // Fetch the task and re-assign it to trigger the event-listener
        Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).singleResult();
        assertNotNull(task);
        taskService.setAssignee(task.getId(), "kermit");
        // Boundary-event should have been signaled and a new task should be available, on top of the already
        // existing one, since the cancelActivity='false'
        task = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskDefinitionKey("subTask").singleResult();
        assertNotNull(task);
        assertEquals("kermit", task.getAssignee());
        Task boundaryTask = taskService.createTaskQuery().processInstanceId(processInstance.getId()).taskDefinitionKey("boundaryTask").singleResult();
        assertNotNull(boundaryTask);
    } finally {
        processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
    }
}
Also used : Task(org.activiti.engine.task.Task) SignalThrowingEventListener(org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener) ProcessInstance(org.activiti.engine.runtime.ProcessInstance) Deployment(org.activiti.engine.test.Deployment)

Aggregations

SignalThrowingEventListener (org.activiti.engine.impl.bpmn.helper.SignalThrowingEventListener)6 ProcessInstance (org.activiti.engine.runtime.ProcessInstance)5 Deployment (org.activiti.engine.test.Deployment)5 Task (org.activiti.engine.task.Task)3 ActivitiException (org.activiti.engine.ActivitiException)2 Job (org.activiti.engine.runtime.Job)2 ActivitiIllegalArgumentException (org.activiti.engine.ActivitiIllegalArgumentException)1 BaseDelegateEventListener (org.activiti.engine.impl.bpmn.helper.BaseDelegateEventListener)1 ErrorThrowingEventListener (org.activiti.engine.impl.bpmn.helper.ErrorThrowingEventListener)1 MessageThrowingEventListener (org.activiti.engine.impl.bpmn.helper.MessageThrowingEventListener)1