deleting task cascading problem for new variable instances

Description

Fred:"

org.apache.ibatis.exceptions.PersistenceException:

  1.  

    1.  

      1. Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`head`.`act_ru_variable`, CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`))

      2. The error may involve org.activiti.engine.impl.persistence.entity.ExecutionEntity.deleteExecution-Inline

      3. The error occurred while setting parameters

      4. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`head`.`act_ru_variable`, CONSTRAINT `ACT_FK_VAR_EXE` FOREIGN KEY (`EXECUTION_ID_`) REFERENCES `act_ru_execution` (`ID_`))

Na wat zoeken en debuggen blijkt dat er 2 variables niet werden gedelete (bpm_status en bpm_outcome) bij het deleten van de TaskEntity, in de call taskService.complete(id). Deze twee variables worden geset in een tasklistener, die triggerred bij event COMPLETE.

Aangezien de task-listener _n de TaskEntity.delete in dezelfde commandContext draait, zijn deze nog niet geflushed bij het callen van de delete op de TaskEntity. De task-entity gaat delete's queuen in DBSqlSession voor alle Variables voor die task, dmv. een query. De resultaten van deze query bevatten unflushed vars niet. Als de task de laatste is in een process, wordt ook de ExecutionEntity gedelete. Bij flushen van sql-session gebeurt dit:

> Insert bpm_status (taskvar) OK
> Insert bpm_outcome (taskvar) OK
> Delete varriable bpm_priority (taskvar) OK
> Delete variable .... OK
> .... OK
> Delete TaskEntity OK
> Delete bpm_workflowDescription (processvar)
> Delete variable ... OK
> .... OK
> Delete ExecutionEntity BOOM -> inserted task-variables hebben EXECUTION_ID_ van execution...

In bijlage patch voor bug in huidige activiti trunk te reproduceren (TaskListenerTest runnen).

Enige ik kan bedenken is om de created variables bij te houden op de entity en ook te deleten bij flush (indien ze niet uit de query voorkomen waarin alle variables om te deleten staan). Any thoughts?
Anyhow, er moet iets veranderd zijn in 5.5 release (of 5.4) -> de 5.3 release had hier geen last van...
"

Environment

None

Assignee

Tom Baeyens

Reporter

Tom Baeyens

Labels

None

Components

Fix versions

Priority

Major
Configure