@Transactional public long save(WorkflowForm workflowForm) { Object context = getContextDAO().mergeContext(workflowForm.getContext()); ProcessInstance processInstance = workflowForm.getProcessInstance(); processInstance.setLastUpdated(new Timestamp(System.currentTimeMillis())); processInstance.setObjectInstance(createContextDescriptor(context)); ProcessInstance pi = null; if (processInstance.getId() == 0) { processInstance.setTaskId(0L); TaskBase task = getTask(workflowForm.getProcessDefinition(),0L); pi = getWorkflowDAO().mergeProcessInstance(processInstance); Audit audit = createAudit(pi, task); audit.setStatus(TaskStatus.DONE); } else { TaskBase task = getCurrentTask(processInstance); pi = getWorkflowDAO().mergeProcessInstance(processInstance); createAudit(pi, task); } return pi.getId(); } @Transactional