I found some strange behaviour regarding the storing and updating of process variables. Suppose we have the following process:Process A:Service 1 -> Task 1 -> Service 2 -> Task 2 -> Service 3Service 1 creates a new process variable:
Book book = new Book("12345");
execution.setVariable("book", book);Service 2 changes a property:
Book book = execution.getVariable("book");
book.setTitle("Activiti in Action");Service 3 prints the content of the process variable:
Book book = execution.getVariable("book");
System.out.println("book=" + book);Result: book=Book [isbn=12345, title=Activiti in Action]This is as (I) expected. However, now we remove Task 1. Lets see what happens.Process B:Service 1 -> Service 2 -> Task 2 -> Service 3Result: book=Book [isbn=12345, title=null]This is strange… the variable is not updated whereas it was in the first process.ConclusionIt seems that changes to process variables are only persisted if there is a waitstate between the creation and the update of the var.Also, when debugging this issue I noticed that VariableType.serialize is called twice every time setVariable (or rather createVariableLocal) is called: once by VariableInstanceEntity.createAndInsert and once by VariableScopeImpl.setVariableInstanceValue.I've tried to attach a patch with a testcase, but this results in the error "The extension diff is not allowed"…