[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