public virtual void testConcurrentVariableUpdate() { runtimeService.StartProcessInstanceByKey("testProcess"); string taskId = taskService.CreateTaskQuery().First().Id; string VariableName = "varName"; taskService.SetVariable(taskId, VariableName, "someValue"); SetTaskVariablesThread thread1 = new SetTaskVariablesThread(this, taskId, VariableName, "someString"); thread1.startAndWaitUntilControlIsReturned(); // this fails with an optimistic locking exception SetTaskVariablesThread thread2 = new SetTaskVariablesThread(this, taskId, VariableName, "someOtherString"); thread2.startAndWaitUntilControlIsReturned(); thread1.proceedAndWaitTillDone(); thread2.proceedAndWaitTillDone(); Assert.IsNull(thread1.optimisticLockingException); Assert.NotNull(thread2.optimisticLockingException); // succeeds taskService.Complete(taskId); }
public virtual void testConcurrentVariableCreate() { runtimeService.StartProcessInstanceByKey("testProcess", Collections.SingletonMap <string, object>("varName1", "someValue")); string VariableName = "varName"; string taskId = taskService.CreateTaskQuery().First().Id; SetTaskVariablesThread thread1 = new SetTaskVariablesThread(this, taskId, VariableName, "someString"); thread1.startAndWaitUntilControlIsReturned(); // this should Assert.Fail with integrity constraint violation SetTaskVariablesThread thread2 = new SetTaskVariablesThread(this, taskId, VariableName, "someString"); thread2.startAndWaitUntilControlIsReturned(); thread1.proceedAndWaitTillDone(); Assert.IsNull(thread1.exception); Assert.IsNull(thread1.optimisticLockingException); thread2.proceedAndWaitTillDone(); Assert.NotNull(thread2.exception); Assert.IsNull(thread2.optimisticLockingException); // should not Assert.Fail with FK violation because one of the variables is not deleted. taskService.Complete(taskId); }