/**
   * @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)
   */
  public void ctDestroyed() {
    LOG.logInfo("Stopping context: ");

    WMSConfigurationDocument.resetCapabilitiesCache();
    WMSConfigurationDocument_1_3_0.resetCapabilitiesCache();
    WMPSConfigurationDocument.resetCapabilitiesCache();

    ServiceLookup lookup = ServiceLookup.getInstance();
    for (Iterator<?> iter = lookup.getIterator(); iter.hasNext(); ) {
      String serviceName = (String) iter.next();
      LOG.logInfo("Stopping service " + serviceName);

      try {
        String s = SERVICE_FACTORIES_MAPPINGS.get(lookup.getService(serviceName));
        Class<?> clzz = Class.forName(s);
        // TODO stop and reset all service instances
        Method[] methods = clzz.getMethods();
        for (int j = 0; j < methods.length; j++) {
          if (methods[j].getName().equals("reset")) {
            Object[] args = new Object[0];
            methods[j].invoke(clzz.newInstance(), args);
          }
        }
      } catch (Exception e) {
        LOG.logError(e.getMessage(), e);
      }
    }
  }