Hello,

The following graph produces the problem:


  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <process-definition 
  |   xmlns="http://jbpm.org/3/jpdl";
  |   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
  |   xsi:schemaLocation="http://jbpm.org/3/jpdl 
http://jbpm.org/xsd/jpdl-3.0.xsd";
  |   name="simple">
  |    <start-state name="start">
  |       <transition name="tr1" to="state1"></transition>
  |    </start-state>
  |    <state name="left">
  |       <transition name="tr1" to="join1"></transition>
  |    </state>
  |    <end-state name="end"></end-state>
  |    <state name="right">
  |       <transition name="tr2" to="join1"></transition>
  |    </state>
  |    <fork name="fork1">
  |       <transition name="tr1" to="left"></transition>
  |       <transition name="tr2" to="right"></transition>
  |    </fork>
  |    <join name="join1">
  |       <transition name="tr1" to="state2"></transition>
  |    </join>
  |    <state name="state1">
  |       <transition name="tr1" to="fork1"></transition>
  |    </state>
  |    <state name="state2">
  |       <transition name="tr1" to="end"></transition>
  |    </state>
  | </process-definition>
  | 

I am using the following code:

  | package com.sample;
  | 
  | 
  | 
  | import java.util.Iterator;
  | 
  | import java.util.Map;
  | 
  | 
  | 
  | import junit.framework.TestCase;
  | 
  | 
  | 
  | import org.jbpm.graph.def.ProcessDefinition;
  | 
  | import org.jbpm.graph.exe.ProcessInstance;
  | 
  | import org.jbpm.graph.exe.Token;
  | 
  | import org.jbpm.graph.node.Join;
  | 
  | 
  | 
  | public class SimpleProcessTest extends TestCase {
  | 
  | 
  | 
  |     private ProcessInstance processInstance = null;
  | 
  | 
  | 
  |     public ProcessInstance getProcessInstance() {
  | 
  |             return processInstance;
  | 
  |     }
  | 
  | 
  | 
  |     public void setProcessInstance(ProcessInstance processInstance) {
  | 
  |             this.processInstance = processInstance;
  | 
  |     }
  | 
  | 
  | 
  |     public void testSimpleProcess() throws Exception {
  | 
  | 
  | 
  |             // Extract a process definition from the processdefinition.xml 
file.
  | 
  |             ProcessDefinition definition = ProcessDefinition
  | 
  |                             
.parseXmlResource("simple.par/processdefinition.xml");
  | 
  | 
  | 
  |             // Create an instance of the process definition.
  | 
  |             ProcessInstance instance = new ProcessInstance(definition);
  | 
  |             this.setProcessInstance(instance);
  | 
  | 
  | 
  |             this.signalProcess("tr1");
  | 
  |             this.signalProcess("tr1");
  | 
  |             this.signalProcess("tr1");
  | 
  |             this.signalProcess("tr1");
  | 
  |             this.signalProcess("tr2");
  | 
  |             this.signalProcess("tr2");
  | 
  |             this.signalProcess("tr2");
  | 
  |             this.signalProcess("tr1");
  | 
  |     }
  | 
  | 
  | 
  |     public void signalProcess(String signal) {
  | 
  |             if (signal != null) {
  | 
  |                     System.out.println("signal : " + signal);
  | 
  |                     ProcessInstance processInstance = 
this.getProcessInstance();
  | 
  |                     this.signalTokens(processInstance.getRootToken(), 
signal);
  | 
  |                     System.out.println("----------------------");
  | 
  |             } else {
  | 
  |                     System.out.println("signal = null\n");
  | 
  |             }
  | 
  |     }
  | 
  | 
  | 
  |     public void signalTokens(Token token, String signal) {
  | 
  |             Map activeChildrenMap = token.getActiveChildren();
  | 
  |             
  | 
  |             
  | 
  |             // if (token.hasActiveChildren())
  | 
  |             if (activeChildrenMap.isEmpty() == false) {
  | 
  |                     System.out.println("token has active children\n");
  | 
  |                     Iterator itr = activeChildrenMap.values().iterator();
  | 
  |                     while (itr.hasNext()) {
  | 
  |                             Token signalToken = (Token) itr.next();
  | 
  |                             
  | 
  |                             if ((signalToken.getNode() instanceof 
Join)==false)
  | 
  |                                     signalTokens(signalToken, signal);
  | 
  |                             else
  | 
  |                                     System.out.println("it's a join\n");
  | 
  |                     }
  | 
  |             } else {
  | 
  |                     // token itself must be active
  | 
  |                     System.out.println("token name : " + token.getName());
  | 
  |                     System.out.println("node name : " + 
token.getNode().getName());
  | 
  |                     Map leavingTransitions = 
token.getNode().getLeavingTransitionsMap();
  | 
  | 
  | 
  |                     for (Iterator it = 
leavingTransitions.entrySet().iterator(); it
  | 
  |                                     .hasNext();) {
  | 
  |                             Map.Entry entry = (Map.Entry) it.next();
  | 
  |                             String key = (String) entry.getKey();
  | 
  |                             System.out.println("leaving transition : " + 
key);
  | 
  |                             if (key.compareTo(signal) == 0) {
  | 
  |                                     System.out.println("[signalling 
transition]");
  | 
  |                                     token.signal(signal);
  | 
  |                                     break;
  | 
  |                             }
  | 
  |                     }
  | 
  |                     System.out.println();
  | 
  |             }
  | 
  |     }
  | 
  | 
  | 
  | }
  | 
  | 

the output is the following:
anonymous wrote : 
  | 
  | 09:24:22,275 DEBUG GraphElement : event 'process-start' on 
'ProcessDefinition(simple)' for 'Token(/)'
  | signal : tr1
  | token name : null
  | node name : start
  | leaving transition : tr1
  | [signalling transition]
  | 09:24:22,284 DEBUG GraphElement : event 'before-signal' on 
'StartState(start)' for 'Token(/)'
  | 09:24:22,287 DEBUG GraphElement : event 'node-leave' on 'StartState(start)' 
for 'Token(/)'
  | 09:24:22,294 DEBUG GraphElement : event 'transition' on 'Transition(tr1)' 
for 'Token(/)'
  | 09:24:22,296 DEBUG GraphElement : event 'node-enter' on 'State(state1)' for 
'Token(/)'
  | 09:24:22,298 DEBUG GraphElement : event 'after-signal' on 
'StartState(start)' for 'Token(/)'
  | 
  | ----------------------
  | signal : tr1
  | token name : null
  | node name : state1
  | leaving transition : tr1
  | [signalling transition]
  | 09:24:22,306 DEBUG GraphElement : event 'before-signal' on 'State(state1)' 
for 'Token(/)'
  | 09:24:22,308 DEBUG GraphElement : event 'node-leave' on 'State(state1)' for 
'Token(/)'
  | 09:24:22,310 DEBUG GraphElement : event 'transition' on 'Transition(tr1)' 
for 'Token(/)'
  | 09:24:22,311 DEBUG GraphElement : event 'node-enter' on 'Fork(fork1)' for 
'Token(/)'
  | 09:24:22,314 DEBUG GraphElement : event 'node-leave' on 'Fork(fork1)' for 
'Token(/tr1)'
  | 09:24:22,317 DEBUG GraphElement : event 'transition' on 'Transition(tr1)' 
for 'Token(/tr1)'
  | 09:24:22,319 DEBUG GraphElement : event 'node-enter' on 'State(left)' for 
'Token(/tr1)'
  | 09:24:22,322 DEBUG GraphElement : event 'node-leave' on 'Fork(fork1)' for 
'Token(/tr2)'
  | 09:24:22,323 DEBUG GraphElement : event 'transition' on 'Transition(tr2)' 
for 'Token(/tr2)'
  | 09:24:22,327 DEBUG GraphElement : event 'node-enter' on 'State(right)' for 
'Token(/tr2)'
  | 09:24:22,331 DEBUG GraphElement : event 'after-signal' on 'State(state1)' 
for 'Token(/)'
  | 
  | ----------------------
  | signal : tr1
  | token has active children
  | 
  | token name : tr1
  | node name : left
  | leaving transition : tr1
  | [signalling transition]
  | 09:24:22,340 DEBUG GraphElement : event 'before-signal' on 'State(left)' 
for 'Token(/tr1)'
  | 09:24:22,341 DEBUG GraphElement : event 'node-leave' on 'State(left)' for 
'Token(/tr1)'
  | 09:24:22,342 DEBUG GraphElement : event 'transition' on 'Transition(tr1)' 
for 'Token(/tr1)'
  | 09:24:22,344 DEBUG GraphElement : event 'node-enter' on 'Join(join1)' for 
'Token(/tr1)'
  | 09:24:22,346 DEBUG Join : join will not yet reactivate parent: found 
concurrent token 'Token(/tr2)'
  | 09:24:22,347 DEBUG GraphElement : event 'after-signal' on 'State(left)' for 
'Token(/tr1)'
  | 
  | token name : tr2
  | node name : right
  | leaving transition : tr2
  | 
  | ----------------------
  | signal : tr1
  | token has active children
  | 
  | it's a join
  | 
  | token name : tr2
  | node name : right
  | leaving transition : tr2
  | 
  | ----------------------
  | signal : tr2
  | token has active children
  | 
  | it's a join
  | 
  | token name : tr2
  | node name : right
  | leaving transition : tr2
  | [signalling transition]
  | 09:24:22,374 DEBUG GraphElement : event 'before-signal' on 'State(right)' 
for 'Token(/tr2)'
  | 09:24:22,375 DEBUG GraphElement : event 'node-leave' on 'State(right)' for 
'Token(/tr2)'
  | 09:24:22,376 DEBUG GraphElement : event 'transition' on 'Transition(tr2)' 
for 'Token(/tr2)'
  | 09:24:22,378 DEBUG GraphElement : event 'node-enter' on 'Join(join1)' for 
'Token(/tr2)'
  | 09:24:22,380 DEBUG GraphElement : event 'node-leave' on 'Join(join1)' for 
'Token(/)'
  | 09:24:22,382 DEBUG GraphElement : event 'transition' on 'Transition(tr1)' 
for 'Token(/)'
  | 09:24:22,423 DEBUG GraphElement : event 'node-enter' on 'State(state2)' for 
'Token(/)'
  | 09:24:22,424 DEBUG GraphElement : event 'after-signal' on 'State(right)' 
for 'Token(/tr2)'
  | 
  | ----------------------
  | signal : tr2
  | token has active children
  | 
  | it's a join
  | 
  | it's a join
  | 
  | ----------------------
  | signal : tr2
  | token has active children
  | 
  | it's a join
  | 
  | it's a join
  | 
  | ----------------------
  | signal : tr1
  | token has active children
  | 
  | it's a join
  | 
  | it's a join
  | 
  | ----------------------
  | 
  | 
  | 



How can I resolve this and have a generic method to signal a graph  with a 
named signal so any active token that has a named transition with the nam of 
the signal is signalled.

Dank bij voorbaat.

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

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


-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=103432&bid=230486&dat=121642
_______________________________________________
JBoss-user mailing list
JBoss-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to