Here is the SpawningMultipleTransitions

  | 
  | public class SpawningMultipleTransitions extends Node implements Parsable, 
ActionHandler {
  | 
  | 
  |     private final Logger log = Logger.getLogger(getClass().getName());
  |     
  |     
  |     public void execute(ExecutionContext executionContext) {
  |             Token token = executionContext.getToken();
  |             
  |             // Get process instance
  |             Long pid = (Long) 
executionContext.getVariable("processInstanceId");
  |             JbpmContext jbpmContext = 
JbpmConfiguration.getInstance().createJbpmContext();
  |             ProcessInstance processInstance = 
jbpmContext.loadProcessInstance(pid);
  |             //---------------------------------------------
  |             
  |             // phase one: collect all the transitionNames
  |             List forkedTokens = new ArrayList();
  |             
  |             // by default, the fork spawns a token for each leaving 
transition
  |             Collection transitionNames = 
token.getNode().getLeavingTransitionsMap().keySet();
  |             //-------------------------
  |             //----------------------------------------
  |             
  | //           phase two: create forked tokens for the collected transition 
names
  |             Iterator iter = transitionNames.iterator();
  |             while (iter.hasNext()) {
  |                     String transitionName = (String) iter.next();
  |                     forkedTokens.add(createForkedToken(token, 
transitionName));
  |             }
  |             //---------------------------------------
  |             
  |             // phase three: launch child tokens from the fork over the 
given transitions
  |             iter = forkedTokens.iterator();
  |             while( iter.hasNext() ) {
  |                     
  |                     ForkedToken forkedToken = (ForkedToken) iter.next();
  |                     Token childToken = forkedToken.token;
  |                     String leavingTransitionName = 
forkedToken.leavingTransitionName;
  |                     
  |                     ExecutionContext childExecutionContext = new 
ExecutionContext(childToken);
  |                     if (leavingTransitionName!=null) {
  |                             
childToken.getNode().leave(childExecutionContext, leavingTransitionName);
  |                             jbpmContext.save(processInstance);
  |                             jbpmContext.save(token);
  |                             log.info("BEM-INFO: Process instance saved with 
id: " + processInstance.getId());//TODO:2DEL
  |                             
  |                     } else {
  |                             
childToken.getNode().leave(childExecutionContext);
  |                     }
  |             }
  |             //---------------------------------
  |             
  |             jbpmContext.close();
  |     }
  |     
  |     protected ForkedToken createForkedToken(Token parent, String 
transitionName) {
  |             // instantiate the new token
  |             Token childToken = new Token(parent, getTokenName(parent, 
transitionName));
  |             
  |             // create a forked token
  |             ForkedToken forkedToken = new ForkedToken(childToken, 
transitionName);
  |             
  |             return forkedToken;
  |     }
  |     
  |     protected String getTokenName(Token parent, String transitionName) {
  |             String tokenName = null;
  |             if ( transitionName != null ) {
  |                     if ( ! parent.hasChild( transitionName ) ) {
  |                             tokenName = transitionName;
  |                     } else {
  |                             int i = 2;
  |                             tokenName = transitionName + Integer.toString( 
i );
  |                             while ( parent.hasChild( tokenName ) ) {
  |                                     i++;
  |                                     tokenName = transitionName + 
Integer.toString( i );
  |                             }
  |                     }
  |             } else { // no transition name
  |                     int size = ( parent.getChildren()!=null ? 
parent.getChildren().size()+1 : 1 );
  |                     tokenName = Integer.toString(size);
  |             }
  |             return tokenName;
  |     }
  |             
  |     static class ForkedToken {
  |             Token token = null;
  |             String leavingTransitionName = null;
  |             public ForkedToken(Token token, String leavingTransitionName) {
  |                     this.token = token;
  |                     this.leavingTransitionName = leavingTransitionName;
  |             }
  |     }
  | }
  | 


Here is the method that is executed before enter SpawningMultipleTransitions



  | public Map nextState(String transition, Long processInstanceId){
  |             
  |             beginSessionTransaction(); // inicializar JBPM object
  |             ProcessInstance processInstance = 
jbpmContext.loadProcessInstance(processInstanceId);
  |             
  |             Token token = processInstance.getRootToken();
  |             String previousNodeName = token.getNode().getName();
  |             
  |             token.signal();// It's here that enter in the              
  |                                      // SpawningMultipleTransitions
  |             
  |             log.info("BEM-INFO: Node transition: PreviousNode --> 
ActualNode\n"
  |                             + previousNodeName + " --> " + 
token.getNode().getName());//TODO:2DEL
  |             
  |             jbpmContext.save(processInstance);
  |             jbpmContext.save(token);
  |             log.info("BEM-INFO: Process instance saved with id: " + 
processInstance.getId());//TODO:2DEL
  |             
  |             commitAndCloseSession(); // commit and close JBPM objects
  |             
  |             return result;
  |     }
  | 

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3977186
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to