protected ProcessDefinitionEntity findLatestProcessDefinition(ProcessDefinition processDefinition) { ProcessDefinitionEntity latestProcessDefinition = null; if (processDefinition.getTenantId() != null && !ProcessEngineConfiguration.NO_TENANT_ID.equals(processDefinition.getTenantId())) { latestProcessDefinition = getProcessDefinitionEntityManager() .findLatestProcessDefinitionByKeyAndTenantId(processDefinition.getKey(), processDefinition.getTenantId()); } else { latestProcessDefinition = getProcessDefinitionEntityManager() .findLatestProcessDefinitionByKey(processDefinition.getKey()); } return latestProcessDefinition; }
protected ProcessDefinition findNewLatestProcessDefinitionAfterRemovalOf(ProcessDefinition processDefinitionToBeRemoved) { // The latest process definition is not necessarily the one with 'version -1' (some versions could have been deleted) // Hence, the following logic ProcessDefinitionQueryImpl query = new ProcessDefinitionQueryImpl(); query.processDefinitionKey(processDefinitionToBeRemoved.getKey()); if (processDefinitionToBeRemoved.getTenantId() != null && !ProcessEngineConfiguration.NO_TENANT_ID.equals(processDefinitionToBeRemoved.getTenantId())) { query.processDefinitionTenantId(processDefinitionToBeRemoved.getTenantId()); } else { query.processDefinitionWithoutTenantId(); } query.processDefinitionVersionLowerThan(processDefinitionToBeRemoved.getVersion()); query.orderByProcessDefinitionVersion().desc(); List<ProcessDefinition> processDefinitions = getProcessDefinitionEntityManager().findProcessDefinitionsByQueryCriteria(query, new Page(0, 1)); if (processDefinitions != null && processDefinitions.size() > 0) { return processDefinitions.get(0); } return null; }
protected EventLogEntryEntity createEventLogEntry(String type, String processDefinitionId, String processInstanceId, String executionId, String taskId, Map<String, Object> data) { EventLogEntryEntity eventLogEntry = Context.getCommandContext().getEventLogEntryEntityManager().create(); eventLogEntry.setProcessDefinitionId(processDefinitionId); eventLogEntry.setProcessInstanceId(processInstanceId); eventLogEntry.setExecutionId(executionId); eventLogEntry.setTaskId(taskId); eventLogEntry.setType(type); eventLogEntry.setTimeStamp(timeStamp); putInMapIfNotNull(data, Fields.TIMESTAMP, timeStamp); // Current user String userId = Authentication.getAuthenticatedUserId(); if (userId != null) { eventLogEntry.setUserId(userId); putInMapIfNotNull(data, "userId", userId); } // Current tenant if (!data.containsKey(Fields.TENANT_ID) && processDefinitionId != null) { ProcessDefinition processDefinition = ProcessDefinitionUtil.getProcessDefinition(processDefinitionId); if (processDefinition != null && !ProcessEngineConfigurationImpl.NO_TENANT_ID.equals(processDefinition.getTenantId())) { putInMapIfNotNull(data, Fields.TENANT_ID, processDefinition.getTenantId()); } } try { eventLogEntry.setData(objectMapper.writeValueAsBytes(data)); } catch (Exception e) { logger.warn("Could not serialize event data. Data will not be written to the database", e); } return eventLogEntry; }
protected void restoreSignalStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition; SignalEventSubscriptionEntity subscriptionEntity = getEventSubscriptionEntityManager().createSignalEventSubscription(); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { subscriptionEntity.setEventName(signal.getName()); } else { subscriptionEntity.setEventName(signalEventDefinition.getSignalRef()); } subscriptionEntity.setActivityId(startEvent.getId()); subscriptionEntity.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { subscriptionEntity.setTenantId(previousProcessDefinition.getTenantId()); } getEventSubscriptionEntityManager().insert(subscriptionEntity); }
protected void restoreTimerStartEvent(ProcessDefinition previousProcessDefinition, StartEvent startEvent, EventDefinition eventDefinition) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition; TimerJobEntity timer = TimerUtil.createTimerEntityForTimerEventDefinition((TimerEventDefinition) eventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); if (timer != null) { TimerJobEntity timerJob = getJobManager().createTimerJob((TimerEventDefinition) eventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); timerJob.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { timerJob.setTenantId(previousProcessDefinition.getTenantId()); } getJobManager().scheduleTimerJob(timerJob); } }
protected void restoreMessageStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) { MessageEventDefinition messageEventDefinition = (MessageEventDefinition) eventDefinition; if (bpmnModel.containsMessageId(messageEventDefinition.getMessageRef())) { Message message = bpmnModel.getMessage(messageEventDefinition.getMessageRef()); messageEventDefinition.setMessageRef(message.getName()); } MessageEventSubscriptionEntity newSubscription = getEventSubscriptionEntityManager().createMessageEventSubscription(); newSubscription.setEventName(messageEventDefinition.getMessageRef()); newSubscription.setActivityId(startEvent.getId()); newSubscription.setConfiguration(previousProcessDefinition.getId()); newSubscription.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { newSubscription.setTenantId(previousProcessDefinition.getTenantId()); } getEventSubscriptionEntityManager().insert(newSubscription); }
public Void execute(CommandContext commandContext) { // check that the new process definition is just another version of the same // process definition that the process instance is using ExecutionEntityManager executionManager = commandContext.getExecutionEntityManager(); ExecutionEntity processInstance = executionManager.findById(processInstanceId); if (processInstance == null) { throw new ActivitiObjectNotFoundException("No process instance found for id = '" + processInstanceId + "'.", ProcessInstance.class); } else if (!processInstance.isProcessInstanceType()) { throw new ActivitiIllegalArgumentException("A process instance id is required, but the provided id " + "'" + processInstanceId + "' " + "points to a child execution of process instance " + "'" + processInstance.getProcessInstanceId() + "'. " + "Please invoke the " + getClass().getSimpleName() + " with a root execution id."); } DeploymentManager deploymentCache = commandContext.getProcessEngineConfiguration().getDeploymentManager(); ProcessDefinition currentProcessDefinition = deploymentCache.findDeployedProcessDefinitionById(processInstance.getProcessDefinitionId()); ProcessDefinition newProcessDefinition = deploymentCache .findDeployedProcessDefinitionByKeyAndVersionAndTenantId(currentProcessDefinition.getKey(), processDefinitionVersion, currentProcessDefinition.getTenantId()); validateAndSwitchVersionOfExecution(commandContext, processInstance, newProcessDefinition); // switch the historic process instance to the new process definition version commandContext.getHistoryManager().recordProcessDefinitionChange(processInstanceId, newProcessDefinition.getId()); // switch all sub-executions of the process instance to the new process definition version Collection<ExecutionEntity> childExecutions = executionManager.findChildExecutionsByProcessInstanceId(processInstanceId); for (ExecutionEntity executionEntity : childExecutions) { validateAndSwitchVersionOfExecution(commandContext, executionEntity, newProcessDefinition); } return null; }
.createProcessInstanceExecution(processDefinition, businessKey, processDefinition.getTenantId(), initiatorVariableName);
@Override public void onEvent(ActivitiEvent event) { if (isValidEvent(event)) { if (event.getProcessInstanceId() == null && processInstanceScope) { throw new ActivitiIllegalArgumentException("Cannot throw process-instance scoped signal, since the dispatched event is not part of an ongoing process instance"); } CommandContext commandContext = Context.getCommandContext(); EventSubscriptionEntityManager eventSubscriptionEntityManager = commandContext.getEventSubscriptionEntityManager(); List<SignalEventSubscriptionEntity> subscriptionEntities = null; if (processInstanceScope) { subscriptionEntities = eventSubscriptionEntityManager.findSignalEventSubscriptionsByProcessInstanceAndEventName(event.getProcessInstanceId(), signalName); } else { String tenantId = null; if (event.getProcessDefinitionId() != null) { ProcessDefinition processDefinition = commandContext.getProcessEngineConfiguration().getDeploymentManager().findDeployedProcessDefinitionById(event.getProcessDefinitionId()); tenantId = processDefinition.getTenantId(); } subscriptionEntities = eventSubscriptionEntityManager.findSignalEventSubscriptionsByEventName(signalName, tenantId); } for (SignalEventSubscriptionEntity signalEventSubscriptionEntity : subscriptionEntities) { eventSubscriptionEntityManager.eventReceived(signalEventSubscriptionEntity, null, false); } } }
protected ProcessDefinitionEntity findLatestProcessDefinition(ProcessDefinition processDefinition) { ProcessDefinitionEntity latestProcessDefinition = null; if (processDefinition.getTenantId() != null && !ProcessEngineConfiguration.NO_TENANT_ID.equals(processDefinition.getTenantId())) { latestProcessDefinition = getProcessDefinitionEntityManager() .findLatestProcessDefinitionByKeyAndTenantId(processDefinition.getKey(), processDefinition.getTenantId()); } else { latestProcessDefinition = getProcessDefinitionEntityManager() .findLatestProcessDefinitionByKey(processDefinition.getKey()); } return latestProcessDefinition; }
protected ProcessDefinition findNewLatestProcessDefinitionAfterRemovalOf(ProcessDefinition processDefinitionToBeRemoved) { // The latest process definition is not necessarily the one with 'version -1' (some versions could have been deleted) // Hence, the following logic ProcessDefinitionQueryImpl query = new ProcessDefinitionQueryImpl(); query.processDefinitionKey(processDefinitionToBeRemoved.getKey()); if (processDefinitionToBeRemoved.getTenantId() != null && !ProcessEngineConfiguration.NO_TENANT_ID.equals(processDefinitionToBeRemoved.getTenantId())) { query.processDefinitionTenantId(processDefinitionToBeRemoved.getTenantId()); } else { query.processDefinitionWithoutTenantId(); } query.processDefinitionVersionLowerThan(processDefinitionToBeRemoved.getVersion()); query.orderByProcessDefinitionVersion().desc(); List<ProcessDefinition> processDefinitions = getProcessDefinitionEntityManager().findProcessDefinitionsByQueryCriteria(query, new Page(0, 1)); if (processDefinitions != null && processDefinitions.size() > 0) { return processDefinitions.get(0); } return null; }
protected EventLogEntryEntity createEventLogEntry(String type, String processDefinitionId, String processInstanceId, String executionId, String taskId, Map<String, Object> data) { EventLogEntryEntity eventLogEntry = Context.getCommandContext().getEventLogEntryEntityManager().create(); eventLogEntry.setProcessDefinitionId(processDefinitionId); eventLogEntry.setProcessInstanceId(processInstanceId); eventLogEntry.setExecutionId(executionId); eventLogEntry.setTaskId(taskId); eventLogEntry.setType(type); eventLogEntry.setTimeStamp(timeStamp); putInMapIfNotNull(data, Fields.TIMESTAMP, timeStamp); // Current user String userId = Authentication.getAuthenticatedUserId(); if (userId != null) { eventLogEntry.setUserId(userId); putInMapIfNotNull(data, "userId", userId); } // Current tenant if (!data.containsKey(Fields.TENANT_ID) && processDefinitionId != null) { ProcessDefinition processDefinition = ProcessDefinitionUtil.getProcessDefinition(processDefinitionId); if (processDefinition != null && !ProcessEngineConfigurationImpl.NO_TENANT_ID.equals(processDefinition.getTenantId())) { putInMapIfNotNull(data, Fields.TENANT_ID, processDefinition.getTenantId()); } } try { eventLogEntry.setData(objectMapper.writeValueAsBytes(data)); } catch (Exception e) { logger.warn("Could not serialize event data. Data will not be written to the database", e); } return eventLogEntry; }
protected void restoreTimerStartEvent(ProcessDefinition previousProcessDefinition, StartEvent startEvent, EventDefinition eventDefinition) { TimerEventDefinition timerEventDefinition = (TimerEventDefinition) eventDefinition; TimerJobEntity timer = TimerUtil.createTimerEntityForTimerEventDefinition((TimerEventDefinition) eventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); if (timer != null) { TimerJobEntity timerJob = getJobManager().createTimerJob((TimerEventDefinition) eventDefinition, false, null, TimerStartEventJobHandler.TYPE, TimerEventHandler.createConfiguration(startEvent.getId(), timerEventDefinition.getEndDate(), timerEventDefinition.getCalendarName())); timerJob.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { timerJob.setTenantId(previousProcessDefinition.getTenantId()); } getJobManager().scheduleTimerJob(timerJob); } }
protected void restoreSignalStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) { SignalEventDefinition signalEventDefinition = (SignalEventDefinition) eventDefinition; SignalEventSubscriptionEntity subscriptionEntity = getEventSubscriptionEntityManager().createSignalEventSubscription(); Signal signal = bpmnModel.getSignal(signalEventDefinition.getSignalRef()); if (signal != null) { subscriptionEntity.setEventName(signal.getName()); } else { subscriptionEntity.setEventName(signalEventDefinition.getSignalRef()); } subscriptionEntity.setActivityId(startEvent.getId()); subscriptionEntity.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { subscriptionEntity.setTenantId(previousProcessDefinition.getTenantId()); } getEventSubscriptionEntityManager().insert(subscriptionEntity); }
protected void restoreMessageStartEvent(ProcessDefinition previousProcessDefinition, BpmnModel bpmnModel, StartEvent startEvent, EventDefinition eventDefinition) { MessageEventDefinition messageEventDefinition = (MessageEventDefinition) eventDefinition; if (bpmnModel.containsMessageId(messageEventDefinition.getMessageRef())) { Message message = bpmnModel.getMessage(messageEventDefinition.getMessageRef()); messageEventDefinition.setMessageRef(message.getName()); } MessageEventSubscriptionEntity newSubscription = getEventSubscriptionEntityManager().createMessageEventSubscription(); newSubscription.setEventName(messageEventDefinition.getMessageRef()); newSubscription.setActivityId(startEvent.getId()); newSubscription.setConfiguration(previousProcessDefinition.getId()); newSubscription.setProcessDefinitionId(previousProcessDefinition.getId()); if (previousProcessDefinition.getTenantId() != null) { newSubscription.setTenantId(previousProcessDefinition.getTenantId()); } getEventSubscriptionEntityManager().insert(newSubscription); }
public Void execute(CommandContext commandContext) { // check that the new process definition is just another version of the same // process definition that the process instance is using ExecutionEntityManager executionManager = commandContext.getExecutionEntityManager(); ExecutionEntity processInstance = executionManager.findById(processInstanceId); if (processInstance == null) { throw new ActivitiObjectNotFoundException("No process instance found for id = '" + processInstanceId + "'.", ProcessInstance.class); } else if (!processInstance.isProcessInstanceType()) { throw new ActivitiIllegalArgumentException("A process instance id is required, but the provided id " + "'" + processInstanceId + "' " + "points to a child execution of process instance " + "'" + processInstance.getProcessInstanceId() + "'. " + "Please invoke the " + getClass().getSimpleName() + " with a root execution id."); } DeploymentManager deploymentCache = commandContext.getProcessEngineConfiguration().getDeploymentManager(); ProcessDefinition currentProcessDefinition = deploymentCache.findDeployedProcessDefinitionById(processInstance.getProcessDefinitionId()); ProcessDefinition newProcessDefinition = deploymentCache .findDeployedProcessDefinitionByKeyAndVersionAndTenantId(currentProcessDefinition.getKey(), processDefinitionVersion, currentProcessDefinition.getTenantId()); validateAndSwitchVersionOfExecution(commandContext, processInstance, newProcessDefinition); // switch the historic process instance to the new process definition version commandContext.getHistoryManager().recordProcessDefinitionChange(processInstanceId, newProcessDefinition.getId()); // switch all sub-executions of the process instance to the new process definition version Collection<ExecutionEntity> childExecutions = executionManager.findChildExecutionsByProcessInstanceId(processInstanceId); for (ExecutionEntity executionEntity : childExecutions) { validateAndSwitchVersionOfExecution(commandContext, executionEntity, newProcessDefinition); } return null; }
return activiti5CompatibilityHandler.startProcessInstanceByMessage(messageName, variables, null, processDefinition.getTenantId());
@Override public void onEvent(ActivitiEvent event) { if (isValidEvent(event)) { if (event.getProcessInstanceId() == null && processInstanceScope) { throw new ActivitiIllegalArgumentException("Cannot throw process-instance scoped signal, since the dispatched event is not part of an ongoing process instance"); } CommandContext commandContext = Context.getCommandContext(); EventSubscriptionEntityManager eventSubscriptionEntityManager = commandContext.getEventSubscriptionEntityManager(); List<SignalEventSubscriptionEntity> subscriptionEntities = null; if (processInstanceScope) { subscriptionEntities = eventSubscriptionEntityManager.findSignalEventSubscriptionsByProcessInstanceAndEventName(event.getProcessInstanceId(), signalName); } else { String tenantId = null; if (event.getProcessDefinitionId() != null) { ProcessDefinition processDefinition = commandContext.getProcessEngineConfiguration().getDeploymentManager().findDeployedProcessDefinitionById(event.getProcessDefinitionId()); tenantId = processDefinition.getTenantId(); } subscriptionEntities = eventSubscriptionEntityManager.findSignalEventSubscriptionsByEventName(signalName, tenantId); } for (SignalEventSubscriptionEntity signalEventSubscriptionEntity : subscriptionEntities) { eventSubscriptionEntityManager.eventReceived(signalEventSubscriptionEntity, null, false); } } }
protected ProcessInstance createAndStartProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, Map<String, Object> variables, Map<String, Object> transientVariables, boolean startProcessInstance) { CommandContext commandContext = Context.getCommandContext(); // Todo: ideally, context should be passed here if (Activiti5Util.isActiviti5ProcessDefinition(commandContext, processDefinition)) { Activiti5CompatibilityHandler activiti5CompatibilityHandler = Activiti5Util.getActiviti5CompatibilityHandler(); return activiti5CompatibilityHandler.startProcessInstance(processDefinition.getKey(), processDefinition.getId(), variables, businessKey, processDefinition.getTenantId(), processInstanceName); } // Do not start process a process instance if the process definition is suspended if (ProcessDefinitionUtil.isProcessDefinitionSuspended(processDefinition.getId())) { throw new ActivitiException("Cannot start process instance. Process definition " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") is suspended"); } // Get model from cache Process process = ProcessDefinitionUtil.getProcess(processDefinition.getId()); if (process == null) { throw new ActivitiException("Cannot start process instance. Process model " + processDefinition.getName() + " (id = " + processDefinition.getId() + ") could not be found"); } FlowElement initialFlowElement = process.getInitialFlowElement(); if (initialFlowElement == null) { throw new ActivitiException("No start element found for process definition " + processDefinition.getId()); } return createAndStartProcessInstanceWithInitialFlowElement(processDefinition, businessKey, processInstanceName, initialFlowElement, process, variables, transientVariables, startProcessInstance); }
public ProcessDefinitionResponse createProcessDefinitionResponse(ProcessDefinition processDefinition, RestUrlBuilder urlBuilder) { ProcessDefinitionResponse response = new ProcessDefinitionResponse(); response.setUrl(urlBuilder.buildUrl(RestUrls.URL_PROCESS_DEFINITION, processDefinition.getId())); response.setId(processDefinition.getId()); response.setKey(processDefinition.getKey()); response.setVersion(processDefinition.getVersion()); response.setCategory(processDefinition.getCategory()); response.setName(processDefinition.getName()); response.setDescription(processDefinition.getDescription()); response.setSuspended(processDefinition.isSuspended()); response.setStartFormDefined(processDefinition.hasStartFormKey()); response.setGraphicalNotationDefined(processDefinition.hasGraphicalNotation()); response.setTenantId(processDefinition.getTenantId()); // Links to other resources response.setDeploymentId(processDefinition.getDeploymentId()); response.setDeploymentUrl(urlBuilder.buildUrl(RestUrls.URL_DEPLOYMENT, processDefinition.getDeploymentId())); response.setResource(urlBuilder.buildUrl(RestUrls.URL_DEPLOYMENT_RESOURCE, processDefinition.getDeploymentId(), processDefinition.getResourceName())); if (processDefinition.getDiagramResourceName() != null) { response.setDiagramResource(urlBuilder.buildUrl(RestUrls.URL_DEPLOYMENT_RESOURCE, processDefinition.getDeploymentId(), processDefinition.getDiagramResourceName())); } return response; }