code: @Override
      public synchronized void initChain(String chainName) throws ChannelException, ChainException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "initChain: " + chainName);
          }
          if (null == chainName) {
              throw new InvalidChainNameException("Null chain name");
          }
  
          // Find the chain in the framework configuration.
          ChainData chainData = chainDataMap.get(chainName);
          if (null == chainData) {
              InvalidChainNameException e = new InvalidChainNameException("Unable to init unknown chain, " + chainName);
              FFDCFilter.processException(e, getClass().getName() + ".initChain", "2142", this, new Object[] { chainName });
              throw e;
  
          }
  
          // Ensure we have an inbound chain.
          if (FlowType.OUTBOUND.equals(chainData.getType())) {
              throw new InvalidChainNameException("Outbound chain cannot use this interface.");
          }
  
          // Verify the chain isn't already in the runtime.
          Chain chain = getRunningChain(chainName);
          if (null != chain) {
              InvalidRuntimeStateException e = new InvalidRuntimeStateException("Chain cannot be initialized, its already in the runtime.");
              FFDCFilter.processException(e, getClass().getName() + ".initChain", "2158", this, new Object[] { chain });
              throw e;
          }
  
          initChainInternal(chainData);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "initChain");
          }
      }
docs: /*
  @see com.ibm.wsspi.channelfw.ChannelFramework#initChain(String)