docs: public void terminateConnectionsAssociatedWithChain(String chainName) throws Exception {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(this, tc, "terminateConnectionsAssociatedWithChain", chainName);
  
          synchronized (endPointToGroupMap) {
  
              try {
                  final HashMap<EndPointDescriptor, ConnectionDataGroup> endPointToGroupMapClone = (HashMap<EndPointDescriptor, ConnectionDataGroup>) endPointToGroupMap.clone();
                  Iterator<EndPointDescriptor> it = endPointToGroupMapClone.keySet().iterator();
                  while (it.hasNext()) {
                      EndPointDescriptor ed = it.next();
  
                      if ((((HostPortEndPointDescriptor) ed).chainName).equals(chainName)) {
  
                          ConnectionDataGroup cdGroup = endPointToGroupMapClone.get(ed);
  
                          final List connectionData = cdGroup.getConnections();
  
                          for (final Iterator connectionDataIterator = connectionData.iterator(); connectionDataIterator.hasNext();)
                          {
                              final ConnectionData thisConnectionData = (ConnectionData) connectionDataIterator.next();
                              final OutboundConnection oc = thisConnectionData.getConnection();
                              //close all the conservations associated with the OC
                              Conversation[] conv = oc.getConversations();
                              for (Conversation c : conv) {
                                  try {
                                      c.fastClose();
                                  } catch (Exception e) {//Don't let the exception mess up closing other remaining conservations
                                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                                          SibTr.debug(tc, "Error while fast closing the conversation", e);
                                  }
  
                              }
                              try {
                                  // terminate the physical connection
                                  purgeFromInvalidateImpl(oc, false);
                              } catch (Exception e) {//Don't let the exception mess up closing other remaining connection
                                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                                      SibTr.debug(tc, "Error while purging the physical connection", e);
                              }
                          }
  
                          try {
                              // destroy the OutboundVirtualConnection associated with the chainName
                              cdGroup.getNetworkConnectionFactory().getOutboundVirtualConFactory().destroy();
                          } catch (Exception e) {//Don't let the exception mess up closing other remaining connection
                              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                                  SibTr.debug(tc, "Error while destroying the outbound virtual connection", e);
                          }
                          // in fastClose() the entry is removed but still we do a remove 
                          endPointToGroupMap.remove(ed);
  
                      }
                  }
  
              } catch (Exception e) {
                  throw e;
              } finally {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      Tr.exit(this, tc, "terminateConnectionsAssociatedWithChain");
              }
  
          }
      }