@FFDCIgnore(InvalidRuntimeStateException.class)
    public synchronized void stop() {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
            Tr.event(this, tc, "stop chain " + this);
        }

        // When the chain is being stopped, remove the previously
        // registered EndPoint created in update
        endpointMgr.removeEndPoint(endpointName);

        // We don't have to check enabled/disabled here: chains are always allowed to stop.
        if (currentConfig == null || chainState.get() <= ChainState.QUIESCED.val)
            return;

        // Quiesce and then stop the chain. The CFW internally uses a StopTimer for
        // the quiesce/stop operation-- the listener method will be called when the chain
        // has stopped. So to see what happens next, visit chainStopped
        try {
            ChainData cd = cfw.getChain(chainName);
            if (cd != null) {
                cfw.stopChain(cd, cfw.getDefaultChainQuiesceTimeout());
                stopWait.waitForStop(cfw.getDefaultChainQuiesceTimeout(), this); // BLOCK
                try {
                    cfw.destroyChain(cd);
                    cfw.removeChain(cd);
                } catch (InvalidRuntimeStateException e) {
                    if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                        Tr.debug(this, tc, "Error destroying or removing chain " + chainName, this, e);
                    }
                }
            }
        } catch (ChannelException e) {
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                Tr.debug(this, tc, "Error stopping chain " + chainName, this, e);
            }
        } catch (ChainException e) {
            if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                Tr.debug(this, tc, "Error stopping chain " + chainName, this, e);
            }
        }
    }
@ FFDCIgnore ( InvalidRuntimeStateException . class ) public synchronized void stop ( ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isEventEnabled ( ) ) { Tr . event ( this , tc , "stop chain " + this ) ; } endpointMgr . removeEndPoint ( endpointName ) ; if ( currentConfig == null || chainState . get ( ) <= ChainState . QUIESCED . val ) return ; try { ChainData cd = cfw . getChain ( chainName ) ; if ( cd != null ) { cfw . stopChain ( cd , cfw . getDefaultChainQuiesceTimeout ( ) ) ; stopWait . waitForStop ( cfw . getDefaultChainQuiesceTimeout ( ) , this ) ; try { cfw . destroyChain ( cd ) ; cfw . removeChain ( cd ) ; } catch ( InvalidRuntimeStateException e ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( this , tc , "Error destroying or removing chain " + chainName , this , e ) ; } } } } catch ( ChannelException e ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( this , tc , "Error stopping chain " + chainName , this , e ) ; } } catch ( ChainException e ) { if ( TraceComponent . isAnyTracingEnabled ( ) && tc . isDebugEnabled ( ) ) { Tr . debug ( this , tc , "Error stopping chain " + chainName , this , e ) ; } } }
Stop this chain. The chain will have to be recreated when port is updated
notification/follow-on of stop operation is in the chainStopped listener method.