[
https://jira.jboss.org/jira/browse/JBPM-2036?page=com.atlassian.jira.plug...
]
Alejandro Guizar resolved JBPM-2036.
------------------------------------
Resolution: Done
PostgreSQL indicated precisely what the violation was. It even did so in Spanish :-)
2009-02-12 13:55:09,048 WARN [org.hibernate.util.JDBCExceptionReporter] SQL Error: 0,
SQLState: 23503
2009-02-12 13:55:09,048 ERROR [org.hibernate.util.JDBCExceptionReporter] ERROR: update o
delete en «jbpm_delegation» viola la llave foránea «fk_action_actndel» en la tabla
«jbpm_action»
Detail: La llave (id_)=(10) todavía es referida desde la tabla «jbpm_action».
Anyhow, these little informative logs allowed me to find out that a duplicate of the
Timer.action entity was being saved in JobSession unnecessarily. The duplicate Action
entity referenced the original Delegation entity and prevented the Delegation from being
deleted.
StaleObjectStateException when repeating timer signals the token
----------------------------------------------------------------
Key: JBPM-2036
URL:
https://jira.jboss.org/jira/browse/JBPM-2036
Project: JBoss jBPM
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Core Engine
Affects Versions: jBPM-3.2.5.SP1, jBPM 3.3.1 GA
Reporter: Martin Putz
Assignee: Alejandro Guizar
Fix For: jBPM 3.2.6 GA
With the following timer definition on a state node
<state name='state1'>
<timer name='timer-to-end-with-repeat' duedate='1 second'
repeat='5 seconds'>
<action class='org.jbpm.scheduler.exe.TimerDbTest$Signal' />
</timer>
<transition name='to_state2' to='state2'/>
</state>
and the action class execute() method being
public void execute(ExecutionContext executionContext) throws Exception {
executionContext.leaveNode();
}
leads to:
2009-02-10 21:38:45,404 16508 ERROR
[org.hibernate.event.def.AbstractFlushingEventListener] (JbpmJobExecutor:127.0.0.1:1:)
Could not synchronize database state with session
org.hibernate.StaleObjectStateException: Row was updated or deleted by another
transaction (or unsaved-value mapping was incorrect): [org.jbpm.job.Timer#86]
at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1769)
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2412)
at
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2312)
at
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2612)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:96)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at org.jbpm.persistence.db.DbPersistenceService.commit(DbPersistenceService.java:226)
at
org.jbpm.persistence.db.DbPersistenceService.endTransaction(DbPersistenceService.java:131)
at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:197)
at org.jbpm.svc.Services.close(Services.java:243)
at org.jbpm.JbpmContext.close(JbpmContext.java:133)
at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:194)
at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:61)
If 'repeat' is not set, the token is leaving the state as expected.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira