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?