Version 5

    Currently (JIRA issue 288}, sub-tokens created as a result of a

    .

     

    ...
       <join name='MY_JOIN' >
            <event type='node-leave' >
                <!-- workaround for http://jira.jboss.org/jira/browse/JBPM-288 -->
                <action name='endChildTokens' class='com.???.EndForkedTokensAH' ></action>
            </event>
            <transition to='NEXT_NODE' ></transition>
        </join>
    ...
    

     

    ...and the simple ActionHandler to do the work...

     

    /*
     * EndForkedTokensAH.java
     *
     * Ends each child token that is at the same node as the parent.  Used to end
     * child tokens after a join.
     */
    
    package com.???;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.jbpm.graph.def.ActionHandler;
    import org.jbpm.graph.exe.ExecutionContext;
    import org.jbpm.graph.exe.Token;
    import org.jbpm.taskmgmt.exe.*;
    
    import java.io.*;
    import java.util.Properties;
    import java.util.List;
    import java.util.Collection;
    import java.util.Iterator;
    import java.util.Map;
    
    /**
     * @author brittm
     */
    public class EndForkedTokensAH implements ActionHandler{
        
        public static Log log = LogFactory.getLog(EndForkedTokensAH.class.getName());
        
        /** Creates a new instance of EndForkedTokensAH */
        public EndForkedTokensAH() {
        }
        
        /*Execute the action handler*/
        public void execute(ExecutionContext executionContext){
            
            try{
                Token tok = executionContext.getToken();
                log.debug(tok.getFullName() + " " + tok.getId());
                log.debug("current node: " + tok.getNode().getName());
                
                Map<?,Token> childtokens = (Map<?,Token>)tok.getActiveChildren();
                log.debug("Active children: " + childtokens.size());
                for(Token cht : childtokens.values()) {
                    log.debug("  ending " + cht.getFullName() + " " + cht.getId());
                    cht.end(false);
                }
    
            }catch(Exception e){
                log.error(e.getMessage(), e);
            }
        }
    }