This content has been marked as final.
Show 2 replies
-
1. Re: How to trigger Sub-process from custom state recursively
kukeltje Sep 2, 2009 9:19 AM (in response to ekobir)look/search at the 'foreach' example (for jbpm3 ) in the wiki. Instead of multiple tasks, just start multiple subprocesses.
-
2. Re: How to trigger Sub-process from custom state recursively
ekobir Sep 3, 2009 7:03 AM (in response to ekobir)Hi Ronald
Thanks for advice... I re-implemented ForEachFork and ForEachJoin for jbpm4 by using the code in ForkActivity and JoinActivity. Instead of using sub-process I used "group".
I tried to execute "groups" concurrently in the fork by labeling them with "continue=async".
But it created a lot of database level problems.
Then, I decided to test this with original JBPM functionality but again I got exceptions.
My question is --> Is there a way to execute "groups" async with Fork-Join or Do you suggest something else?
Please check following information.<?xml version="1.0" encoding="UTF-8"?> <process name="testForkJoin" xmlns="http://jbpm.org/4.0/jpdl"> <start name="start1" g="255,53,48,48"> <transition name="to state1" to="state1" g="-63,-22" /> </start> <custom g="198,134,157,52" name="state1" class="com.actions.RandomActivity"> <transition to="fork1" g="-52,-22" /> </custom> <fork name="fork1" g="252,291,48,48"> <transition name="to state2" to="state2" g="-63,-22" /> <transition name="to state3" to="state3" g="-63,-22" /> </fork> <group name="state2"> <start> <transition to="state4" /> </start> <custom g="198,134,157,52" name="state4" class="com.actions.RandomActivity" continue="async"> <transition to="groupDone1" g="-52,-22" /> </custom> <end name="groupDone1" /> <transition to="join1" /> </group> <group name="state3" continue="async"> <start> <transition to="state5" /> </start> <custom g="198,134,157,52" name="state5" class="com.actions.RandomActivity" continue="async"> <transition to="groupDone2" g="-52,-22" /> </custom> <end name="groupDone2" /> <transition to="join1" /> </group> <join name="join1" g="256,461,48,48"> <transition name="to end1" to="end1" g="-54,-22" /> </join> <end name="end1" g="263,568,48,48" /> </process>
and Simple RandomActivitypublic void execute(ActivityExecution ae) throws Exception { System.out.println("in random activity"); for(int i=0; i < 10; i++){ Thread.sleep(10); System.out.println(Thread.currentThread().getName()+":"+i); } }
Here is the exception
SEVERE: 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.pvm.internal.model.ExecutionImpl#3]
at org.hibernate.persister.entity.AbstractEntityPersister.check(AbstractEntityPersister.java:1792)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2435)
at org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2335)
at org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2635)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:115)
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:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.jbpm.pvm.internal.tx.HibernateSessionResource.prepare(HibernateSessionResource.java:54)
at org.jbpm.pvm.internal.tx.StandardTransaction.commit(StandardTransaction.java:106)
at org.jbpm.pvm.internal.tx.StandardTransaction.complete(StandardTransaction.java:65)
at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:61)
at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:54)
at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:55)
at org.jbpm.pvm.internal.svc.ExecutionServiceImpl.startProcessInstanceByKey(ExecutionServiceImpl.java:70)
at com.playphone.alexander.afp.workFlowProcessor.TestWorkFlow.testForkJoinGroup(TestWorkFlow.java:63)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.junit.JUnitTestSet.execute(JUnitTestSet.java:213)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.executeTestSet(AbstractDirectoryTestSuite.java:140)
at org.apache.maven.surefire.suite.AbstractDirectoryTestSuite.execute(AbstractDirectoryTestSuite.java:127)
at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:345)
at org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:1009)