code: @Override
      public List getList(String key, List defaultValue)
      {
          List<Object> list = new ArrayList<Object>();
  
          // add all elements from the first configuration containing the requested key
          Iterator<AbstractConfiguration> it = configList.iterator();
          if (overrideProperties.containsKey(key)) {
              appendListProperty(list, overrideProperties, key);
          }
          while (it.hasNext() && list.isEmpty())
          {
              Configuration config = it.next();
              if ((config != containerConfiguration || containerConfigurationChanged) 
                      && config.containsKey(key))
              {
                  appendListProperty(list, config, key);
              }
          }
  
          // add all elements from the in memory configuration
          if (list.isEmpty()) {
              appendListProperty(list, containerConfiguration, key);
          }
  
          if (list.isEmpty())
          {
              return defaultValue;
          }
  
          ListIterator<Object> lit = list.listIterator();
          while (lit.hasNext())
          {
              lit.set(interpolate(lit.next()));
          }
  
          return list;
      }
docs: Get a List of objects associated with the given configuration key.
  If the key doesn't map to an existing object, the default value
  is returned.
  
  @param key The configuration key.
  @param defaultValue The default value.
  @return The associated List of value.