XorJoinHandler Your trail: -------------------------------------------------------------------------------- Here is a custom Xor join handler, which means; it accepts the first token arriving the join and cancels all the rest.
package org.jbpm.delegation.join; public class XorJoinHandler implements JoinHandler { public void join(JoinContext joinContext) throws ExecutionException { // if there is really an arriving token if ( joinContext.getConcurrentTokens().size() != 0 ) { //get other tokens than the arriving token Collection brotherTokens = joinContext.getConcurrentTokens().values(); // get the token arriving in this join Token arrivingToken = joinContext.getToken(); //cancel all living brother tokens... Iterator iter = brotherTokens.iterator(); while(iter.hasNext()){ Token token = (Token) iter.next(); // ExecutionService es = JbpmServiceFactory.getInstance().openExecutionService(token.getActorId()); // the line above resulted in infinite waits to some jdbc-lock method (I'm using postgres). This // works for me and looks "cleaner" to me ExecutionService es = joinContext.getExecutionService(token.getActorId()); es.cancelToken(token.getId()); } // reactivate the parent token. joinContext.reactivateToken( arrivingToken.getParent() ); } } } Use it in processdefinition.xml as such: /* 3.1 can not / -------------------------------------------------------------------------------- Go to top Edit this page More info... Attach file... XorJoinHandler Your trail: -------------------------------------------------------------------------------- Here is a custom Xor join handler, which means; it accepts the first token arriving the join and cancels all the rest. package org.jbpm.delegation.join; public class XorJoinHandler implements JoinHandler { public void join(JoinContext joinContext) throws ExecutionException { // if there is really an arriving token if ( joinContext.getConcurrentTokens().size() != 0 ) { //get other tokens than the arriving token Collection brotherTokens = joinContext.getConcurrentTokens().values(); // get the token arriving in this join Token arrivingToken = joinContext.getToken(); //cancel all living brother tokens... Iterator iter = brotherTokens.iterator(); while(iter.hasNext()){ Token token = (Token) iter.next(); // ExecutionService es = JbpmServiceFactory.getInstance().openExecutionService(token.getActorId()); // the line above resulted in infinite waits to some jdbc-lock method (I'm using postgres). This // works for me and looks "cleaner" to me ExecutionService es = joinContext.getExecutionService(token.getActorId()); es.cancelToken(token.getId()); } // reactivate the parent token. joinContext.reactivateToken( arrivingToken.getParent() ); } } } Use it in processdefinition.xml as such: /* 3.1 can not / how can i use in jbpm 3.1 View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3966459#3966459 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3966459 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user