code: @Override
    public CommunicationGroupDriver newCommunicationGroup(final Class<? extends Name<String>> groupName,
                                                          final Class<? extends Topology> topologyClass,
                                                          final int numberOfTasks, final int customFanOut) {
      LOG.entering("GroupCommDriverImpl", "newCommunicationGroup",
          new Object[]{Utils.simpleName(groupName), numberOfTasks});
  
      final CommunicationGroupDriver commGroupDriver;
      try {
        commGroupDriver
            = commGroupDriverFactory.getNewInstance(groupName, topologyClass, numberOfTasks, customFanOut);
      } catch (final InjectionException e) {
        LOG.log(Level.WARNING, "Cannot inject new CommunicationGroupDriver");
        throw new RuntimeException(e);
      }
  
      commGroupDrivers.put(groupName, commGroupDriver);
      LOG.exiting("GroupCommDriverImpl", "newCommunicationGroup",
          "Created communication group: " + Utils.simpleName(groupName));
      return commGroupDriver;
    }
docs: TODO[JIRA REEF-391]: Allow different topology implementations for different operations in the same CommGroup.