I have a state node that requires a specific time be set (e.g. at 16:00 instead of 3 hours
from now). I can achieve this via the following:
jpdl code:
| <state name="Buffer period">
| <event type="timer-create">
| <action expression="#{orderFulfillmentWorkflow.setBufferDueDate}"
/>
| </event>
| <timer duedate="12 hours">
| <action expression="#{orderFulfillmentWorkflow.progress}" />
| </timer>
| <transition name="bufferPeriodTimeout" to="Is order
valid?"></transition>
| </state>
|
java (seam) code:
| public void setBufferDueDate() {
| Timer timer = ExecutionContext.currentExecutionContext().getTimer() ;
| if (timer != null) {
| // 3 min in future for test purposes...
| Date bufferDueDate = new Date( now.getTime() + 180000 )
| getLog().debug("Buffer due to expire on #0", bufferDueDate) ;
|
| timer.setDueDate(bufferDueDate) ;
|
| } else {
| getLog().error("No timer was available.") ;
| }
|
| }
|
| public void progress() {
| ExecutionContext.currentExecutionContext().leaveNode() ;
| }
|
The timer then fires at the time I set and the workflow then progresses until the end (or
hits a wait state). At that point, the following exception is logged and the workflow is
not saved:
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.save.CascadeSaveOperation] cascading save
of 'org.jbpm.graph.exe.ProcessInstance@1090b29'
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.save.CascadeSaveOperation] cascading save
to process instance 'org.jbpm.graph.exe.ProcessInstance@14a7b0c'
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.Services] executing default save
operations
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.save.HibernateSaveOperation] saving
process instance
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.save.SaveLogsOperation] flushing logs to
logging service.
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.save.CascadeSaveOperation] cascading save
of 'org.jbpm.graph.exe.ProcessInstance@14a7b0c'
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.db.JobSession] deleting timer(Buffer
period,08-02-11 11:05:00,653,Token: 90)
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.JbpmContext] closing jbpmContext
org.jbpm.JbpmContext@108d20b
| 2008-02-11 11:05:02,412 DEBUG [org.jbpm.svc.Services] closing service
'persistence': org.jbpm.persistence.db.DbPersistenceService@108d348
| 2008-02-11 11:05:02,427 DEBUG [org.jbpm.persistence.db.DbPersistenceService] flushing
hibernate session
SessionImpl(PersistenceContext[entityKeys=[EntityKey[org.jbpm.graph.log.SignalLog#1411],
EntityKey[org.jbpm.graph.log.ProcessInstanceEndLog#1410],
EntityKey[org.jbpm.graph.log.TransitionLog#1413],
EntityKey[org.jbpm.graph.log.ProcessStateLog#1412],
EntityKey[org.jbpm.graph.log.ActionLog#1407],
EntityKey[org.jbpm.graph.def.ProcessDefinition#996],
EntityKey[org.jbpm.graph.log.TransitionLog#1406],
EntityKey[org.jbpm.context.log.variableinstance.StringUpdateLog#1409],
EntityKey[org.jbpm.context.log.VariableCreateLog#1408],
EntityKey[org.jbpm.graph.log.TransitionLog#1403],
EntityKey[org.jbpm.graph.log.NodeLog#1402], EntityKey[org.jbpm.graph.log.NodeLog#1405],
EntityKey[org.jbpm.graph.log.ActionLog#1404],
EntityKey[org.jbpm.graph.log.ActionLog#1399],
EntityKey[org.jbpm.graph.log.ActionLog#1398],
EntityKey[org.jbpm.graph.log.TransitionLog#1401],
EntityKey[org.jbpm.graph.log.NodeLog#1400], EntityKey[org.jbpm.graph.def.Action#5456],
EntityKey[org.jbpm.graph.exe.ProcessInstance#56],
EntityKey[org.jbpm.graph.def.Event#2346], EntityKey[org.jbpm.graph.def.Event#2345],
EntityKey[org.jbpm.graph.def.Event#2348],
EntityKey[org.jbpm.graph.exe.ProcessInstance#55],
EntityKey[org.jbpm.graph.def.Action#5445], EntityKey[org.jbpm.graph.def.Action#5447],
EntityKey[org.jbpm.graph.def.Action#5442], EntityKey[org.jbpm.graph.def.Action#5444],
EntityKey[org.jbpm.graph.def.Transition#16612],
EntityKey[org.jbpm.graph.def.Transition#16611],
EntityKey[org.jbpm.context.exe.TokenVariableMap#55],
EntityKey[org.jbpm.context.exe.TokenVariableMap#56],
EntityKey[org.jbpm.graph.def.Transition#16603], EntityKey[org.jbpm.graph.def.Event#2353],
EntityKey[org.jbpm.context.log.variableinstance.StringUpdateLog#1418],
EntityKey[org.jbpm.graph.log.ProcessInstanceEndLog#1419],
EntityKey[org.jbpm.graph.log.ActionLog#1416],
EntityKey[org.jbpm.context.log.VariableCreateLog#1417],
EntityKey[org.jbpm.graph.log.NodeLog#1414],
EntityKey[org.jbpm.context.def.VariableAccess#3131],
EntityKey[org.jbpm.graph.log.TransitionLog#1415],
EntityKey[org.jbpm.context.def.VariableAccess#3130],
EntityKey[org.jbpm.graph.exe.Token#89], EntityKey[org.jbpm.graph.exe.Token#90],
EntityKey[org.jbpm.graph.def.Node#12781], EntityKey[org.jbpm.graph.def.Node#12787],
EntityKey[org.jbpm.graph.def.Transition#16569],
EntityKey[org.jbpm.graph.def.Transition#16570],
EntityKey[org.jbpm.graph.def.Transition#16571], EntityKey[org.jbpm.graph.exe.Token#87],
EntityKey[org.jbpm.graph.def.Transition#16572], EntityKey[org.jbpm.job.Job#26],
EntityKey[org.jbpm.graph.exe.Token#88], EntityKey[org.jbpm.taskmgmt.exe.TaskInstance#56],
EntityKey[org.jbpm.graph.node.State#12758], EntityKey[org.jbpm.graph.def.Node#12759],
EntityKey[org.jbpm.graph.def.Node#12760], EntityKey[org.jbpm.graph.def.Node#12762],
EntityKey[org.jbpm.module.exe.ModuleInstance#109],
EntityKey[org.jbpm.module.exe.ModuleInstance#110],
EntityKey[org.jbpm.context.exe.variableinstance.StringInstance#120],
EntityKey[org.jbpm.context.exe.variableinstance.StringInstance#119],
EntityKey[org.jbpm.context.exe.VariableInstance#118],
EntityKey[org.jbpm.context.exe.VariableInstance#117],
EntityKey[org.jbpm.module.exe.ModuleInstance#111],
EntityKey[org.jbpm.module.exe.ModuleInstance#112],
EntityKey[org.jbpm.context.exe.VariableInstance#116],
EntityKey[org.jbpm.context.exe.VariableInstance#115],
EntityKey[org.jbpm.graph.def.ProcessDefinition#997],
EntityKey[org.jbpm.graph.def.Node#12789]],collectionKeys=[CollectionKey[org.jbpm.graph.def.ProcessDefinition.events#996],
CollectionKey[org.jbpm.graph.exe.Token.children#87],
CollectionKey[org.jbpm.graph.node.ProcessState.variableAccesses#12781],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.events#997],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16603],
CollectionKey[org.jbpm.graph.exe.Token.children#90],
CollectionKey[org.jbpm.graph.exe.Token.children#89],
CollectionKey[org.jbpm.graph.exe.Token.children#88],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16611],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12781],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12787],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12781],
CollectionKey[org.jbpm.graph.def.Transition.events#16603],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12789],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12789],
CollectionKey[org.jbpm.graph.def.Transition.events#16612],
CollectionKey[org.jbpm.graph.def.Transition.events#16611],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12787],
CollectionKey[org.jbpm.context.exe.ContextInstance.tokenVariableMaps#111],
CollectionKey[org.jbpm.graph.def.Event.actions#2345],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12762],
CollectionKey[org.jbpm.graph.def.Event.actions#2348],
CollectionKey[org.jbpm.graph.def.Event.actions#2346],
CollectionKey[org.jbpm.graph.def.Event.actions#2353],
CollectionKey[org.jbpm.taskmgmt.exe.TaskMgmtInstance.taskInstances#110],
CollectionKey[org.jbpm.graph.def.Transition.events#16570],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16612],
CollectionKey[org.jbpm.graph.def.Transition.events#16569],
CollectionKey[org.jbpm.graph.def.Transition.events#16572],
CollectionKey[org.jbpm.graph.def.Transition.events#16571],
CollectionKey[org.jbpm.graph.exe.Token.comments#88],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12760],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12759],
CollectionKey[org.jbpm.graph.exe.Token.comments#87],
CollectionKey[org.jbpm.graph.def.Node.arrivingTransitions#12758],
CollectionKey[org.jbpm.graph.exe.Token.comments#90],
CollectionKey[org.jbpm.graph.exe.Token.comments#89],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.nodes#996],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.nodes#997],
CollectionKey[org.jbpm.context.exe.ContextInstance.tokenVariableMaps#109],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.exceptionHandlers#996],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.exceptionHandlers#997],
CollectionKey[org.jbpm.taskmgmt.exe.TaskInstance.pooledActors#56],
CollectionKey[org.jbpm.graph.node.Decision.decisionConditions#12760],
CollectionKey[org.jbpm.graph.node.Decision.decisionConditions#12789],
CollectionKey[org.jbpm.taskmgmt.exe.TaskMgmtInstance.swimlaneInstances#110],
CollectionKey[org.jbpm.taskmgmt.exe.TaskMgmtInstance.swimlaneInstances#112],
CollectionKey[org.jbpm.taskmgmt.exe.TaskMgmtInstance.taskInstances#112],
CollectionKey[org.jbpm.context.exe.TokenVariableMap.variableInstances#56],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12759],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12760],
CollectionKey[org.jbpm.context.exe.TokenVariableMap.variableInstances#55],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12762],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12758],
CollectionKey[org.jbpm.graph.def.Node.events#12787],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.actions#996],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.actions#997],
CollectionKey[org.jbpm.graph.def.Node.events#12789],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16569],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12781],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16570],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16571],
CollectionKey[org.jbpm.graph.def.Transition.exceptionHandlers#16572],
CollectionKey[org.jbpm.graph.def.Node.events#12781],
CollectionKey[org.jbpm.taskmgmt.exe.TaskInstance.comments#56],
CollectionKey[org.jbpm.graph.exe.ProcessInstance.runtimeActions#55],
CollectionKey[org.jbpm.graph.exe.ProcessInstance.runtimeActions#56],
CollectionKey[org.jbpm.taskmgmt.exe.TaskInstance.variableInstances#56],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12762],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.definitions#997],
CollectionKey[org.jbpm.graph.exe.ProcessInstance.instances#55],
CollectionKey[org.jbpm.graph.def.ProcessDefinition.definitions#996],
CollectionKey[org.jbpm.graph.exe.ProcessInstance.instances#56],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12758],
CollectionKey[org.jbpm.graph.def.Node.events#12762],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12760],
CollectionKey[org.jbpm.graph.def.Node.leavingTransitions#12759],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12789],
CollectionKey[org.jbpm.graph.def.Node.events#12758],
CollectionKey[org.jbpm.graph.def.Node.events#12759],
CollectionKey[org.jbpm.graph.def.Node.exceptionHandlers#12787],
CollectionKey[org.jbpm.graph.def.Node.events#12760]]];ActionQueue[insertions=[] updates=[]
deletions=[EntityDeleteAction[org.jbpm.job.Timer#26]] collectionCreations=[]
collectionRemovals=[] collectionUpdates=[]])
| 2008-02-11 11:05:02,427 ERROR [org.hibernate.event.def.AbstractFlushingEventListener]
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#26]
| at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1761)
| at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2519)
| at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2693)
| at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:74)
| at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:144)
| 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.jbpm.persistence.db.DbPersistenceService.flushSession(DbPersistenceService.java:272)
| at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:232)
| at org.jbpm.svc.Services.close(Services.java:224)
| at org.jbpm.JbpmContext.close(JbpmContext.java:139)
| at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:193)
| at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64)
| 2008-02-11 11:05:02,443 ERROR [org.jbpm.persistence.db.DbPersistenceService] hibernate
flush failed
| org.hibernate.StaleObjectStateException: Row was updated or deleted by another
transaction (or unsaved-value mapping was incorrect): [org.jbpm.job.Timer#26]
| at
org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1761)
| at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2519)
| at
org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2693)
| at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:74)
| at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:144)
| 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.jbpm.persistence.db.DbPersistenceService.flushSession(DbPersistenceService.java:272)
| at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:232)
| at org.jbpm.svc.Services.close(Services.java:224)
| at org.jbpm.JbpmContext.close(JbpmContext.java:139)
| at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:193)
| at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64)
| 2008-02-11 11:05:02,458 DEBUG [org.jbpm.persistence.db.DbPersistenceService] rolling
back hibernate transaction
| 2008-02-11 11:05:02,458 ERROR [org.jbpm.persistence.db.DbPersistenceService] hibernate
rollback failed
| java.lang.NullPointerException
| at
org.jbpm.persistence.db.DbPersistenceService.rollback(DbPersistenceService.java:304)
| at org.jbpm.persistence.db.DbPersistenceService.close(DbPersistenceService.java:234)
| at org.jbpm.svc.Services.close(Services.java:224)
| at org.jbpm.JbpmContext.close(JbpmContext.java:139)
| at org.jbpm.job.executor.JobExecutorThread.executeJob(JobExecutorThread.java:193)
| at org.jbpm.job.executor.JobExecutorThread.run(JobExecutorThread.java:64)
|
Any ideas on how to avoid/ solve this problem? Any suggestions or comments would be
gratefully received.
Many thanks, Peter.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4128325#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...