code: @Override
      public synchronized void startChain(String chainName) throws ChannelException, ChainException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "startChain: " + chainName);
          }
          if (null == chainName) {
              throw new InvalidChainNameException("Null chain name");
          }
  
          // Get the chain configuration
          ChainData chainData = this.chainDataMap.get(chainName);
          if (null == chainData) {
              InvalidChainNameException e = new InvalidChainNameException("Nonexistent chain configuration");
              throw e;
          }
  
          // Ensure we have an inbound chain.
          if (FlowType.OUTBOUND.equals(chainData.getType())) {
              throw new InvalidChainNameException("Outbound chain cannot use this interface.");
          }
  
          startChainInternal(chainData);
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "startChain");
          }
      }
docs: /*
  @see com.ibm.wsspi.channelfw.ChannelFramework#startChain(String)