Java源码示例:org.activiti.engine.delegate.event.ActivitiEventType
示例1
public void testEngineEventsTest() {
// Fetch the listener to check received events
TestActivitiEventListener listener = (TestActivitiEventListener) processEngineConfiguration.getBeans().get("eventListener");
assertNotNull(listener);
// Check create-event
assertEquals(1, listener.getEventsReceived().size());
assertEquals(ActivitiEventType.ENGINE_CREATED, listener.getEventsReceived().get(0).getType());
listener.clearEventsReceived();
// Check close-event
processEngine.close();
assertEquals(1, listener.getEventsReceived().size());
assertEquals(ActivitiEventType.ENGINE_CLOSED, listener.getEventsReceived().get(0).getType());
}
示例2
@Deployment
public void testActivitySignalBoundaryEventsOnSubProcess() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("signalOnSubProcess");
assertNotNull(processInstance);
Execution executionWithSignal = runtimeService.createExecutionQuery().activityId("userTaskInsideProcess").singleResult();
assertNotNull(executionWithSignal);
runtimeService.signalEventReceived("signalName");
assertEquals(1, listener.getEventsReceived().size());
// Next, an signal-event is expected, as a result of the message
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiActivityCancelledEvent);
ActivitiActivityCancelledEvent signalEvent = (ActivitiActivityCancelledEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ACTIVITY_CANCELLED, signalEvent.getType());
assertEquals("userTaskInsideProcess", signalEvent.getActivityId());
assertEquals(executionWithSignal.getId(), signalEvent.getExecutionId());
assertEquals(executionWithSignal.getProcessInstanceId(), signalEvent.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), signalEvent.getProcessDefinitionId());
assertNotNull(signalEvent.getCause());
assertTrue(signalEvent.getCause() instanceof SignalEventSubscriptionEntity);
SignalEventSubscriptionEntity cause = (SignalEventSubscriptionEntity) signalEvent.getCause();
assertEquals("signalName", cause.getEventName());
}
示例3
@Override
public void insert(CommentEntity commentEntity) {
checkHistoryEnabled();
insert(commentEntity, false);
Comment comment = (Comment) commentEntity;
if (getEventDispatcher().isEnabled()) {
// Forced to fetch the process-instance to associate the right
// process definition
String processDefinitionId = null;
String processInstanceId = comment.getProcessInstanceId();
if (comment.getProcessInstanceId() != null) {
ExecutionEntity process = getExecutionEntityManager().findById(comment.getProcessInstanceId());
if (process != null) {
processDefinitionId = process.getProcessDefinitionId();
}
}
getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, commentEntity, processInstanceId, processInstanceId, processDefinitionId));
getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_INITIALIZED, commentEntity, processInstanceId, processInstanceId, processDefinitionId));
}
}
示例4
@Override
public void execute(DelegateExecution execution) {
CommandContext commandContext = Context.getCommandContext();
ExecutionEntity executionEntity = (ExecutionEntity) execution;
String messageName = null;
if (StringUtils.isNotEmpty(messageEventDefinition.getMessageRef())) {
messageName = messageEventDefinition.getMessageRef();
} else {
Expression messageExpression = commandContext.getProcessEngineConfiguration().getExpressionManager()
.createExpression(messageEventDefinition.getMessageExpression());
messageName = messageExpression.getValue(execution).toString();
}
commandContext.getEventSubscriptionEntityManager().insertMessageEvent(messageName, executionEntity);
if (commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
commandContext.getProcessEngineConfiguration().getEventDispatcher()
.dispatchEvent(ActivitiEventBuilder.createMessageEvent(ActivitiEventType.ACTIVITY_MESSAGE_WAITING, executionEntity.getActivityId(), messageName,
null, executionEntity.getId(), executionEntity.getProcessInstanceId(), executionEntity.getProcessDefinitionId()));
}
}
示例5
public void insert() {
Context.getCommandContext()
.getDbSqlSession()
.insert(this);
// add link to execution
if (executionId != null) {
ExecutionEntity execution = Context.getCommandContext()
.getExecutionEntityManager()
.findExecutionById(executionId);
execution.addTimerJob(this);
// Inherit tenant if (if applicable)
if (execution.getTenantId() != null) {
setTenantId(execution.getTenantId());
}
}
if (Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, this));
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_INITIALIZED, this));
}
}
示例6
public void insert(PersistentObject persistentObject) {
checkHistoryEnabled();
super.insert(persistentObject);
Comment comment = (Comment) persistentObject;
if(getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
// Forced to fetch the process-instance to associate the right process definition
String processDefinitionId = null;
String processInstanceId = comment.getProcessInstanceId();
if(comment.getProcessInstanceId() != null) {
ExecutionEntity process = getProcessInstanceManager().findExecutionById(comment.getProcessInstanceId());
if(process != null) {
processDefinitionId = process.getProcessDefinitionId();
}
}
getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, persistentObject, processInstanceId, processInstanceId, processDefinitionId));
getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_INITIALIZED, persistentObject, processInstanceId, processInstanceId, processDefinitionId));
}
}
示例7
public void insert(ExecutionEntity execution) {
CommandContext commandContext = Context.getCommandContext();
DbSqlSession dbSqlSession = commandContext.getDbSqlSession();
dbSqlSession.insert(this);
// Inherit tenant id (if applicable)
if (execution != null && execution.getTenantId() != null) {
setTenantId(execution.getTenantId());
}
if(execution != null) {
execution.addTask(this);
}
commandContext.getHistoryManager().recordTaskCreated(this, execution);
if(commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, this));
commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_INITIALIZED, this));
}
}
示例8
protected void initializeDefaultHandlers() {
// Initialization of all event handlers
addEventHandler(ActivitiEventType.TASK_CREATED, TaskCreatedEventHandler.class);
addEventHandler(ActivitiEventType.TASK_COMPLETED, TaskCompletedEventHandler.class);
addEventHandler(ActivitiEventType.TASK_ASSIGNED, TaskAssignedEventHandler.class);
addEventHandler(ActivitiEventType.SEQUENCEFLOW_TAKEN, SequenceFlowTakenEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_COMPLETED, ActivityCompletedEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_STARTED, ActivityStartedEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_SIGNALED, ActivitySignaledEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_MESSAGE_RECEIVED, ActivityMessageEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_COMPENSATE, ActivityCompensatedEventHandler.class);
addEventHandler(ActivitiEventType.ACTIVITY_ERROR_RECEIVED, ActivityErrorReceivedEventHandler.class);
addEventHandler(ActivitiEventType.VARIABLE_CREATED, VariableCreatedEventHandler.class);
addEventHandler(ActivitiEventType.VARIABLE_DELETED, VariableDeletedEventHandler.class);
addEventHandler(ActivitiEventType.VARIABLE_UPDATED, VariableUpdatedEventHandler.class);
}
示例9
public static void propagateError(String errorCode, ActivityExecution execution) {
while (execution != null) {
String eventHandlerId = findLocalErrorEventHandler(execution, errorCode);
if (eventHandlerId != null) {
executeCatch(eventHandlerId, execution, errorCode);
break;
}
if (execution.isProcessInstanceType()) {
// dispatch process completed event
if (Context.getProcessEngineConfiguration() != null && Context.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT, execution));
}
}
execution = getSuperExecution(execution);
}
if (execution == null) {
throw new BpmnError(errorCode, "No catching boundary event found for error with errorCode '"
+ errorCode + "', neither in same process nor in parent process");
}
}
示例10
protected Object execute(CommandContext commandContext, ExecutionEntity execution) {
if (Activiti5Util.isActiviti5ProcessDefinitionId(commandContext, execution.getProcessDefinitionId())) {
Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler();
activiti5CompatibilityHandler.trigger(executionId, processVariables);
return null;
}
if (processVariables != null) {
execution.setVariables(processVariables);
}
if (transientVariables != null) {
execution.setTransientVariables(transientVariables);
}
Context.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createSignalEvent(ActivitiEventType.ACTIVITY_SIGNALED, execution.getCurrentActivityId(), null,
null, execution.getId(), execution.getProcessInstanceId(), execution.getProcessDefinitionId()));
Context.getAgenda().planTriggerExecutionOperation(execution);
return null;
}
示例11
protected void endAllHistoricActivities(String processInstanceId, String deleteReason) {
if (!Context.getProcessEngineConfiguration().getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {
return;
}
List<HistoricActivityInstanceEntity> historicActivityInstances = Context.getCommandContext().getHistoricActivityInstanceEntityManager()
.findUnfinishedHistoricActivityInstancesByProcessInstanceId(processInstanceId);
for (HistoricActivityInstanceEntity historicActivityInstance : historicActivityInstances) {
historicActivityInstance.markEnded(deleteReason);
// Fire event
ProcessEngineConfigurationImpl config = Context.getProcessEngineConfiguration();
if (config != null && config.getEventDispatcher().isEnabled()) {
config.getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_ACTIVITY_INSTANCE_ENDED, historicActivityInstance));
}
}
}
示例12
@Override
public void delete(VariableInstanceEntity entity, boolean fireDeleteEvent) {
super.delete(entity, false);
ByteArrayRef byteArrayRef = entity.getByteArrayRef();
if (byteArrayRef != null) {
byteArrayRef.delete();
}
entity.setDeleted(true);
if (entity.getExecutionId() != null && isExecutionRelatedEntityCountEnabledGlobally()) {
CountingExecutionEntity executionEntity = (CountingExecutionEntity) getExecutionEntityManager().findById(entity.getExecutionId());
if (isExecutionRelatedEntityCountEnabled(executionEntity)) {
executionEntity.setVariableCount(executionEntity.getVariableCount() - 1);
}
}
ActivitiEventDispatcher eventDispatcher = getEventDispatcher();
if (fireDeleteEvent && eventDispatcher.isEnabled()) {
eventDispatcher.dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_DELETED, entity));
eventDispatcher.dispatchEvent(createVariableDeleteEvent(entity));
}
}
示例13
/**
* Sets the version on each process definition entity, and the identifier. If the map contains
* an older version for a process definition, then the version is set to that older entity's
* version plus one; otherwise it is set to 1. Also dispatches an ENTITY_CREATED event.
*/
protected void setProcessDefinitionVersionsAndIds(ParsedDeployment parsedDeployment,
Map<ProcessDefinitionEntity, ProcessDefinitionEntity> mapNewToOldProcessDefinitions) {
CommandContext commandContext = Context.getCommandContext();
for (ProcessDefinitionEntity processDefinition : parsedDeployment.getAllProcessDefinitions()) {
int version = 1;
ProcessDefinitionEntity latest = mapNewToOldProcessDefinitions.get(processDefinition);
if (latest != null) {
version = latest.getVersion() + 1;
}
processDefinition.setVersion(version);
processDefinition.setId(getIdForNewProcessDefinition(processDefinition));
if (commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, processDefinition));
}
}
}
示例14
public void testJobCanceledAndTimerStartEventOnProcessRedeploy() throws Exception {
// GIVEN deploy process definition
String deployment1 = repositoryService.createDeployment().addClasspathResource("org/activiti/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml").deploy().getId();
checkEventCount(1, ActivitiEventType.TIMER_SCHEDULED);
listener.clearEventsReceived();
// WHEN
String deployment2 = repositoryService.createDeployment().addClasspathResource("org/activiti/engine/test/api/event/JobEventsTest.testTimerFiredForTimerStart.bpmn20.xml").deploy().getId();
// THEN
checkEventCount(1, ActivitiEventType.JOB_CANCELED);
checkEventCount(1, ActivitiEventType.TIMER_SCHEDULED);
listener.clearEventsReceived();
repositoryService.deleteDeployment(deployment2);
checkEventCount(1, ActivitiEventType.JOB_CANCELED);
checkEventCount(1, ActivitiEventType.TIMER_SCHEDULED);
listener.clearEventsReceived();
repositoryService.deleteDeployment(deployment1);
checkEventCount(1, ActivitiEventType.JOB_CANCELED);
}
示例15
/**
* Test events related to message events, called from the API.
*/
@Deployment
public void testActivityMessageEvents() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("messageProcess");
assertNotNull(processInstance);
Execution executionWithMessage = runtimeService.createExecutionQuery().activityId("shipOrder").singleResult();
assertNotNull(executionWithMessage);
runtimeService.messageEventReceived("messageName", executionWithMessage.getId());
assertEquals(2, listener.getEventsReceived().size());
// First, an ACTIVITY_MESSAGE_WAITING event is expected
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiMessageEvent);
ActivitiMessageEvent messageEvent = (ActivitiMessageEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ACTIVITY_MESSAGE_WAITING, messageEvent.getType());
assertEquals("shipOrder", messageEvent.getActivityId());
assertEquals(executionWithMessage.getId(), messageEvent.getExecutionId());
assertEquals(executionWithMessage.getProcessInstanceId(), messageEvent.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), messageEvent.getProcessDefinitionId());
assertEquals("messageName", messageEvent.getMessageName());
assertNull(messageEvent.getMessageData());
// Second, an ACTIVITY_MESSAGE_RECEIVED event is expected
assertTrue(listener.getEventsReceived().get(1) instanceof ActivitiMessageEvent);
messageEvent = (ActivitiMessageEvent) listener.getEventsReceived().get(1);
assertEquals(ActivitiEventType.ACTIVITY_MESSAGE_RECEIVED, messageEvent.getType());
assertEquals("shipOrder", messageEvent.getActivityId());
assertEquals(executionWithMessage.getId(), messageEvent.getExecutionId());
assertEquals(executionWithMessage.getProcessInstanceId(), messageEvent.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), messageEvent.getProcessDefinitionId());
assertEquals("messageName", messageEvent.getMessageName());
assertNull(messageEvent.getMessageData());
assertDatabaseEventPresent(ActivitiEventType.ACTIVITY_MESSAGE_RECEIVED);
}
示例16
public Object execute(CommandContext commandContext) {
AttachmentEntity attachment = commandContext
.getDbSqlSession()
.selectById(AttachmentEntity.class, attachmentId);
commandContext
.getDbSqlSession()
.delete(attachment);
if (attachment.getContentId() != null) {
commandContext
.getByteArrayEntityManager()
.deleteByteArrayById(attachment.getContentId());
}
if (attachment.getTaskId()!=null) {
commandContext.getHistoryManager()
.createAttachmentComment(attachment.getTaskId(), attachment.getProcessInstanceId(), attachment.getName(), false);
}
if(commandContext.getProcessEngineConfiguration().getEventDispatcher().isEnabled()) {
// Forced to fetch the process-instance to associate the right process definition
String processDefinitionId = null;
String processInstanceId = attachment.getProcessInstanceId();
if(attachment.getProcessInstanceId() != null) {
ExecutionEntity process = commandContext.getExecutionEntityManager().findExecutionById(processInstanceId);
if(process != null) {
processDefinitionId = process.getProcessDefinitionId();
}
}
commandContext.getProcessEngineConfiguration().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_DELETED, attachment, processInstanceId, processInstanceId, processDefinitionId));
}
return null;
}
示例17
public void close() {
ProcessEngines.unregister(this);
if (asyncExecutor != null && asyncExecutor.isActive()) {
asyncExecutor.shutdown();
}
commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), new SchemaOperationProcessEngineClose());
if (processEngineConfiguration.getProcessEngineLifecycleListener() != null) {
processEngineConfiguration.getProcessEngineLifecycleListener().onProcessEngineClosed(this);
}
processEngineConfiguration.getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createGlobalEvent(ActivitiEventType.ENGINE_CLOSED));
}
示例18
/**
* Test events related to message events, called from the API, targeting an event-subprocess.
*/
@Deployment
public void testActivityMessageEventsInEventSubprocess() throws Exception {
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("messageProcess");
assertNotNull(processInstance);
Execution executionWithMessage = runtimeService.createExecutionQuery().activityId("shipOrder").singleResult();
assertNotNull(executionWithMessage);
runtimeService.messageEventReceived("messageName", executionWithMessage.getId());
// Only a message-event should be present, no signal-event, since the
// event-subprocess is
// not signaled, but executed instead
assertEquals(1, listener.getEventsReceived().size());
// A message-event is expected
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiMessageEvent);
ActivitiMessageEvent messageEvent = (ActivitiMessageEvent) listener.getEventsReceived().get(0);
assertEquals(ActivitiEventType.ACTIVITY_MESSAGE_RECEIVED, messageEvent.getType());
assertEquals("catchMessage", messageEvent.getActivityId());
assertEquals(executionWithMessage.getId(), messageEvent.getExecutionId());
assertEquals(executionWithMessage.getProcessInstanceId(), messageEvent.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), messageEvent.getProcessDefinitionId());
assertEquals("messageName", messageEvent.getMessageName());
assertNull(messageEvent.getMessageData());
}
示例19
/**
* Test TIMER_FIRED event for timer start bpmn event.
*/
@Deployment
public void testTimerFiredForTimerStart() throws Exception {
Clock clock = processEngineConfiguration.getClock();
// there should be one job after process definition deployment
// Force timer to start the process
Calendar tomorrow = Calendar.getInstance();
tomorrow.add(Calendar.DAY_OF_YEAR, 1);
clock.setCurrentCalendar(tomorrow);
processEngineConfiguration.setClock(clock);
waitForJobExecutorToProcessAllJobs(2000, 200);
// Check Timer fired event has been dispatched
assertEquals(6, listener.getEventsReceived().size());
// timer entity created first
assertEquals(ActivitiEventType.ENTITY_CREATED, listener.getEventsReceived().get(0).getType());
// timer entity initialized
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, listener.getEventsReceived().get(1).getType());
// timer entity deleted
assertEquals(ActivitiEventType.ENTITY_DELETED, listener.getEventsReceived().get(2).getType());
// job fired
assertEquals(ActivitiEventType.TIMER_FIRED, listener.getEventsReceived().get(3).getType());
// job executed successfully
assertEquals(ActivitiEventType.JOB_EXECUTION_SUCCESS, listener.getEventsReceived().get(5).getType());
checkEventCount(0, ActivitiEventType.JOB_CANCELED);
processEngineConfiguration.resetClock();
}
示例20
protected static void dispatchStateChangeEvent(Object entity, SuspensionState state) {
if(Context.getCommandContext() != null && Context.getCommandContext().getEventDispatcher().isEnabled()) {
ActivitiEventType eventType = null;
if(state == SuspensionState.ACTIVE) {
eventType = ActivitiEventType.ENTITY_ACTIVATED;
} else {
eventType = ActivitiEventType.ENTITY_SUSPENDED;
}
Context.getCommandContext().getEventDispatcher().dispatchEvent(
ActivitiEventBuilder.createEntityEvent(eventType, entity));
}
}
示例21
public ProcessEngineImpl(ProcessEngineConfigurationImpl processEngineConfiguration) {
this.processEngineConfiguration = processEngineConfiguration;
this.name = processEngineConfiguration.getProcessEngineName();
this.repositoryService = processEngineConfiguration.getRepositoryService();
this.runtimeService = processEngineConfiguration.getRuntimeService();
this.historicDataService = processEngineConfiguration.getHistoryService();
this.identityService = processEngineConfiguration.getIdentityService();
this.taskService = processEngineConfiguration.getTaskService();
this.formService = processEngineConfiguration.getFormService();
this.managementService = processEngineConfiguration.getManagementService();
this.dynamicBpmnService = processEngineConfiguration.getDynamicBpmnService();
this.asyncExecutor = processEngineConfiguration.getAsyncExecutor();
this.commandExecutor = processEngineConfiguration.getCommandExecutor();
this.sessionFactories = processEngineConfiguration.getSessionFactories();
this.transactionContextFactory = processEngineConfiguration.getTransactionContextFactory();
this.formEngineRepositoryService = processEngineConfiguration.getFormEngineRepositoryService();
this.formEngineFormService = processEngineConfiguration.getFormEngineFormService();
if (processEngineConfiguration.isUsingRelationalDatabase() && processEngineConfiguration.getDatabaseSchemaUpdate() != null) {
commandExecutor.execute(processEngineConfiguration.getSchemaCommandConfig(), new SchemaOperationsProcessEngineBuild());
}
if (name == null) {
log.info("default activiti ProcessEngine created");
} else {
log.info("ProcessEngine {} created", name);
}
ProcessEngines.registerProcessEngine(this);
if (asyncExecutor != null && asyncExecutor.isAutoActivate()) {
asyncExecutor.start();
}
if (processEngineConfiguration.getProcessEngineLifecycleListener() != null) {
processEngineConfiguration.getProcessEngineLifecycleListener().onProcessEngineBuilt(this);
}
processEngineConfiguration.getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createGlobalEvent(ActivitiEventType.ENGINE_CREATED));
}
示例22
public ActivitiEntityEventImpl(Object entity, ActivitiEventType type) {
super(type);
if(entity == null) {
throw new ActivitiIllegalArgumentException("Entity cannot be null.");
}
this.entity = entity;
}
示例23
/**
* Test +-->Task1 Start-<> +-->Task1
*
* process on PROCESS_COMPLETED event
*/
@Deployment(resources = { "org/activiti/engine/test/api/event/ProcessInstanceEventsTest.parallelGatewayNoEndProcess.bpmn20.xml" })
public void testProcessCompleted_ParallelGatewayNoEnd() throws Exception {
this.runtimeService.startProcessInstanceByKey("noEndProcess");
assertEquals("ActivitiEventType.PROCESS_COMPLETED was expected 1 time.", 1, listener.filterEvents(ActivitiEventType.PROCESS_COMPLETED).size());
}
示例24
@Override
public void recordActivityStart(ExecutionEntity executionEntity) {
if (isHistoryLevelAtLeast(HistoryLevel.ACTIVITY)) {
if (executionEntity.getActivityId() != null && executionEntity.getCurrentFlowElement() != null) {
HistoricActivityInstanceEntity historicActivityInstanceEntity = null;
// Historic activity instance could have been created (but only in cache, never persisted)
// for example when submitting form properties
HistoricActivityInstanceEntity historicActivityInstanceEntityFromCache =
getHistoricActivityInstanceFromCache(executionEntity.getId(), executionEntity.getActivityId(), true);
if (historicActivityInstanceEntityFromCache != null) {
historicActivityInstanceEntity = historicActivityInstanceEntityFromCache;
} else {
historicActivityInstanceEntity = createHistoricActivityInstanceEntity(executionEntity);
}
// Fire event
ActivitiEventDispatcher activitiEventDispatcher = getEventDispatcher();
if (activitiEventDispatcher != null && activitiEventDispatcher.isEnabled()) {
activitiEventDispatcher.dispatchEvent(
ActivitiEventBuilder.createEntityEvent(ActivitiEventType.HISTORIC_ACTIVITY_INSTANCE_CREATED, historicActivityInstanceEntity));
}
}
}
}
示例25
public static ActivitiEvent createEvent(ActivitiEventType type, String executionId, String processInstanceId, String processDefinitionId) {
ActivitiEventImpl newEvent = new ActivitiEventImpl(type);
newEvent.setExecutionId(executionId);
newEvent.setProcessDefinitionId(processDefinitionId);
newEvent.setProcessInstanceId(processInstanceId);
return newEvent;
}
示例26
@Deployment
public void testThrowMessage() throws Exception {
MessageThrowingEventListener listener = null;
try {
listener = new MessageThrowingEventListener();
listener.setMessageName("Message");
processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testMessage");
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 messaged 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);
}
}
示例27
@Deployment(resources = {
"org/activiti5/engine/test/bpmn/event/error/BoundaryErrorEventTest.testCatchErrorOnCallActivity-parent.bpmn20.xml",
"org/activiti5/engine/test/bpmn/event/error/BoundaryErrorEventTest.subprocess.bpmn20.xml"
})
public void testProcessCompletedEvents_callActivityErrorEndEvent() throws Exception {
ProcessInstance pi = runtimeService.startProcessInstanceByKey("catchErrorOnCallActivity");
Task task = taskService.createTaskQuery().singleResult();
assertEquals("Task in subprocess", task.getName());
List<ProcessInstance> subProcesses = runtimeService.createProcessInstanceQuery().superProcessInstanceId(pi.getId()).list();
assertEquals(1, subProcesses.size());
// Completing the task will reach the end error event,
// which is caught on the call activity boundary
taskService.complete(task.getId());
List<ActivitiEvent> processCompletedEvents = listener.filterEvents(ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT);
assertEquals("There should be exactly one ActivitiEventType.PROCESS_COMPLETED_WITH_ERROR_END_EVENT event after the task complete.", 1, processCompletedEvents.size());
ActivitiEntityEvent processCompletedEvent = (ActivitiEntityEvent) processCompletedEvents.get(0);
assertEquals(subProcesses.get(0).getId(), processCompletedEvent.getExecutionId());
task = taskService.createTaskQuery().singleResult();
assertEquals("Escalated Task", task.getName());
// Completing the task will end the process instance
taskService.complete(task.getId());
assertProcessEnded(pi.getId());
}
示例28
@Deployment
public void testThrowError() throws Exception {
ErrorThrowingEventListener listener = null;
try {
listener = new ErrorThrowingEventListener();
processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testError");
assertNotNull(processInstance);
// Fetch the task and assign it. Should cause error-event to be dispatched
Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskDefinitionKey("userTask")
.singleResult();
assertNotNull(task);
taskService.setAssignee(task.getId(), "kermit");
// Error-handling should have been called, and "escalate" task should be available instead of original one
task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
.taskDefinitionKey("escalatedTask")
.singleResult();
assertNotNull(task);
} finally {
processEngineConfiguration.getEventDispatcher().removeEventListener(listener);
}
}
示例29
@Deployment
public void testThrowMessage() throws Exception {
MessageThrowingEventListener listener = null;
try {
listener = new MessageThrowingEventListener();
listener.setMessageName("Message");
processEngineConfiguration.getEventDispatcher().addEventListener(listener, ActivitiEventType.TASK_ASSIGNED);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("testMessage");
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 messaged 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);
}
}
示例30
/**
* @param type type of event
* @param entity the entity this event targets
* @param cause the cause of the event
* @return an {@link ActivitiEntityEvent} that is also instance of {@link ActivitiExceptionEvent}.
* In case an {@link ExecutionContext} is active, the execution related event fields will be populated.
*/
public static ActivitiEntityEvent createEntityExceptionEvent(ActivitiEventType type, Object entity, Throwable cause) {
ActivitiEntityExceptionEventImpl newEvent = new ActivitiEntityExceptionEventImpl(entity, type, cause);
// In case an execution-context is active, populate the event fields related to the execution
populateEventWithCurrentContext(newEvent);
return newEvent;
}