/// <summary>
        /// Loads a <em>Configuration</em> object based on its name.  It looks
        /// for the XML file containing the configuration in root path
        /// </summary>
        /// <param name="configName">Name of the configuration.</param>
        /// <returns>
        /// An object implementing the <em>IConfiguration</em> interface if the
        /// Configuration can be successfully loaded, an exception otherwise.
        /// </returns>
        private IConfiguration LoadConfiguration(String configName)
        {
            // Use the root configuration path to create the fully qualified
            // path to the configuration file.
            String fullConfigPath = String.Format("{0}{1}.{2}", ConfigurationManager.GetInstance().RootPath,
                                                  configName, ConfigurationManager.GetInstance().FileExtension);

            // It is important to check that the configuration file exists
            // before attempting to read it.
            if (!File.Exists(fullConfigPath))
            {
                throw new ArgumentException(String.Format("The file [{0}] was not found or access was denied to it.  Unable to load the configuration.", fullConfigPath));
            }

            // Create a validating XML reader for the configuration file.
            // However, disable schema validations and turn on entity
            // expansion.
            XmlDocument configDocument = XMLUtil.GetValidatedXMLDocument(fullConfigPath);

            // Read the root element of the document.
            XmlNode rootNode = configDocument.LastChild;

            if (rootNode.LocalName != ConfigurationConstants.SectionNames.CONFIGURATION)
            {
                throw new ApplicationException(String.Format("The document [{0}] does not begin with the root element 'Configuration'.  Unable to get the configuration.", configName));
            }

            return(CreateConfiguration(configName, rootNode));
        }