[jBPM Users] - Re: Implementing Escalation in jBPM 4.1
by sebastian.s
I do not know what exactly is the problem with the BusinessCalendar but I created my process and my unit test within the examples project and the error has gone away. Now back to the actual goal.
Please disregard my old post since there were some mistakes and things missing.
My process definition looks like this:
| <process key="escalation" name="escalation" xmlns="http://jbpm.org/4.0/jpdl">
| <start g="130,8,48,48" name="start1">
| <transition g="-93,-21" name="to timeout_task" to="timeout_task"/>
| </start>
| <task g="106,105,92,52" name="timeout_task" assignee="alex">
| <transition g="7,-32" name="to escalated" to="escalated">
| <timer duedate="5 seconds"/>
| <timer duedate="5 seconds"/>
| <timer duedate="5 seconds"/>
| <timer duedate="5 seconds"/>
| </transition>
| <transition g="-50,-21" name="to task2" to="task2"/>
| </task>
| <task g="303,211,92,52" name="escalated" assignee="mike">
| <transition g="-50,-21" name="to task2" to="task2"/>
| </task>
| <task g="109,256,92,52" name="task2" assignee="peter">
| <transition g="-48,-21" name="to end1" to="end1"/>
| </task>
| <end g="132,367,48,48" name="end1"/>
| </process>
|
My unit test follows:
| package org.jbpm.examples.userescalation;
| import java.util.List;
|
| import org.jbpm.api.Execution;
| import org.jbpm.api.ProcessInstance;
| import org.jbpm.api.job.Job;
| import org.jbpm.api.task.Task;
| import org.jbpm.test.JbpmTestCase;
|
| public class EscalationTest extends JbpmTestCase {
|
| String deploymentId;
|
| protected void setUp() throws Exception {
| super.setUp();
|
| deploymentId = repositoryService.createDeployment()
| .addResourceFromClasspath("org/jbpm/examples/userescalation/escalation.jpdl.xml")
| .deploy();
| }
|
| protected void tearDown() throws Exception {
| repositoryService.deleteDeploymentCascade(deploymentId);
|
| super.tearDown();
| }
|
| public void testTaskEscalaton() {
|
| ProcessInstance processInstance = executionService.startProcessInstanceByKey("escalation");
|
| List<Task> tasksAlex = taskService.findPersonalTasks("alex");
|
| // check if Alex's task has been created
| if(tasksAlex.size() == 0) {
| fail();
| }
|
| // executing the job which would normally be executed by the JobExecutor
| Job job = managementService.createJobQuery()
| .timers()
| .processInstanceId(processInstance.getId())
| .uniqueResult();
|
| managementService.executeJob(job.getId());
| processInstance = executionService.findProcessInstanceById(processInstance.getId());
|
| // we now should have arrived in the node "escalated"
| assertTrue(processInstance.isActive("escalated"));
|
| // there should be an item in Mike's tasklist now
| List<Task> tasksMike = taskService.findPersonalTasks("mike");
| if(tasksMike.size() == 0) {
| fail();
| } else {
| taskService.completeTask(tasksMike.get(0).getId());
| }
|
| // after Mike has completed his task we should have arrived in the node "task2"
| processInstance = executionService.findProcessInstanceById(processInstance.getId());
| assertTrue(processInstance.isActive("task2"));
|
| // Alex's tasks still exists although it is obsolete now
| tasksAlex = taskService.findPersonalTasks("alex");
|
| // deleting is not possible since this task belongs to an execution
| //taskService.deleteTask(tasksAlex.get(0).getId(), "obsolete");
|
| // so we have to complete it, what is unwanted for BAM
| taskService.completeTask(tasksAlex.get(0).getId());
|
| // ########### but this fails with an exception ########
|
| // there shouldn't be any tasks left for alex
| //tasksAlex = taskService.findPersonalTasks("alex");
| //assertEquals(0, tasksAlex.size());
|
| }
|
| }
|
The exception thrown when completeTask() is called:
| ### EXCEPTION ###########################################
| 16:19:12,140 INF | [DefaultCommandService] exception while executing command org.jbpm.pvm.internal.cmd.CompleteTaskCmd@ff45de
| org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [org.jbpm.pvm.internal.model.ExecutionImpl#2]
|
Am I doing anything wrong or does this mean you should not put timers on transitions coming from user tasks?
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4257213#4257213
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4257213
14 years, 9 months
[jBPM Users] - superstate timer error
by aapthorp
I have a process definition which includes a couple of timers; one on a state and another on a superstate. The timer on the state works as expected. However, when my process reaches the superstate it throws a StaleObjectStateException. Also, the timer seems to execute, but for each of the superstate's sub states as well as the superstate. Each time the timer repeats I see the same error.
I've looked around the forum / Jira amd can't see that anyone else has observed this problem.
My process definition is as follows:
<state name="State 1">
| <timer duedate="20 seconds" repeat="20 seconds" name="late leaving">
| <script>
| System.out.println("What are we waiting for ? ");
| </script>
| </timer>
| <transition to="Moving" name="depart"></transition>
| </state>
|
| <super-state name="Moving">
| <state name="Stopped">
| <transition to="Started" name="start"></transition>
| </state>
| <state name="Started">
| <transition to="Stopped" name="stop"></transition>
| </state>
| <timer duedate="30 seconds" repeat="30 seconds">
| <script>
| System.out.println("We're late ");
| </script>
| </timer>
| <transition to="end-state1" name="arrive"></transition>
| </super-state>
Produces the following:
anonymous wrote : 10:56:40,515 INFO [STDOUT] We're late
| 10:56:40,562 INFO [STDOUT] We're late
| 10:56:40,609 ERROR [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.graph.exe.Token#578]
| at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1765)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2407)
| at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
| at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
| at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
| 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.CacheSynchronization.beforeCompletion(CacheSynchronization.java:59)
| at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:247)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
| at com.arjuna.ats.arjuna.AtomicAction.end(AtomicAction.java:216)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commit(TransactionImple.java:240)
| at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:501)
| at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361)
| at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
| at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
| at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
| at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
| at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:527)
| at org.jboss.ejb.Container.invoke(Container.java:960)
| at org.jboss.ejb.txtimer.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:99)
| at org.jboss.ejb.txtimer.TimerImpl$TimerTaskImpl.run(TimerImpl.java:561)
| at java.util.TimerThread.mainLoop(Unknown Source)
| at java.util.TimerThread.run(Unknown Source)
| 10:56:40,609 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator_2] TwoPhaseCoordinator.beforeCompletion - failed for com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple@1a40ea6
| org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.graph.exe.Token#578]
| at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1765)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2407)
| at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
| at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
| at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
| 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.CacheSynchronization.beforeCompletion(CacheSynchronization.java:59)
| at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:247)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
| at com.arjuna.ats.arjuna.AtomicAction.end(AtomicAction.java:216)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commit(TransactionImple.java:240)
| at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:501)
| at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361)
| at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
| at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
| at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
| at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
| at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:527)
| at org.jboss.ejb.Container.invoke(Container.java:960)
| at org.jboss.ejb.txtimer.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:99)
| at org.jboss.ejb.txtimer.TimerImpl$TimerTaskImpl.run(TimerImpl.java:561)
| at java.util.TimerThread.mainLoop(Unknown Source)
| at java.util.TimerThread.run(Unknown Source)
| 10:56:40,609 ERROR [LogInterceptor] TransactionRolledbackLocalException in method: public abstract void javax.ejb.TimedObject.ejbTimeout(javax.ejb.Timer), causedBy:
| javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't commit because the transaction is in aborted state
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commit(TransactionImple.java:255)
| at org.jboss.ejb.plugins.TxInterceptorCMT.endTransaction(TxInterceptorCMT.java:501)
| at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:361)
| at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:181)
| at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:168)
| at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:205)
| at org.jboss.ejb.plugins.ProxyFactoryFinderInterceptor.invoke(ProxyFactoryFinderInterceptor.java:138)
| at org.jboss.ejb.EntityContainer.internalInvoke(EntityContainer.java:527)
| at org.jboss.ejb.Container.invoke(Container.java:960)
| at org.jboss.ejb.txtimer.TimedObjectInvokerImpl.callTimeout(TimedObjectInvokerImpl.java:99)
| at org.jboss.ejb.txtimer.TimerImpl$TimerTaskImpl.run(TimerImpl.java:561)
| at java.util.TimerThread.mainLoop(Unknown Source)
| at java.util.TimerThread.run(Unknown Source)
| Caused by: org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [org.jbpm.graph.exe.Token#578]
| at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1765)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2407)
| at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
| at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
| at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
| at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
| at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
| 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.CacheSynchronization.beforeCompletion(CacheSynchronization.java:59)
| at com.arjuna.ats.internal.jta.resources.arjunacore.SynchronizationImple.beforeCompletion(SynchronizationImple.java:114)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.beforeCompletion(TwoPhaseCoordinator.java:247)
| at com.arjuna.ats.arjuna.coordinator.TwoPhaseCoordinator.end(TwoPhaseCoordinator.java:86)
| at com.arjuna.ats.arjuna.AtomicAction.end(AtomicAction.java:216)
| at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commit(TransactionImple.java:240)
| ... 12 more
| 10:56:40,609 ERROR [TimerImpl] Error invoking ejbTimeout: org.jboss.tm.JBossTransactionRolledbackLocalException: - nested throwable: (javax.transaction.RollbackException: [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] [com.arjuna.ats.internal.jta.transaction.arjunacore.commitwhenaborted] Can't commit because the transaction is in aborted state)
| 10:56:40,781 INFO [STDOUT] We're late
| 10:57:10,468 INFO [STDOUT] We're late
| 10:57:10,578 INFO [STDOUT] We're late
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4257203#4257203
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4257203
14 years, 9 months