Search in sources :

Example 1 with ForkProtocol

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;
}
Also used : ArrayList(java.util.ArrayList) ForkProtocol(org.jgroups.fork.ForkProtocol) ForkProtocol(org.jgroups.fork.ForkProtocol) Protocol(org.jgroups.stack.Protocol) ForkProtocolStack(org.jgroups.fork.ForkProtocolStack)

Aggregations

ArrayList (java.util.ArrayList)1 ForkProtocol (org.jgroups.fork.ForkProtocol)1 ForkProtocolStack (org.jgroups.fork.ForkProtocolStack)1 Protocol (org.jgroups.stack.Protocol)1