Unable to save ProcessInstance after adding RuntimeAction
whitbeck Apr 5, 2006 8:34 AMIt looks like saving a ProcessInstance containing "RuntimeAction" objects is causing a problem because the expected objects are "Action" objects.
This does not throw an exception:
jbpmContext = jbpmConfiguration.createJbpmContext(); try { processInstance = jbpmContext.loadProcessInstanceForUpdate(processInstanceId); } finally { jbpmContext.close(); }
However, this does throw an exception:
jbpmContext = jbpmConfiguration.createJbpmContext(); try { processInstance = jbpmContext.loadProcessInstanceForUpdate(processInstanceId); RuntimeAction ra = new RuntimeAction(node, Event.EVENTTYPE_NODE_ENTER, action); processInstance.addRuntimeAction(ra); } finally { jbpmContext.close(); }
The action being added is serializable and the runtime actions are properly executed when not using a persistable process instance (or when they are added after the context is closed).
Here is the exception that gets thrown when trying to close the 'persistence' service:
Caused by: org.hibernate.HibernateException: instance not of expected entity type: org.jbpm.graph.def.Action at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassEntityPersister(AbstractEntityPersister.java:3301) at org.hibernate.impl.SessionImpl.getEntityPersister(SessionImpl.java:1330) at org.hibernate.engine.ForeignKeys.isTransient(ForeignKeys.java:180) at org.hibernate.engine.ForeignKeys$Nullifier.isNullifiable(ForeignKeys.java:137) at org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:69) at org.hibernate.engine.ForeignKeys$Nullifier.nullifyTransientReferences(ForeignKeys.java:47) at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:263) at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:167) at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:101) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98) at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70) at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:531) at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:523) at org.hibernate.engine.CascadingAction$1.cascade(CascadingAction.java:134) at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:213) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:157) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:290) at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:185) at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:160) at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:108) at org.hibernate.engine.Cascade.cascade(Cascade.java:248) at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:130) at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:121) at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:65) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:26) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1009) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:356) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:146) ... 19 more