use of org.jgroups.fork.ForkProtocol in project JGroups by belaban.
the class FORK method createForkStack.
/**
* Returns the fork stack for fork_stack_id (if exitstent), or creates a new fork-stack from protocols and adds it
* into the hashmap of fork-stack (key is fork_stack_id).
* Method init() will be called on each protocol, from bottom to top.
* @param fork_stack_id The key under which the new fork-stack should be added to the fork-stacks hashmap
* @param protocols A list of protocols from <em>bottom to top</em> to be inserted. They will be sandwiched
* between ForkProtocolStack (top) and ForkProtocol (bottom). The list can be empty (or null) in
* which case we won't create any protocols, but still have a separate fork-stack inserted.
* @param initialize If false, the ref count 'inits' will not get incremented and init() won't be called. This is
* needed when creating a fork stack from an XML config inside of the FORK protocol. The protocols
* in the fork stack will only get initialized on the first ForkChannel creation
* @return The new {@link ForkProtocolStack}, or the existing stack (if present)
*/
public synchronized ProtocolStack createForkStack(String fork_stack_id, List<Protocol> protocols, boolean initialize) throws Exception {
Protocol bottom;
if ((bottom = get(fork_stack_id)) != null) {
ForkProtocolStack retval = getForkStack(bottom);
return initialize ? retval.incrInits() : retval;
}
List<Protocol> prots = new ArrayList<>();
// add a ForkProtocol as bottom protocol
prots.add(bottom = new ForkProtocol(fork_stack_id).setDownProtocol(this));
if (protocols != null)
prots.addAll(protocols);
ForkProtocolStack fork_stack = (ForkProtocolStack) new ForkProtocolStack(getUnknownForkHandler(), prots, fork_stack_id).setChannel(this.stack.getChannel());
fork_stack.init();
if (initialize)
fork_stack.incrInits();
fork_stacks.put(fork_stack_id, bottom);
return fork_stack;
}
Aggregations