history problem
galanfish Feb 20, 2009 12:21 AMi have created a process like this:
JbpmConfiguration environmentFactory = (JbpmConfiguration) getEnvironmentFactory(); ProcessService processService = environmentFactory.get(ProcessService.class); ClientProcessDefinition processDefinition = ProcessDefinitionBuilder .startProcess("branch_history_problem") .startActivity("start", WaitState.class) .initial() .transition("forkNode") .endActivity() .startActivity("forkNode", ForkActivity.class) // just as org.jbpm.jpdl.internal.activity.ForkActivity .transition("leftWait", "to_left") .transition("rightWait", "to_right") .endActivity() .startActivity("leftWait", WaitState.class) .transition("leftLogic") .endActivity() .startActivity("leftLogic", WaitStateMaybeExceptionThrowout.class) // may throw out exception or call wait for signal, call historyXX inside .transition("join") .endActivity() .startActivity("rightWait", WaitState.class) .transition("rightLogic") .endActivity() .startActivity("rightLogic", WaitStateMaybeExceptionThrowout.class) .transition("join") .endActivity() .startActivity("join", JoinActivity.class) // just as org.jbpm.jpdl.internal.activity.JoinActivity .transition("end", "to_end") .endActivity() .startActivity("end", AutomaticActivity.class) .endActivity() .endProcess(); /* / leftWait(wait state) - leftLogic(wait state) \ start(wait state) - forkNode join - end \ rightWait(wait state) - rightLogic(wait state) / */
then, i created a process instance and made it run,
when the acitivty moves to Activity("leftLogic", WaitStateMaybeExceptionThrowout.class) or Activity("rightWait", WaitStateMaybeExceptionThrowout.class)
exception throw out:
Cannot add or update a child row: a foreign key constraint fails (`jbpm_pvm/jbpm_hist_actinst`, CONSTRAINT `FK_HAI_HPI` FOREIGN KEY (`HPI_`) REFERENCES `jbpm_hist_procinst` (`ID_`))
insertSQL= "/* insert org.jbpm.pvm.internal.history.model.HistoryActivityInstanceImpl */
insert into JBPM_HIST_ACTINST
(DBVERSION_, HPI_, ACTIVITY_, EXECUTION_, ACTIVITY_NAME_, START_, END_, DURATION_, TRANSITION_, CLASS_) values (?, ?, ?, ?, ?, ?, ?, ?, ?, 'ACT')"
then i modify the method ActivityStart#process as follow, it seems work ok...
..... public void process() { Session session = Environment.getFromCurrent(Session.class); // modification begins org.jbpm.pvm.internal.model.ExecutionImpl tmp = execution; while(tmp.getParent() != null){ tmp = tmp.getParent(); } // ends HistoryProcessInstance historyProcessInstanceImpl = (HistoryProcessInstance) session.load(HistoryProcessInstanceImpl.class, tmp.getId()/*execution.getId()*/); //.. HistoryActivityInstanceImpl historyActivityInstanceImpl = createHistoryActivityInstance(historyProcessInstanceImpl); session.save(historyActivityInstanceImpl); execution.setHistoryActivityInstanceDbid(historyActivityInstanceImpl.getDbid()); } .....
is there something i missed or?