protected internal virtual void deployOnTwoConcurrentThreads(IDeploymentBuilder deploymentOne, IDeploymentBuilder deploymentTwo) { Assert.That(deploymentOne, Is.Not.EqualTo(deploymentTwo)); // STEP 1: bring two threads to a point where they have // 1) started a new transaction // 2) are ready to deploy ThreadControl thread1 = ExecuteControllableCommand(new ControllableDeployCommand(deploymentOne)); thread1.WaitForSync(); ThreadControl thread2 = ExecuteControllableCommand(new ControllableDeployCommand(deploymentTwo)); thread2.WaitForSync(); // STEP 2: make Thread 1 proceed and wait until it has deployed but not yet committed // -> will still hold the exclusive lock thread1.MakeContinue(); thread1.WaitForSync(); // STEP 3: make Thread 2 continue // -> it will attempt to acquire the exclusive lock and block on the lock thread2.MakeContinue(); // wait for 2 seconds (Thread 2 is blocked on the lock) Thread.Sleep(2000); // STEP 4: allow Thread 1 to terminate // -> Thread 1 will commit and release the lock thread1.WaitUntilDone(); // STEP 5: wait for Thread 2 to terminate thread2.WaitForSync(); thread2.WaitUntilDone(); }
protected internal virtual string DeploymentWithBuilder(IDeploymentBuilder builder) { DeploymentId = builder.Deploy().Id; DeploymentIds.Add(DeploymentId); return(DeploymentId); }
protected internal virtual IDeployment deploy(IBpmnModelInstance modelInstance) { IDeploymentBuilder deploymentbuilder = processEngineConfiguration.RepositoryService.CreateDeployment(); deploymentbuilder.AddModelInstance("process0.bpmn", modelInstance); return(testRule.Deploy(deploymentbuilder)); }
public Task <Deployment> Deploy([FromBody] ProcessDefinitionDeployer deployer) { IDeploymentBuilder deployment = this.repositoryService.CreateDeployment(); if (deployer.DisableSchemaValidation) { deployment.DisableSchemaValidation(); } if (deployer.EnableDuplicateFiltering) { deployment.EnableDuplicateFiltering(); } string resourceName = deployer.Name.EndsWith("bpmn", StringComparison.OrdinalIgnoreCase) ? deployer.Name : $"{deployer.Name}.bpmn"; IDeployment dep = deployment.Name(deployer.Name) .Category(deployer.Category) .Key(deployer.Key) .TenantId(deployer.TenantId) .BusinessKey(deployer.BusinessKey) .BusinessPath(deployer.BusinessPath) .StartForm(deployer.StartForm, deployer.BpmnXML) .AddString(resourceName, deployer.BpmnXML) .Deploy(); return(Task.FromResult(deploymentConverter.From(dep))); }
public Task <Deployment> Save(ProcessDefinitionDeployer deployer) { try { IDeploymentBuilder deployment = this.repositoryService .CreateDeployment() .DisableDuplicateStartForm(); deployment.DisableBpmnValidation(); deployment.DisableSchemaValidation(); deployment.EnableDuplicateFiltering(); string resourceName = deployer.Name.EndsWith("bpmn", StringComparison.OrdinalIgnoreCase) ? deployer.Name : $"{deployer.Name}.bpmn"; IDeployment dep = deployment.Name(deployer.Name) .Category(deployer.Category) .Key(deployer.Key) .TenantId(deployer.TenantId) .BusinessKey(deployer.BusinessKey) .BusinessPath(deployer.BusinessPath) .StartForm(deployer.StartForm, deployer.BpmnXML) .AddString(resourceName, deployer.BpmnXML) .Save(); return(Task.FromResult <Deployment>(deploymentConverter.From(dep))); } catch (StartFormUniqueException ex) { throw new Http400Exception(new Http400 { Code = "startFormUniqueException", Message = ex.Message }, ex); } }
public void 执行事务子流程(string bpmnFile) { string xml = IntegrationTestContext.ReadBpmn(bpmnFile); ICommandExecutor commandExecutor = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutor; Authentication.AuthenticatedUser = new InProcessWorkflowEngine.TestUser() { Id = "评审员", FullName = "评审员", TenantId = context.TenantId }; IDeploymentBuilder builder = processEngine.RepositoryService.CreateDeployment() .Name(Path.GetFileNameWithoutExtension(bpmnFile)) .TenantId(context.TenantId) .AddString(bpmnFile, xml) .EnableDuplicateFiltering() .TenantId(context.TenantId); IDeployment deploy = commandExecutor.Execute(new DeployCmd(builder)); IProcessDefinition definition = processEngine.RepositoryService.CreateProcessDefinitionQuery() .SetDeploymentId(deploy.Id) .SetProcessDefinitionTenantId(context.TenantId) .SetLatestVersion() .SingleResult(); IProcessInstance processInstance = commandExecutor.Execute(new StartProcessInstanceCmd(definition.Id, null)); IList <ITask> tasks = processEngine.TaskService.GetMyTasks("评审员"); commandExecutor.Execute(new CompleteTaskCmd(tasks[0].Id, null)); }
public virtual IDeploymentWithDefinitions Deploy(IDeploymentBuilder deploymentBuilder) { IDeploymentWithDefinitions deployment = deploymentBuilder.DeployWithResult(); engineRule.ManageDeployment(deployment); return(deployment); }
public void 获取已完成流程节点(string bpmnFile) { string xml = IntegrationTestContext.ReadBpmn(bpmnFile); ICommandExecutor commandExecutor = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutor; Authentication.AuthenticatedUser = new InProcessWorkflowEngine.TestUser() { Id = "评审员", FullName = "评审员", TenantId = context.TenantId }; IDeploymentBuilder builder = processEngine.RepositoryService.CreateDeployment() .Name(Path.GetFileNameWithoutExtension(bpmnFile)) .TenantId(context.TenantId) .AddString(bpmnFile, xml) .EnableDuplicateFiltering() .TenantId(context.TenantId); IDeployment deploy = commandExecutor.Execute(new DeployCmd(builder)); IProcessDefinition definition = processEngine.RepositoryService.CreateProcessDefinitionQuery() .SetDeploymentId(deploy.Id) .SetProcessDefinitionTenantId(context.TenantId) .SetLatestVersion() .SingleResult(); BpmnModel model = commandExecutor.Execute(new GetBpmnModelCmd(definition.Id)); IProcessInstance processInstance = commandExecutor.Execute(new StartProcessInstanceCmd(definition.Id, null)); IList <ITask> tasks = processEngine.TaskService.GetMyTasks("用户1"); ITaskEntity task = tasks[0] as ITaskEntity; IExecutionEntity execution = commandExecutor.Execute(new GetExecutionByIdCmd(task.ExecutionId)); processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); var list = commandExecutor.Execute(new GetCompletedTaskModelsCmd(task.ProcessInstanceId, true)); Assert.Contains(model.MainProcess.FlowElements, x => list.Any(y => x.Id == y.Id)); tasks = processEngine.TaskService.GetMyTasks("用户2"); task = tasks[0] as ITaskEntity; processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); list = commandExecutor.Execute(new GetCompletedTaskModelsCmd(task.ProcessInstanceId, true)); Assert.Contains(model.MainProcess.FlowElements, x => list.Any(y => x.Id == y.Id)); }
protected internal virtual string Deployment(IDeploymentBuilder deploymentBuilder, params string[] resources) { for (var i = 0; i < resources.Length; i++) { deploymentBuilder.AddClasspathResource(resources[i]); } return(DeploymentWithBuilder(deploymentBuilder)); }
public void setUp() { IDeploymentBuilder deploymentbuilder = repositoryService.CreateDeployment(); IBpmnModelInstance defaultModel = DefaultExternalTaskModelBuilder.CreateDefaultExternalTaskModel().Build(); IBpmnModelInstance modifiedModel = DefaultExternalTaskModelBuilder.CreateDefaultExternalTaskModel().ProcessKey(ANOTHER_PROCESS_KEY).Build(); deploymentId = Deployment(deploymentbuilder, defaultModel, modifiedModel); base.setUp(); }
protected internal virtual string Deployment(IDeploymentBuilder deploymentBuilder, params IBpmnModelInstance[] bpmnModelInstances) { for (var i = 0; i < bpmnModelInstances.Length; i++) { var bpmnModelInstance = bpmnModelInstances[i]; deploymentBuilder.AddModelInstance("testProcess-" + i + ".bpmn", bpmnModelInstance); } return(DeploymentWithBuilder(deploymentBuilder)); }
protected internal virtual IDeployment deploy(IList <IBpmnModelInstance> modelInstances) { IDeploymentBuilder deploymentbuilder = processEngineConfiguration.RepositoryService.CreateDeployment(); for (int i = 0; i < modelInstances.Count; i++) { deploymentbuilder.AddModelInstance("process" + i + ".bpmn", modelInstances[i]); } return(testRule.Deploy(deploymentbuilder)); }
public Task <Deployment> Deploy([FromBody] ProcessDefinitionDeployer deployer) { try { IDeploymentBuilder deployment = this.repositoryService.CreateDeployment(); if (deployer.DisableSchemaValidation) { deployment.DisableSchemaValidation(); } if (deployer.EnableDuplicateFiltering) { deployment.EnableDuplicateFiltering(); } string resourceName = deployer.Name.EndsWith("bpmn", StringComparison.OrdinalIgnoreCase) ? deployer.Name : $"{deployer.Name}.bpmn"; IDeployment dep = deployment.Name(deployer.Name) .Category(deployer.Category) .Key(deployer.Key) .TenantId(deployer.TenantId) .BusinessKey(deployer.BusinessKey) .BusinessPath(deployer.BusinessPath) .StartForm(deployer.StartForm, deployer.BpmnXML) .AddString(resourceName, deployer.BpmnXML) .Deploy(); return(Task.FromResult(deploymentConverter.From(dep))); } catch (ActivitiValidationException ex) { var http400 = new Http400() { Code = "activitiValidationException", Message = "流程定义验证失败", Target = this.GetType().Name, }; http400.Details = new List <HttpException>(); foreach (var err in ex.ValidationErrors ?? new List <ValidationError>()) { http400.Details.Add(new Http400 { Code = "activitiValidationException", OriginError = err, Message = err.ToString() }); } throw new Http400Exception(http400, ex); } }
public virtual void testParseExternalTaskWithoutTopic() { IDeploymentBuilder deploymentBuilder = repositoryService.CreateDeployment().AddClasspathResource("resources/bpmn/external/ExternalTaskParseTest.TestParseExternalTaskWithoutTopic.bpmn20.xml"); try { deploymentBuilder.Deploy(); Assert.Fail("exception expected"); } catch (ProcessEngineException e) { AssertTextPresent("External tasks must specify a 'topic' attribute in the camunda namespace", e.Message); } }
protected internal virtual IDeploymentWithDefinitions Deploy(IDeploymentBuilder deploymentBuilder, IList <IBpmnModelInstance> bpmnModelInstances, IList <string> resources) { int i = 0; foreach (IBpmnModelInstance bpmnModelInstance in bpmnModelInstances) { deploymentBuilder.AddModelInstance(i + "_" + DefaultBpmnResourceName, bpmnModelInstance); i++; } foreach (string resource in resources) { deploymentBuilder.AddClasspathResource(resource); } return(Deploy(deploymentBuilder)); }
public void 读取信号边界事件处理(string bpmnFile) { string xml = IntegrationTestContext.ReadBpmn(bpmnFile); ICommandExecutor commandExecutor = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutor; Authentication.AuthenticatedUser = new InProcessWorkflowEngine.TestUser() { Id = "评审员", FullName = "评审员", TenantId = context.TenantId }; IDeploymentBuilder builder = processEngine.RepositoryService.CreateDeployment() .Name(Path.GetFileNameWithoutExtension(bpmnFile)) .TenantId(context.TenantId) .AddString(bpmnFile, xml) .EnableDuplicateFiltering() .TenantId(context.TenantId); IDeployment deploy = commandExecutor.Execute(new DeployCmd(builder)); IProcessDefinition definition = processEngine.RepositoryService.CreateProcessDefinitionQuery() .SetDeploymentId(deploy.Id) .SetProcessDefinitionTenantId(context.TenantId) .SetLatestVersion() .SingleResult(); IProcessInstance processInstance = commandExecutor.Execute(new StartProcessInstanceCmd(definition.Id, null)); IList <ITask> tasks = processEngine.TaskService.GetMyTasks("用户1"); ITaskEntity task = tasks[0] as ITaskEntity; IExecutionEntity execution = commandExecutor.Execute(new GetExecutionByIdCmd(task.ExecutionId)); //Process process = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).DeploymentManager.ResolveProcessDefinition(definition).Process; //FlowElement activity = process.GetFlowElement(execution.CurrentActivityId, true); //string taskName = task.Name; //commandExecutor.Execute(new TerminateTaskCmd(task.Id, "测试终止", true)); processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); tasks = processEngine.TaskService.GetMyTasks("用户2"); task = tasks[0] as ITaskEntity; processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); var list = commandExecutor.Execute(new GetCompletedTaskModelsCmd(task.ProcessInstanceId, true)); //commandExecutor.Execute(new ReturnToActivityCmd(task.Id, execution.CurrentActivityId, "回退到", null)); //task = tasks[0] as ITaskEntity; //execution = commandExecutor.Execute(new GetExecutionByIdCmd(task.ExecutionId)); //commandExecutor.Execute(new TerminateProcessInstanceCmd(processInstance.Id, "流程已被取消", null)); //IProcessInstance activityInstance = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutor.Execute(new StartProcessInstanceByActivityCmd(definition.Id, execution.BusinessKey, activity.Id, null, execution.TenantId, null, true, execution.Name)); //try //{ // //var events = processEngine.RuntimeService.CreateExecutionQuery() // // .SetParentId(tasks[0].ExecutionId) // // .SignalEventSubscriptionName("自动回退") // // .List(); // int count = 0; // while (count < 3) // { // processEngine.ManagementService.ExecuteCommand(new SignalEventReceivedCmd("自动回退", null, false, context.TenantId)); // count += 1; // } //} //catch { } }
public DeployCmd(IDeploymentBuilder deploymentBuilder) { this.deploymentBuilder = deploymentBuilder; }
public ControllableDeployCommand(IDeploymentBuilder deploymentBuilder) { this.deploymentBuilder = deploymentBuilder; }
public void 回退到任务已完成节点(string bpmnFile) { string xml = IntegrationTestContext.ReadBpmn(bpmnFile); ICommandExecutor commandExecutor = (processEngine.ProcessEngineConfiguration as ProcessEngineConfigurationImpl).CommandExecutor; Authentication.AuthenticatedUser = new InProcessWorkflowEngine.TestUser() { Id = "评审员", FullName = "评审员", TenantId = context.TenantId }; IDeploymentBuilder builder = processEngine.RepositoryService.CreateDeployment() .Name(Path.GetFileNameWithoutExtension(bpmnFile)) .TenantId(context.TenantId) .AddString(bpmnFile, xml) .EnableDuplicateFiltering() .TenantId(context.TenantId); IDeployment deploy = commandExecutor.Execute(new DeployCmd(builder)); IProcessDefinition definition = processEngine.RepositoryService.CreateProcessDefinitionQuery() .SetDeploymentId(deploy.Id) .SetProcessDefinitionTenantId(context.TenantId) .SetLatestVersion() .SingleResult(); IProcessInstance processInstance = commandExecutor.Execute(new StartProcessInstanceCmd(definition.Id, null)); try { IList <ITask> tasks = processEngine.TaskService.GetMyTasks("节点1"); ITaskEntity task = tasks[0] as ITaskEntity; IExecutionEntity execution = commandExecutor.Execute(new GetExecutionByIdCmd(task.ExecutionId)); processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); tasks = processEngine.TaskService.GetMyTasks("节点2"); task = tasks[0] as ITaskEntity; processEngine.TaskService.Complete(task.Id, new Dictionary <string, object> { { "流程变量", "变量值" } }); var list = commandExecutor.Execute(new GetCompletedTaskModelsCmd(task.ProcessInstanceId, true)); tasks = processEngine.TaskService.GetMyTasks("节点3"); task = tasks[0] as ITaskEntity; commandExecutor.Execute(new ReturnToActivityCmd(task.Id, list[0].Id, $"回退测试到{list[0].Name}")); } catch { } System.Diagnostics.Debugger.Break(); }
public virtual void CreateDeployment(string processArchiveName, IDeploymentBuilder deploymentBuilder) { // default implementation does nothing }