[jboss-user] [JBoss jBPM] - Concurrency Problem

wjn811 do-not-reply at jboss.com
Wed Jun 17 23:04:38 EDT 2009


Hi guys,

I am a poor java developer... and I'm on my way pushing myself to learn more.

I met a problem when I use jBPM4.0CR1. 

The problem is described as following,

My boss asked me to make a workflow, which mainly contains 2 concurrency flows. And unfortunately, one is contained in another... 
That means,  a super process has a 'Con1' fork activity. And among the executions under that 'Con1', there is a sub-process, which also contains another fork activity 'Con2'.

Here is jpdls, (concurrency.jpdl.xml & sub_concurrency.jpdl.xml) 
I hope you will understand what I am talking about~

concurrency.jpdl.xml


  | <process name="concurruncy" xmlns="http://jbpm.org/4.0/jpdl">
  |    <start g="13,103,48,48" name="start1">
  |       <transition g="-52,-22" name="to fork1" to="fork1"/>
  |    </start>
  |    <end g="818,27,48,48" name="end1"/>
  |    <fork g="100,101,48,48" name="fork1">
  |       <transition g="-52,-22" name="to task1" to="task1"/>
  |       <transition name="to task2" to="task2" g="-52,-22"/>
  |    </fork>
  |    <task assignee="#{u1}" g="240,145,92,52" name="task1">
  |       <transition g="-56,-21" name="to Subprocess1" to="Subprocess1"/>
  |    </task>
  |    <task assignee="#{u2}" g="223,12,92,52" name="task2">
  |       <transition g="-49,-22" name="to join2" to="join2"/>
  |    </task>
  |    <join g="681,26,48,48" name="join2">
  |       <transition g="-50,-22" name="to end1" to="end1"/>
  |    </join>
  |    <sub-process g="420,139,92,52" name="Subprocess1" sub-process-key="sub_concurrency">
  | 	   <parameter-in subvar="u2" var="u2"/>
  | 	   <parameter-in subvar="u4" var="u4"/>
  |       <transition g="-49,-22" name="to join2" to="join2"/>
  |    </sub-process>
  | </process>
  | 

sub_concurrency.jpdl.xml

  | <process name="sub_concurrency" xmlns="http://jbpm.org/4.0/jpdl">
  |    <start g="89,110,48,48" name="start1">
  |       <transition g="-52,-22" name="to fork1" to="fork1"/>
  |    </start>
  |    <end g="596,115,48,48" name="sub_end"/>
  |    <fork g="200,107,48,48" name="fork1">
  |       <transition g="-52,-22" name="to task4" to="task4"/>
  |       <transition name="to task3" to="task3" g="-52,-22"/>
  |    </fork>
  |    <task assignee="#{u3}" g="304,60,92,52" name="task3">
  |       <transition g="-28,-25" name="to sub_join" to="sub_join"/>
  |    </task>
  |    <task assignee="#{u4}" g="309,150,92,52" name="task4">
  |       <transition g="-27,3" name="to sub_join" to="sub_join"/>
  |    </task>
  |    <join g="483,113,48,48" name="sub_join">
  |       <transition g="-36,-25" name="to sub_end" to="sub_end"/>
  |    </join>
  | </process>
  | 

I'm sorry. I apply these nonsense names on assignees and task names :)

I make a JUnit test to run this work flow.
Then, java exceptions appears,




  | 10:46:30,185 FIN | [Execution] execution[to task4] ends
  | 10:46:30,187 FIN | [Execution] execution[to task3] ends
  | 10:46:30,187 FIN | [ExecuteActivity] executing activity(sub_end)
  | 10:46:30,188 FIN | [Execution] process-instance ends with state ended
  | 10:46:30,203 FIN | [Signal] execution[to task1] signals activity(Subprocess1)
  | 10:46:30,204 WRN | [ProxyWarnLog] Narrowing proxy to class org.jbpm.jpdl.internal.model.JpdlExecution - this operation breaks ==
  | 10:46:30,204 FIN | [ExecuteActivity] execution[to task1] executes activity(join2)
  | 10:46:30,213 FIN | [Execution] execution[to task1] ends
  | 10:46:30,215 FIN | [Execution] execution[to task2] ends
  | 10:46:30,215 FIN | [ExecuteActivity] executing activity(end1)
  | 10:46:30,215 FIN | [Execution] process-instance ends with state ended
  | 10:46:30,228 WRN | [JDBCExceptionReporter] SQL Error: 1451, SQLState: 23000
  | 10:46:30,229 SEV | [JDBCExceptionReporter] Cannot delete or update a parent row: a foreign key constraint fails (`jbpm4db/jbpm4_execution`, CONSTRAINT `FK_EXEC_SUPEREXEC` FOREIGN KEY (`SUPEREXEC_`) REFERENCES `jbpm4_execution` (`DBID_`))
  | ### EXCEPTION ###########################################
  | 10:46:30,229 SEV | [AbstractFlushingEventListener] Could not synchronize database state with session
  | org.hibernate.exception.ConstraintViolationException: could not delete: [org.jbpm.jpdl.internal.model.JpdlExecution#2]
  | 	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
  | 	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
  | 	at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2569)
  | 	at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2725)
  | 	at org.hibernate.action.EntityDeleteAction.execute(EntityDeleteAction.java:97)
  | 	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:172)
  | 	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
  | 	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:64)
  | 	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:996)
  | 	at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1141)
  | 	at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
  | 	at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:835)
  | 	at org.jbpm.pvm.internal.hibernate.DbSessionImpl.findProcessInstanceById(DbSessionImpl.java:175)
  | 	at org.jbpm.pvm.internal.hibernate.DbSessionImpl.deleteProcessInstance(DbSessionImpl.java:225)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl.end(ExecutionImpl.java:354)
  | 	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.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl_$$_javassist_3.end(ExecutionImpl_$$_javassist_3.java)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl.end(ExecutionImpl.java:364)
  | 	at org.jbpm.jpdl.internal.activity.EndActivity.execute(EndActivity.java:82)
  | 	at org.jbpm.jpdl.internal.activity.EndActivity.execute(EndActivity.java:45)
  | 	at org.jbpm.pvm.internal.model.op.ExecuteActivity.perform(ExecuteActivity.java:60)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl.performAtomicOperationSync(ExecutionImpl.java:625)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl.fire(ExecutionImpl.java:535)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl.take(ExecutionImpl.java:441)
  | 	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.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:197)
  | 	at org.jbpm.pvm.internal.model.ExecutionImpl_$$_javassist_3.take(ExecutionImpl_$$_javassist_3.java)
  | 

I find that all the execution has been well finished and inactive executions will be deleted from jbpm4_exection


  | 10:53:39,305 FIN | [ExecuteActivity] execution[to task1] executes activity(join2)
  | 10:53:39,311 FIN | [Execution] execution[to task1] ends
  | 10:53:39,314 FIN | [Execution] execution[to task2] ends
  | 10:53:39,314 FIN | [ExecuteActivity] executing activity(end1)
  | 10:53:39,314 FIN | [Execution] process-instance ends with state ended
  | 

But failed because of  foreign key constraint. I dont know why...

Do I make the problem clearly described?

Please help me~ Thx!


My mail: crazydog.eric at gmail.com
-----------------------------------------------------
And I find that if I add a state activity just after sub-process, which will join together with task2, things go right! Is it a kind of answer?


View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4238362#4238362

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4238362



More information about the jboss-user mailing list