code: @Override
      public synchronized ChainData[] getRunningChains(String channelName) throws ChannelException {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "getRunningChains: " + channelName);
          }
          if (null == channelName) {
              throw new InvalidChannelNameException("Null channelName found");
          }
  
          // Find the channel data representing the channel name.
          ChannelDataImpl parent = (ChannelDataImpl) channelDataMap.get(channelName);
          if (parent == null) {
              throw new InvalidChannelNameException("Channel not found in config, " + channelName);
          }
  
          ChainDataImpl chainData = null;
          List<ChainData> chainDataList = new ArrayList<ChainData>();
          ChannelContainer channelContainer = null;
          Iterator<Chain> chainIter = null;
  
          // The children of the parent represent the runtime channels.
          Iterator<ChildChannelDataImpl> childIter = parent.children();
          while (childIter.hasNext()) {
              // Extract the channel container for each.
              // Note, the child name is different from the parent.
              channelContainer = channelRunningMap.get(childIter.next().getName());
              // Iterate the chains.
              chainIter = channelContainer.getChainMap().values().iterator();
              while (chainIter.hasNext()) {
                  chainData = (ChainDataImpl) chainIter.next().getChainData();
                  chainDataList.add(chainData.getExternalChainData());
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "getRunningChains");
          }
          return chainDataList.toArray(new ChainData[chainDataList.size()]);
      }
docs: /*
  @see
  com.ibm.wsspi.channelfw.ChannelFramework#getRunningChains(java.lang.String)