You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by oh...@apache.org on 2014/09/24 22:29:02 UTC

svn commit: r923442 [2/7] - /websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/

Added: websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_combinedconfiguration.html
==============================================================================
--- websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_combinedconfiguration.html (added)
+++ websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_combinedconfiguration.html Wed Sep 24 20:29:01 2014
@@ -0,0 +1,1070 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia at 24 September 2014
+ | Rendered using Apache Maven Fluido Skin 1.3.0
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta charset="iso-8859-1" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="author" content="Oliver Heger" />
+    <meta name="Date-Revision-yyyymmdd" content="20140924" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>Commons Configuration - 
+  Combined Configurations</title>
+
+	<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css" />
+	<link rel="stylesheet" href="../css/site.css" type="text/css" />
+    <link rel="stylesheet" href="../css/print.css" media="print" />
+
+	<script type="text/javascript" src="../js/jquery.min.js"></script>
+	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
+	<script type="text/javascript" src="../js/prettify.min.js"></script>
+	<script type="text/javascript" src="../js/site.js"></script>
+
+                            
+<link rel="stylesheet" type="text/css" media="all" href="../css/prettify.css"/>                                
+<script src="../js/prettify.js" type="text/javascript"></script>                                
+<script type="text/javascript">window.onload=function() {
+              prettyPrint();
+          }</script>                  
+      </head>
+
+	<body class="composite">
+                          <a href="http://commons.apache.org/" id="bannerLeft" title="Apache Commons logo">
+                                                                                        <img class="logo-left" src="../images/commons-logo.png"  alt="Apache Commons logo"/>
+                </a>
+                                              <a href="../index.html" id="bannerRight">
+                                                                                                <img class="logo-right" src="../images/logo.png"  alt="Commons Configuration"/>
+                </a>
+      		<div class="clear"></div>
+
+		<div class="navbar">
+			<div class="navbar-inner">
+				<div class="container-fluid">
+					<a class="brand" href="http://commons.apache.org/proper/commons-configuration/">Apache Commons Configuration &trade;</a>
+					<ul class="nav">      
+                    
+            <li id="publishDate">Last Published: 24 September 2014</li>
+      <li class="divider">|</li> <li id="projectVersion">Version: 1.10</li>
+  </ul>
+                    <div class="pull-right">	<ul class="nav">
+						<li>
+		              <a href="http://www.apachecon.com/" class="externalLink" title="ApacheCon">
+    ApacheCon</a>
+  		</li>
+					<li>
+		              <a href="http://www.apache.org" class="externalLink" title="Apache">
+    Apache</a>
+  		</li>
+					<li>
+		              <a href="../../../" title="Commons">
+    Commons</a>
+  		</li>
+		</ul>
+</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="container-fluid">
+			<table class="layout-table">
+				<tr>
+					<td class="sidebar">
+						<div class="well sidebar-nav">
+										<ul class="nav nav-list">
+		 		            						 <li class="nav-header">Configuration</li>
+																				<li class="none">
+		              <a href="../index.html" title="Home">
+    Home</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../configuration/download_configuration.cgi" title="Download">
+    Download</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../changes-report.html" title="Release History">
+    Release History</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../userguide/user_guide.html" title="User's Guide">
+    User's Guide</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../dependencies.html" title="Runtime Dependencies">
+    Runtime Dependencies</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../apidocs/index.html" title="Javadoc">
+    Javadoc</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            									 <li class="nav-header"><i class="icon-cog"></i>Development</li>
+																				<li class="none">
+		              <a href="../building.html" title="Building">
+    Building</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../issue-tracking.html" title="Issue Tracking">
+    Issue Tracking</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            									 <li class="nav-header"><i class="icon-info-sign"></i>Project Documentation</li>
+																								                                                                                                                                                                          								<li class="collapsed">
+		              <a href="../project-info.html" title="Project Information">
+    Project Information</a>
+  									</li>
+ 																		                                                                                                                                                                                                                                                  								<li class="collapsed">
+		              <a href="../project-reports.html" title="Project Reports">
+    Project Reports</a>
+  									</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">Commons</li>
+																				<li class="none">
+		              <a href="../../../" title="Home">
+    Home</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/licenses/" class="externalLink" title="License">
+    License</a>
+  				</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../components.html" title="Components">
+    Components</a>
+  									</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../sandbox/index.html" title="Sandbox">
+    Sandbox</a>
+  									</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../dormant/index.html" title="Dormant">
+    Dormant</a>
+  									</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">General Information</li>
+																				<li class="none">
+		              <a href="../../../volunteering.html" title="Volunteering">
+    Volunteering</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../patches.html" title="Contributing Patches">
+    Contributing Patches</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../building.html" title="Building Components">
+    Building Components</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../releases/index.html" title="Releasing Components">
+    Releasing Components</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://wiki.apache.org/commons/FrontPage" class="externalLink" title="Wiki">
+    Wiki</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">ASF</li>
+																				<li class="none">
+		              <a href="http://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How the ASF works">
+    How the ASF works</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/getinvolved.html" class="externalLink" title="Get Involved">
+    Get Involved</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/dev/" class="externalLink" title="Developer Resources">
+    Developer Resources</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
+    Sponsorship</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
+    Thanks</a>
+  				</li>
+ 								</ul>
+							</div>
+						<div id="poweredBy">
+							                                                                                                      <a href="http://www.apache.org/events/current-event.html" title="ApacheCon" class="builtBy">
+        <img class="builtBy"  alt="ApacheCon" src="http://www.apache.org/events/current-event-125x125.png"    />
+      </a>
+                                                                                                    <a href="http://maven.apache.org/" title="Maven" class="builtBy">
+        <img class="builtBy"  alt="Maven" src="http://maven.apache.org/images/logos/maven-feather.png"    />
+      </a>
+          						</div>
+					</td>
+					<td class="content">
+						<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License. -->
+
+ 
+    <div class="section">
+<h2>Combined Configuration<a name="Combined_Configuration"></a></h2>
+    
+<p>
+      The <tt><a href="../apidocs/org/apache/commons/configuration/CombinedConfiguration.html">
+      CombinedConfiguration</a></tt> class provides an alternative for handling
+      multiple configuration sources. Its API is very similar to the
+      <tt>CompositeConfiguration</tt> class, which was discussed in the
+      <a href="howto_compositeconfiguration.html#Composite_Configuration_Details">last
+      section</a>. There are the following differences however:
+    </p>
+    
+<p>
+      </p>
+<ul>
+        
+<li>A <tt>CombinedConfiguration</tt> is a truely
+        <a href="howto_xml.html#Hierarchical_properties">hierarchical
+        configuration</a>. This means that all the enhanced facilities
+        provided by <tt>HierarchicalConfiguration</tt> (e.g. expression
+        engines) can be used.</li>
+        
+<li>A <tt>CombinedConfiguration</tt> is not limited to implementing
+        an override semantics for the properties of the contained configurations.
+        Instead it has the concept of so-called <i>node combiners</i>, which
+        know how properties of multiple configuration sources can be combined.
+        Node combiners are discussed later in detail. For instance, there is a
+        node combiner implementation available that constructs a union of the
+        contained configurations.</li>
+        
+<li>Contained configurations can be assigned a name. They can later be
+        accessed by their name.</li>
+        
+<li>Each contained configuration can have an optional prefix. Its
+        properties are then added under this prefix to the combined
+        configuration.</li>
+        
+<li>There is no concept of an <i>in memory configuration</i>. Changes
+        to a combined configuration are handled in a different way.</li>
+      </ul>
+   	
+
+    
+<div class="section">
+<h3>How it works<a name="How_it_works"></a></h3>
+    
+<p>
+      A <tt>CombinedConfiguration</tt> provides a logic view on the
+      properties of the configurations it contains. This view is determined
+      by the associated node combiner object. Because of that it must be
+      re-constructed whenever one of these contained configurations is
+      changed.
+    </p>
+    
+<p>
+      To achieve this, a <tt>CombinedConfiguration</tt> object registers
+      itself as an event listener at the configurations that are added to it.
+      It will then be notified for every modification that occurs. If such a
+      notification is received, the internally managed view is invalidated.
+      When a property of the combined configuration is to be accessed, the view
+      is checked whether it is valid. If this is the case, the property's value
+      can be directly fetched. Otherwise the associated node combiner is asked
+      to re-construct the view.
+    </p>
+    </div>
+    
+    
+<div class="section">
+<h3>Node combiners<a name="Node_combiners"></a></h3>
+    
+<p>
+      A <i>node combiner</i> is an object of a class that inherits from the
+      abstract <tt><a href="../apidocs/org/apache/commons/configuration/tree/NodeCombiner.html">NodeCombiner</a></tt>
+      class. This class defines an abstract <tt>combine()</tt> method, which
+      takes the root nodes of two hierarchical configurations and returns the
+      root node of the combined node structure. It is up to a concrete
+      implementation how this combined structure will look like. Commons
+      Configuration ships with three concrete implementations
+      <tt><a href="../apidocs/org/apache/commons/configuration/tree/OverrideCombiner.html">OverrideCombiner</a></tt>,
+      <tt><a href="../apidocs/org/apache/commons/configuration/tree/MergeCombiner.html">MergeCombiner</a></tt>
+      and <tt><a href="../apidocs/org/apache/commons/configuration/tree/UnionCombiner.html">UnionCombiner</a></tt>,
+      which implement an override, merge, and union semantics respectively.
+    </p>
+    
+<p>
+      Constructing a combination of multiple node hierarchies is not a trivial
+      task. The available implementations descend the passed in node hierarchies
+      in a recursive manner to decide, which nodes have to be copied into the
+      resulting structure. Under certain circumstances two nodes of the source
+      structures can be combined into a single result node, but unfortunately
+      this process cannot be fully automated, but sometimes needs some hints
+      from the developer. As an example consider the following XML configuration
+      sources:
+    </p>
+    
+<div class="source">
+<pre>
+&lt;configuration&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table&gt;
+        &lt;name&gt;users&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;user_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+&lt;/configuration&gt;
+</pre></div>
+    
+<p>and</p>
+    
+<div class="source">
+<pre>
+&lt;configuration&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;document_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+&lt;/configuration&gt;
+</pre></div>
+    
+<p>
+      These two configuration sources define database tables. Each source
+      defines one table. When constructing a union for these sources the result
+      should look as follows:
+    </p>
+    
+<div class="source">
+<pre>
+&lt;configuration&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table&gt;
+        &lt;name&gt;users&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;user_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+      &lt;/table&gt;
+      &lt;table&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;document_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+&lt;/configuration&gt;
+</pre></div>
+    
+<p>
+      As you can see, the resulting structure contains two <tt>table</tt>
+      nodes while the nodes <tt>database</tt> and <tt>tables</tt> appear
+      only once. For a human being this is quite logic because <tt>database</tt>
+      and <tt>tables</tt> define the overall structure of the configuration
+      data, and there can be multiple tables. A node combiner however does not
+      know anything about structure nodes, list nodes, or whatever. From its point of
+      view there is no detectable difference between the <tt>tables</tt>
+      nodes and the <tt>table</tt> nodes in the source structures: both
+      appear once in each source file and have no values. So without any
+      assistance the result constructed by the <tt>UnionCombiner</tt> when
+      applied on the two example sources would be a bit different:
+    </p>
+    
+<div class="source">
+<pre>
+&lt;configuration&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table&gt;
+        &lt;name&gt;users&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;user_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;document_id&lt;/name&gt;
+          &lt;/field&gt;
+          ...
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+&lt;/configuration&gt;
+</pre></div>
+    
+<p>
+      Note that the <tt>table</tt> node would be considered a structure
+      node, too, and would not be duplicated. This is probably not what was
+      desired. To deal with such situations it is possible to tell the node
+      combiner that certain nodes are list nodes and thus should not be
+      combined. So in this concrete example the <tt>table</tt> node should
+      be declared as a list node, then we would get the expected result. We will
+      see below how this is done. Note that this explicit declaration of a list
+      node is necessary only in situations where there is ambiguity. If in one
+      of our example configuration sources multiple tables had been defined, the
+      node combiner would have concluded itself that <tt>table</tt> is a list
+      node and would have acted correspondigly.
+    </p>
+    
+<p>
+      The examples the follow are provided to further illustrate the differences
+      between the combiners that are delivered with Commons Configuration. The first
+      two files are the files that will be combined.
+    </p>
+    
+<table class="bodyTable" border="0">
+    
+<tr class="a">
+      
+<th width="50%">testfile1.xml</th>
+      
+<th width="50%">testfile2.xml</th>
+    </tr>
+    
+<tr class="b">
+<td width="50%">
+
+<div class="source">
+<pre>&lt;config&gt;
+  &lt;gui&gt;
+    &lt;bgcolor&gt;green&lt;/bgcolor&gt;
+    &lt;selcolor&gt;yellow&lt;/selcolor&gt;
+    &lt;level default=&quot;2&quot;&gt;1&lt;/level&gt;
+  &lt;/gui&gt;
+  &lt;net&gt;
+    &lt;proxy&gt;
+      &lt;url&gt;http://www.url1.org&lt;/url&gt;
+      &lt;url&gt;http://www.url2.org&lt;/url&gt;
+      &lt;url&gt;http://www.url3.org&lt;/url&gt;
+    &lt;/proxy&gt;
+    &lt;service&gt;
+      &lt;url&gt;http://service1.org&lt;/url&gt;
+    &lt;/service&gt;
+    &lt;server&gt;
+    &lt;/server&gt;
+  &lt;/net&gt;
+  &lt;base&gt;
+    &lt;services&gt;
+      &lt;security&gt;
+        &lt;login&gt;
+          &lt;user&gt;Admin&lt;/user&gt;
+          &lt;passwd type=&quot;secret&quot;/&gt;
+        &lt;/login&gt;
+      &lt;/security&gt;
+    &lt;/services&gt;
+  &lt;/base&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table id=&quot;1&quot;&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;docid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;docname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;authorID&lt;/name&gt;
+            &lt;type&gt;int&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+  &lt;Channels&gt;
+    &lt;Channel id=&quot;1&quot; type=&quot;half&quot;&gt;
+      &lt;Name&gt;My Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;2&quot;&gt;
+      &lt;MoreChannelData&gt;more test 2 data&lt;/MoreChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;3&quot; type=&quot;half&quot;&gt;
+      &lt;Name&gt;Test Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;4&quot;&gt;
+      &lt;Name&gt;Channel 4&lt;/Name&gt;
+    &lt;/Channel&gt;
+  &lt;/Channels&gt;
+&lt;/config&gt;
+</pre></div></td>
+<td width="50%">
+
+<div class="source">
+<pre>&lt;config&gt;
+  &lt;base&gt;
+    &lt;services&gt;
+      &lt;security&gt;
+        &lt;login&gt;
+          &lt;user type=&quot;default&quot;&gt;scotty&lt;/user&gt;
+          &lt;passwd&gt;BeamMeUp&lt;/passwd&gt;
+        &lt;/login&gt;
+      &lt;/security&gt;
+    &lt;/services&gt;
+  &lt;/base&gt;
+  &lt;gui&gt;
+    &lt;bgcolor&gt;black&lt;/bgcolor&gt;
+    &lt;fgcolor&gt;blue&lt;/fgcolor&gt;
+    &lt;level min=&quot;1&quot;&gt;4&lt;/level&gt;
+  &lt;/gui&gt;
+  &lt;net&gt;
+    &lt;server&gt;
+      &lt;url&gt;http://appsvr1.com&lt;/url&gt;
+      &lt;url&gt;http://appsvr2.com&lt;/url&gt;
+      &lt;url&gt;http://testsvr.com&lt;/url&gt;
+      &lt;url&gt;http://backupsvr.com&lt;/url&gt;
+    &lt;/server&gt;
+    &lt;service&gt;
+      &lt;url type=&quot;2&quot;&gt;http://service2.org&lt;/url&gt;
+      &lt;url type=&quot;2&quot;&gt;http://service3.org&lt;/url&gt;
+    &lt;/service&gt;
+  &lt;/net&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table id=&quot;2&quot;&gt;
+        &lt;name&gt;tasks&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+  &lt;Channels&gt;
+    &lt;Channel id=&quot;1&quot;&gt;
+      &lt;Name&gt;Channel 1&lt;/Name&gt;
+      &lt;ChannelData&gt;test 1 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;2&quot; type=&quot;full&quot;&gt;
+      &lt;Name&gt;Channel 2&lt;/Name&gt;
+      &lt;ChannelData&gt;test 2 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;3&quot; type=&quot;full&quot;&gt;
+      &lt;Name&gt;Channel 3&lt;/Name&gt;
+      &lt;ChannelData&gt;test 3 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;4&quot; type=&quot;half&quot;&gt;
+      &lt;Name&gt;Test Channel 1&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id=&quot;4&quot; type=&quot;full&quot;&gt;
+      &lt;Name&gt;Test Channel 2&lt;/Name&gt;
+    &lt;/Channel&gt;
+  &lt;/Channels&gt;
+&lt;/config&gt;
+</pre></div></td></tr></table>
+      
+<p>
+        The first listing shows the result of using the <tt>OverrideCombiner</tt>.
+      </p>
+      
+<table border="0" class="bodyTable">
+        
+<tr class="a">
+<th width="40%">OverrideCombiner Results</th>
+<th width="60%">Notes</th></tr>
+        
+<tr class="b">
+<td width="40%">
+ 
+<div class="source">
+<pre>&lt;config&gt;
+  &lt;gui&gt;
+    &lt;bgcolor&gt;green&lt;/bgcolor&gt;
+    &lt;selcolor&gt;yellow&lt;/selcolor&gt;
+    &lt;level default='2' min='1'&gt;1&lt;/level&gt;
+    &lt;fgcolor&gt;blue&lt;/fgcolor&gt;
+  &lt;/gui&gt;
+  &lt;net&gt;
+    &lt;proxy&gt;
+      &lt;url&gt;http://www.url1.org&lt;/url&gt;
+      &lt;url&gt;http://www.url2.org&lt;/url&gt;
+      &lt;url&gt;http://www.url3.org&lt;/url&gt;
+    &lt;/proxy&gt;
+    &lt;service&gt;
+      &lt;url&gt;http://service1.org&lt;/url&gt;
+    &lt;/service&gt;
+    &lt;server&gt;
+      &lt;url&gt;http://appsvr1.com&lt;/url&gt;
+      &lt;url&gt;http://appsvr2.com&lt;/url&gt;
+      &lt;url&gt;http://testsvr.com&lt;/url&gt;
+      &lt;url&gt;http://backupsvr.com&lt;/url&gt;
+    &lt;/server&gt;
+  &lt;/net&gt;
+  &lt;base&gt;
+    &lt;services&gt;
+      &lt;security&gt;
+        &lt;login&gt;
+          &lt;user type='default'&gt;Admin&lt;/user&gt;
+          &lt;passwd type='secret'&gt;BeamMeUp&lt;/passwd&gt;
+        &lt;/login&gt;
+      &lt;/security&gt;
+    &lt;/services&gt;
+  &lt;/base&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table id='1'&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;docid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;docname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;authorID&lt;/name&gt;
+            &lt;type&gt;int&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+  &lt;Channels&gt;
+    &lt;Channel id='1' type='half'&gt;
+      &lt;Name&gt;My Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='2'&gt;
+      &lt;MoreChannelData&gt;more test 2 data&lt;/MoreChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='3' type='half'&gt;
+      &lt;Name&gt;Test Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+  &lt;/Channels&gt;
+&lt;/config&gt;
+</pre></div></td>
+<td width="60%">
+      
+<p>
+        The features that are significant in this file are:
+        </p>
+<ul>
+          
+<li>In the gui section each of the child elements only appears once. The level element
+          merges the attributes from the two files and uses the element value of the first file.</li>
+          
+<li>In the security section the user type attribute was obtained from the second file
+          while the user value came from the first file. Alternately, the password type was
+          obtained from the first file while the value came from the second.</li>
+          
+<li>Only the data from table 1 was included.</li>
+          
+<li>Channel 1 in the first file completely overrode Channel 1 in the second file.</li>
+          
+<li>Channel 2 in the first file completely overrode Channel 2 in the second file. While
+          the attributes were merged in the case of the login elements the type attribute
+          was not merged in this case.</li>
+          
+<li>Again, only Channel 3 from the first file was included.</li>
+        </ul>
+      
+      
+<p>
+        How the Channel elements ended up may not at first be obvious. The <tt>OverrideCombiner</tt>
+        simply noticed that the Channels element had three child elements named Channel and
+        used that to determine that only the contents of the Channels element in the first file
+        would be used.
+      </p></td></tr></table>
+      
+<p>
+        The next file is the the result of using the <tt>UnionCombiner</tt>
+      </p>
+      
+<table border="0" class="bodyTable">
+        
+<tr class="a">
+          
+<th width="40%">UnionCombiner Results</th>
+          
+<th width="60%">Notes</th>
+        </tr>
+        
+<tr class="b">
+<td width="40%">
+ 
+<div class="source">
+<pre>&lt;config&gt;
+  &lt;gui&gt;
+    &lt;bgcolor&gt;green&lt;/bgcolor&gt;
+    &lt;selcolor&gt;yellow&lt;/selcolor&gt;
+    &lt;level default='2'&gt;1&lt;/level&gt;
+    &lt;bgcolor&gt;black&lt;/bgcolor&gt;
+    &lt;fgcolor&gt;blue&lt;/fgcolor&gt;
+    &lt;level min='1'&gt;4&lt;/level&gt;
+  &lt;/gui&gt;
+  &lt;net&gt;
+    &lt;proxy&gt;
+      &lt;url&gt;http://www.url1.org&lt;/url&gt;
+      &lt;url&gt;http://www.url2.org&lt;/url&gt;
+      &lt;url&gt;http://www.url3.org&lt;/url&gt;
+    &lt;/proxy&gt;
+    &lt;service&gt;
+      &lt;url&gt;http://service1.org&lt;/url&gt;
+      &lt;url type='2'&gt;http://service2.org&lt;/url&gt;
+      &lt;url type='2'&gt;http://service3.org&lt;/url&gt;
+    &lt;/service&gt;
+    &lt;server&gt;&lt;/server&gt;
+    &lt;server&gt;
+      &lt;url&gt;http://appsvr1.com&lt;/url&gt;
+      &lt;url&gt;http://appsvr2.com&lt;/url&gt;
+      &lt;url&gt;http://testsvr.com&lt;/url&gt;
+      &lt;url&gt;http://backupsvr.com&lt;/url&gt;
+    &lt;/server&gt;
+  &lt;/net&gt;
+  &lt;base&gt;
+    &lt;services&gt;
+      &lt;security&gt;
+        &lt;login&gt;
+          &lt;user&gt;Admin&lt;/user&gt;
+          &lt;passwd type='secret'&gt;&lt;/passwd&gt;
+          &lt;user type='default'&gt;scotty&lt;/user&gt;
+          &lt;passwd&gt;BeamMeUp&lt;/passwd&gt;
+        &lt;/login&gt;
+      &lt;/security&gt;
+    &lt;/services&gt;
+  &lt;/base&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table id='1' id='2'&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;docid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;docname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;authorID&lt;/name&gt;
+            &lt;type&gt;int&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+        &lt;name&gt;tasks&lt;/name&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+  &lt;Channels&gt;
+    &lt;Channel id='1' type='half'&gt;
+      &lt;Name&gt;My Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='2'&gt;
+      &lt;MoreChannelData&gt;more test 2 data&lt;/MoreChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='3' type='half'&gt;
+      &lt;Name&gt;Test Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='1'&gt;
+      &lt;Name&gt;Channel 1&lt;/Name&gt;
+      &lt;ChannelData&gt;test 1 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='2' type='full'&gt;
+      &lt;Name&gt;Channel 2&lt;/Name&gt;
+      &lt;ChannelData&gt;test 2 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='3' type='full'&gt;
+      &lt;Name&gt;Channel 3&lt;/Name&gt;
+      &lt;ChannelData&gt;test 3 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+  &lt;/Channels&gt;
+&lt;/config&gt;
+</pre></div></td>
+<td width="60%">
+      
+<p>
+        The feature that is significant in this file is rather obvious. It is just a simple
+        union of the contents of the two files.
+      </p>
+      </td></tr></table>
+      
+<p>
+        Finally, the last file is the result of using the <tt>MergeCombiner</tt>
+      </p>
+      
+<table border="0" class="bodyTable">
+        
+<tr class="a">
+          
+<th width="40%">MergeCombiner Results</th>
+          
+<th width="60%">Notes</th>
+        </tr>
+        
+<tr class="b">
+<td width="40%">
+
+<div class="source">
+<pre>&lt;config&gt;
+  &lt;gui&gt;
+    &lt;bgcolor&gt;green&lt;/bgcolor&gt;
+    &lt;selcolor&gt;yellow&lt;/selcolor&gt;
+    &lt;level default='2' min='1'&gt;1&lt;/level&gt;
+    &lt;fgcolor&gt;blue&lt;/fgcolor&gt;
+  &lt;/gui&gt;
+  &lt;net&gt;
+    &lt;proxy&gt;
+      &lt;url&gt;http://www.url1.org&lt;/url&gt;
+      &lt;url&gt;http://www.url2.org&lt;/url&gt;
+      &lt;url&gt;http://www.url3.org&lt;/url&gt;
+    &lt;/proxy&gt;
+    &lt;service&gt;
+      &lt;url&gt;http://service1.org&lt;/url&gt;
+    &lt;/service&gt;
+    &lt;server&gt;
+      &lt;url&gt;http://appsvr1.com&lt;/url&gt;
+      &lt;url&gt;http://appsvr2.com&lt;/url&gt;
+      &lt;url&gt;http://testsvr.com&lt;/url&gt;
+      &lt;url&gt;http://backupsvr.com&lt;/url&gt;
+    &lt;/server&gt;
+  &lt;/net&gt;
+  &lt;base&gt;
+    &lt;services&gt;
+      &lt;security&gt;
+        &lt;login&gt;
+          &lt;user type='default'&gt;Admin&lt;/user&gt;
+          &lt;passwd type='secret'&gt;&lt;/passwd&gt;
+        &lt;/login&gt;
+      &lt;/security&gt;
+    &lt;/services&gt;
+  &lt;/base&gt;
+  &lt;database&gt;
+    &lt;tables&gt;
+      &lt;table id='1'&gt;
+        &lt;name&gt;documents&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;docid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;docname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;authorID&lt;/name&gt;
+            &lt;type&gt;int&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+      &lt;/table&gt;
+      &lt;table id='2'&gt;
+        &lt;name&gt;tasks&lt;/name&gt;
+        &lt;fields&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskid&lt;/name&gt;
+            &lt;type&gt;long&lt;/type&gt;
+          &lt;/field&gt;
+          &lt;field&gt;
+            &lt;name&gt;taskname&lt;/name&gt;
+            &lt;type&gt;varchar&lt;/type&gt;
+          &lt;/field&gt;
+        &lt;/fields&gt;
+      &lt;/table&gt;
+    &lt;/tables&gt;
+  &lt;/database&gt;
+  &lt;Channels&gt;
+    &lt;Channel id='1' type='half'&gt;
+      &lt;Name&gt;My Channel&lt;/Name&gt;
+      &lt;ChannelData&gt;test 1 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='2' type='full'&gt;
+      &lt;MoreChannelData&gt;more test 2 data&lt;/MoreChannelData&gt;
+      &lt;Name&gt;Channel 2&lt;/Name&gt;
+      &lt;ChannelData&gt;test 2 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='3' type='half'&gt;
+      &lt;Name&gt;Test Channel&lt;/Name&gt;
+    &lt;/Channel&gt;
+    &lt;Channel id='3' type='full'&gt;
+      &lt;Name&gt;Channel 3&lt;/Name&gt;
+      &lt;ChannelData&gt;test 3 data&lt;/ChannelData&gt;
+    &lt;/Channel&gt;
+  &lt;/Channels&gt;
+&lt;/config&gt;
+</pre></div></td>
+<td width="60%">
+      
+<p>
+        The features that are significant in this file are:
+        </p>
+<ul>
+          
+<li>In the gui section the elements were merged.</li>
+          
+<li>In the net section the elements were merged, with the exception of the urls.</li>
+          
+<li>In the security section the user and password were merged. Notice that the
+          empty value for the password from the first file overrode the password in the
+          second file.</li>
+          
+<li>Both table elements appear</li>
+          
+<li>Channel 1 and Channel 2 were merged</li>
+          
+<li>Both Channel 3 elements appear as they were determined to not be the same.</li>
+        </ul>
+      
+      
+<p>
+        When merging elements attributes play a critical role. If an element has an attribute that
+        appears in both sources, the value of that attribute must be the same for the elements to be
+        merged.
+      </p>
+      
+<p>
+        Merging is only allowed between a single node in each of the files, so if an element
+        in the first file matches more than one element in the second file no merging will take
+        place and the element from the first file (and its contents) are included and the elements
+        in the second file are not. If the element is marked as a list node then the elements from
+        the second file will also be included.
+      </p></td></tr></table>
+    </div>
+
+	
+<div class="section">
+<h3>Constructing a CombinedConfiguration<a name="Constructing_a_CombinedConfiguration"></a></h3>
+	
+<p>
+      To create a <tt>CombinedConfiguration</tt> object you specify the node
+      combiner to use and then add an arbitrary number of configurations. We will
+      show how to construct a union configuration from the two example sources
+      introduced earlier:
+    </p>
+
+<div class="source">
+<pre>
+// Load the source configurations
+XMLConfiguration conf1 = new XMLConfiguration(&quot;table1.xml&quot;);
+XMLConfiguration conf2 = new XMLConfiguration(&quot;table2.xml&quot;);
+
+// Create and initialize the node combiner
+NodeCombiner combiner = new UnionCombiner();
+combiner.addListNode(&quot;table&quot;);  // mark table as list node
+            // this is needed only if there are ambiguities
+
+// Construct the combined configuration
+CombinedConfiguration cc = new CombinedConfiguration(combiner);
+cc.addConfiguration(conf1, &quot;tab1&quot;);
+cc.addConfiguration(conf2);
+</pre></div>
+    
+<p>
+      Here we also specified a name for one of the configurations, so it can
+      later be accessed by <tt>cc.getConfiguration(&quot;tab1&quot;);</tt>. Access by
+      index is also supported. After that the properties in the combined
+      configuration can be accessed as if it were a normal hierarchical
+      configuration
+    </p>
+    </div>
+    
+    
+<div class="section">
+<h3>Dealing with changes<a name="Dealing_with_changes"></a></h3>
+    
+<p>
+      There is nothing that prevents you from updating a combined configuration,
+      e.g. by calling methods like <tt>addProperty()</tt> or
+      <tt>removeProperty()</tt>. The problem is that depending on the used
+      node combiner it might no be clear, which of the contained configurations
+      will be modified or whether one is modified at all.
+    </p>
+    
+<p>
+      Typical node combiners work by copying parts of the node structures of
+      the source configurations into the target structure and linking them
+      togehter using special link nodes. So updates of the combined node structure
+      will either effect nodes from one of the contained configuration (then
+      the changes are directly visible in this configuration) or one of the link
+      nodes (then they cannot really be saved).
+    </p>
+    
+<p>
+      It is also possible that a change is done at the combined node structure,
+      which is not compatible with the current node combiner. Imagine that an
+      <tt>OverrideCombiner</tt> is used and that a
+      property should be removed. This property will then be removed from one
+      of the contained configurations. Now it may happen that this removed
+      property had hidden property values of other contained configurations.
+      Their values won't become visible automatically, but only after the
+      combined view was re-constructed.
+    </p>
+    
+<p>
+      Because of that it is recommended that changes are not done at the
+      combined configuration, but only at contained configurations. This way
+      the correct configuration to be updated can unambigously be identified.
+      Obtaining the configuration to be updated from the combined configuration
+      is easy when it was given a name.
+    </p>
+    </div>
+	</div>
+
+
+
+					</td>
+				</tr>
+			</table>
+		</div>
+
+		<div class="footer">
+			<p>Copyright &copy;                    2001-2014
+                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+            All Rights Reserved.</p>
+                                                          				
+<div class="center">Apache Commons, Apache Commons Configuration, Apache, the Apache feather logo, and the Apache Commons project logos are trademarks of The Apache Software Foundation.
+      All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
+                          		</div>
+	</body>
+
+</html>

Added: websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_compositeconfiguration.html
==============================================================================
--- websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_compositeconfiguration.html (added)
+++ websites/production/commons/content/proper/commons-configuration/javadocs/v1.10/userguide/howto_compositeconfiguration.html Wed Sep 24 20:29:01 2014
@@ -0,0 +1,327 @@
+<!DOCTYPE html>
+<!--
+ | Generated by Apache Maven Doxia at 24 September 2014
+ | Rendered using Apache Maven Fluido Skin 1.3.0
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta charset="iso-8859-1" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <meta name="author" content="Eric Pugh" />
+    <meta name="Date-Revision-yyyymmdd" content="20140924" />
+    <meta http-equiv="Content-Language" content="en" />
+    <title>Commons Configuration - 
+  Composite Configuration Details</title>
+
+	<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css" />
+	<link rel="stylesheet" href="../css/site.css" type="text/css" />
+    <link rel="stylesheet" href="../css/print.css" media="print" />
+
+	<script type="text/javascript" src="../js/jquery.min.js"></script>
+	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
+	<script type="text/javascript" src="../js/prettify.min.js"></script>
+	<script type="text/javascript" src="../js/site.js"></script>
+
+                            
+<link rel="stylesheet" type="text/css" media="all" href="../css/prettify.css"/>                                
+<script src="../js/prettify.js" type="text/javascript"></script>                                
+<script type="text/javascript">window.onload=function() {
+              prettyPrint();
+          }</script>                  
+      </head>
+
+	<body class="composite">
+                          <a href="http://commons.apache.org/" id="bannerLeft" title="Apache Commons logo">
+                                                                                        <img class="logo-left" src="../images/commons-logo.png"  alt="Apache Commons logo"/>
+                </a>
+                                              <a href="../index.html" id="bannerRight">
+                                                                                                <img class="logo-right" src="../images/logo.png"  alt="Commons Configuration"/>
+                </a>
+      		<div class="clear"></div>
+
+		<div class="navbar">
+			<div class="navbar-inner">
+				<div class="container-fluid">
+					<a class="brand" href="http://commons.apache.org/proper/commons-configuration/">Apache Commons Configuration &trade;</a>
+					<ul class="nav">      
+                    
+            <li id="publishDate">Last Published: 24 September 2014</li>
+      <li class="divider">|</li> <li id="projectVersion">Version: 1.10</li>
+  </ul>
+                    <div class="pull-right">	<ul class="nav">
+						<li>
+		              <a href="http://www.apachecon.com/" class="externalLink" title="ApacheCon">
+    ApacheCon</a>
+  		</li>
+					<li>
+		              <a href="http://www.apache.org" class="externalLink" title="Apache">
+    Apache</a>
+  		</li>
+					<li>
+		              <a href="../../../" title="Commons">
+    Commons</a>
+  		</li>
+		</ul>
+</div>
+				</div>
+			</div>
+		</div>
+
+		<div class="container-fluid">
+			<table class="layout-table">
+				<tr>
+					<td class="sidebar">
+						<div class="well sidebar-nav">
+										<ul class="nav nav-list">
+		 		            						 <li class="nav-header">Configuration</li>
+																				<li class="none">
+		              <a href="../index.html" title="Home">
+    Home</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../configuration/download_configuration.cgi" title="Download">
+    Download</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../changes-report.html" title="Release History">
+    Release History</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../userguide/user_guide.html" title="User's Guide">
+    User's Guide</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../dependencies.html" title="Runtime Dependencies">
+    Runtime Dependencies</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../apidocs/index.html" title="Javadoc">
+    Javadoc</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            									 <li class="nav-header"><i class="icon-cog"></i>Development</li>
+																				<li class="none">
+		              <a href="../building.html" title="Building">
+    Building</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../issue-tracking.html" title="Issue Tracking">
+    Issue Tracking</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            									 <li class="nav-header"><i class="icon-info-sign"></i>Project Documentation</li>
+																								                                                                                                                                                                          								<li class="collapsed">
+		              <a href="../project-info.html" title="Project Information">
+    Project Information</a>
+  									</li>
+ 																		                                                                                                                                                                                                                                                  								<li class="collapsed">
+		              <a href="../project-reports.html" title="Project Reports">
+    Project Reports</a>
+  									</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">Commons</li>
+																				<li class="none">
+		              <a href="../../../" title="Home">
+    Home</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/licenses/" class="externalLink" title="License">
+    License</a>
+  				</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../components.html" title="Components">
+    Components</a>
+  									</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../sandbox/index.html" title="Sandbox">
+    Sandbox</a>
+  									</li>
+ 																		                          								<li class="collapsed">
+		              <a href="../../../dormant/index.html" title="Dormant">
+    Dormant</a>
+  									</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">General Information</li>
+																				<li class="none">
+		              <a href="../../../volunteering.html" title="Volunteering">
+    Volunteering</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../patches.html" title="Contributing Patches">
+    Contributing Patches</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../building.html" title="Building Components">
+    Building Components</a>
+  				</li>
+ 														<li class="none">
+		              <a href="../../../releases/index.html" title="Releasing Components">
+    Releasing Components</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://wiki.apache.org/commons/FrontPage" class="externalLink" title="Wiki">
+    Wiki</a>
+  				</li>
+ 								</ul>
+			<ul class="nav nav-list">
+		 		            						 <li class="nav-header">ASF</li>
+																				<li class="none">
+		              <a href="http://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How the ASF works">
+    How the ASF works</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/getinvolved.html" class="externalLink" title="Get Involved">
+    Get Involved</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/dev/" class="externalLink" title="Developer Resources">
+    Developer Resources</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
+    Sponsorship</a>
+  				</li>
+ 														<li class="none">
+		              <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
+    Thanks</a>
+  				</li>
+ 								</ul>
+							</div>
+						<div id="poweredBy">
+							                                                                                                      <a href="http://www.apache.org/events/current-event.html" title="ApacheCon" class="builtBy">
+        <img class="builtBy"  alt="ApacheCon" src="http://www.apache.org/events/current-event-125x125.png"    />
+      </a>
+                                                                                                    <a href="http://maven.apache.org/" title="Maven" class="builtBy">
+        <img class="builtBy"  alt="Maven" src="http://maven.apache.org/images/logos/maven-feather.png"    />
+      </a>
+          						</div>
+					</td>
+					<td class="content">
+						<!-- Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License. -->
+
+ 
+
+    <div class="section">
+<h2>Composite Configuration Details<a name="Composite_Configuration_Details"></a></h2>
+        
+<p>
+            There are many use cases when you want to collect the properties
+            of several configuration sources and access them like a single
+            configuration object. One way to do that is using the
+            <tt><a href="../apidocs/org/apache/commons/configuration/CompositeConfiguration.html">
+            CompositeConfiguration</a></tt> class.
+        </p>
+        
+<p>
+            A <tt>CompositeConfiguration</tt> object contains a list of
+            other configuration objects. When properties are accessed from a
+            composite configuration the object takes the passed in property key
+            and iterates over the list of the contained configurations. As soon
+            as a value is found for the key it is returned. This means that a
+            <tt>CompositeConfiguration</tt> implements a kind of override
+            semantics, i.e. the properties of configurations that were added
+            first hide the property values of configurations added later.
+        </p>
+    	
+<p>
+    		We will discuss how you can establish a &quot;default&quot; choice for your
+    		Composite Configuration as well as save changes made to your
+    		Composite Configuration.
+    	</p>
+    	
+<div class="section">
+<h3>Setting Up Defaults<a name="Setting_Up_Defaults"></a></h3>
+    		
+<p>
+    			Defaults are very simple.  You can just add them as your last configuration object, 
+    			either through the ConfigurationFactory or manually:
+    		</p>
+    			
+<div class="source">
+<pre>
+Configuration defaults = new PropertiesConfiguration(fileToDefaults);
+Configuration otherProperties = new PropertiesConfiguration(fileToOtherProperties);
+CompositeConfiguration cc = new CompositeConfiguration();
+cc.addConfiguration(otherProperties);
+cc.addConfiguration(fileToDefaults);
+</pre></div>
+		</div>
+		
+		
+<div class="section">
+<h3>Saving Changes<a name="Saving_Changes"></a></h3>
+			
+<p>
+				If you have a non static Configuration where you want to 
+				save changes made to a configuration, and you are using a
+				CompositeConfiguration, then you will need to pass into
+				the constructor of the CompositeConfiguration what Configuration
+				to save the changes via.
+			</p>
+    			
+<div class="source">
+<pre>
+PropertiesConfiguration saveConfiguration = new PropertiesConfiguration(fileToSaveChangesIn);
+Configuration cc = new CompositeConfiguration(saveConfiguration);
+cc.setProperty(&quot;newProperty&quot;,&quot;new value&quot;);
+
+saveConfiguration.save();
+</pre></div>
+			
+<p>
+				Alternatively, you can just request the
+				in-memory configuration that stores the changes. The following
+                example fragment copies all properties from the in-memory
+                configuration into a <tt>DatabaseConfiguration</tt>, so
+                that they are made persistent:
+    			</p>
+<div class="source">
+<pre>
+Configuration changes = myCompositeConfiguration.getInMemoryConfiguration();
+DatabaseConfiguration config = new DatabaseConfiguration(datasource, &quot;configuration&quot;, &quot;key&quot;, &quot;value&quot;);
+for (Iterator&lt;String&gt; i = changes.getKeys(); i.hasNext()){
+	String key = i.next();
+	Object value = changes.get(key);
+	config.setProperty(key,value);
+}
+</pre></div>
+			
+
+		</div>
+	</div>
+
+
+
+					</td>
+				</tr>
+			</table>
+		</div>
+
+		<div class="footer">
+			<p>Copyright &copy;                    2001-2014
+                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
+            All Rights Reserved.</p>
+                                                          				
+<div class="center">Apache Commons, Apache Commons Configuration, Apache, the Apache feather logo, and the Apache Commons project logos are trademarks of The Apache Software Foundation.
+      All other marks mentioned may be trademarks or registered trademarks of their respective owners.</div>
+                          		</div>
+	</body>
+
+</html>