<br> // start process instance<br> ProcessInstance pi = runtimeService.startProcessInstanceByKey("receiveTask");<br><br> // check that receive task has been reached<br> Execution execution = runtimeService.createExecutionQuery()<br> .processInstanceId(pi.getId())<br> .activityId("waitState1")<br> .singleResult();<br> assertNotNull(execution);<br> <br> // deploy new version of the process definition<br> org.activiti.engine.repository.Deployment deployment = repositoryService<br> .createDeployment()<br> .addClasspathResource(TEST_PROCESS)<br> .deploy();<br> assertEquals(2, repositoryService.createProcessDefinitionQuery().count());<br><br> // migrate process instance to new process definition version<br> CommandExecutor commandExecutor = processEngineConfiguration.getCommandExecutor();<br> commandExecutor.execute(new SetProcessDefinitionVersionCmd(pi.getId(), 2));<br><br> // signal process instance<br> runtimeService.signal(execution.getId());<br><br> // check that the instance now uses the new process definition version<br> ProcessDefinition newProcessDefinition = repositoryService<br> .createProcessDefinitionQuery()<br> .processDefinitionVersion(2)<br> .singleResult();<br> pi = runtimeService<br> .createProcessInstanceQuery()<br> .processInstanceId(pi.getId())<br> .singleResult();<br> assertEquals(newProcessDefinition.getId(), pi.getProcessDefinitionId());<br> <br> // check history<br> if (processEngineConfiguration.getHistoryLevel().isAtLeast(HistoryLevel.ACTIVITY)) {<br> HistoricProcessInstance historicPI = historyService<br> .createHistoricProcessInstanceQuery()<br> .processInstanceId(pi.getId())<br> .singleResult();<br> assertEquals(newProcessDefinition.getId(), historicPI.getProcessDefinitionId());<br> }<br><br> // undeploy "manually" deployed process definition<br> repositoryService.deleteDeployment(deployment.getId(), true);<br>
SetProcessDefinitionVersionCmd