Regeln für die Zusammenführung von Konfigurationselementen
Wenn ein Konfigurationselement in der Serverkonfiguration mehrfach angegeben ist, werden die Elemente zusammengeführt. Die folgenden Regeln gelten für die Konfigurationszusammenführung:
- Singleton-Elemente werden immer zusammengeführt. Im folgenden Beispiel sind alle Instanzen des Elements
in der Serverkonfiguration featureManager-Instanzen, die zu einem einzigen
featureManager-Element zusammengeführt werden:
Die effektive Konfiguration ist folgende:<featureManager> <feature>servlet-3.0</feature> </featureManager> <featureManager> <feature>jdbc-4.0</feature> </featureManager>
<featureManager> <feature>servlet-3.0</feature> <feature>jdbc-4.0</feature> </featureManager>
- Auf der Ausgangsebene der Serverkonfiguration angegebene Factory-Elemente
werden zusammengeführt, wenn sie dieselbe ID haben. Im folgenden folgen wird das Element
dataSource mit id= "ds1" zusammengeführt und das Element
dataSource mit id=
"ds2" bleibt unverändert. Beispiel:
Die effektive Konfiguration ist folgende:<dataSource id="ds1" jdbcDriverRef="myDriver"/> <dataSource id="ds1" jndiName="jdbc/myDriver"/> <dataSource id="ds2" jdbcDriverRef="myDriver2"/>
<dataSource id="ds1" jdbcDriverRef="myDriver" jndiName="jdbc/myDriver"/> <dataSource id="ds2" jdbcDriverDref="myDriver2"/>
- Factory-Elemente desselben Typs ohne ID-Werte werden als individuelle Elemente betrachtet. Mehrere
Factory-Elemente ohne ID-Werte werden nicht zusammengeführt. Im folgenden Beispiel werden die
dataSource-Elemente nicht zusammengeführt. Deshalb ist die effektive Konfiguration dieselbe wie die angegebene Konfiguration:
Die effektive Konfiguration ist folgende:<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
- Wenn die zusammenzuführenden Elemente widersprüchliche Attribute haben, verwendet das zusammgenführte Element den letzten Wert, der
vom Konfigurationsparser gefunden wird. Im folgenden Beispiel wird das Element
dataSource mit id= "ds1" zusammengeführt und
jdbcDriverRef="myDriver2" verwendet, während jdbcDriverRef="myDriver"
entfernt wird.
Die effektive Konfiguration ist folgende:<dataSource id="ds1" jdbcDriverRef="myDriver"/> <dataSource id="ds1" jdbcDriverRef="myDriver2"/>
<dataSource id="ds1" jdbcDriverRef="myDriver2"/>
- Wenn ein Factory-Element unter einem anderen Element verschachtelt ist, wird es nur mit anderen Elementen unter demselben effektiven
übergeordneten Element zusammengeführt. Im folgenden Beispiel wird das Element dataSource
mit id= "ds1" zusammengeführt und das Element properties.derby.embedded
id="props1" mit dem anderen Element properties.derby.embedded
id="props1", dessen übergeordnetes Element ebenfalls dataSource
id="ds1" ist.
Die effektive Konfiguration ist folgende:<dataSource id="ds1"> <properties.derby.embedded id="props1" databaseName="myDB"/> </dataSource> <dataSource id="ds2"> <properties.derby.embedded id="props1" user="myUser"/> </dataSource> <dataSource id="ds1"> <properties.derby.embedded id="props1" createDatabase="create"/> </dataSource>
<dataSource id="ds1"> <properties.derby.embedded id="props1" databaseName="myDB" createDatabase="create"/> </dataSource> <dataSource id="ds2"> <properties.derby.embedded id="props1" user="myUser"/> </dataSource>
- Wenn ein Factory-Element unter einem anderen Element verschachtelt ist und das Factory-Element keinen ID-Wert hat,
gelten spezielle Regeln, die sich nach der Kardinalität des verschachtelten Elements richten. Werden mehrere verschachtelte
Elemente eines bestimmten Typs erwartet, werden die Elemente nicht zusammengeführt. Wird jedoch nur ein einziges
verschachteltes Element erwartet, werden die verschachtelten Elemente zusammengeführt. Beispiel:
Die effektive Konfiguration ist folgende:<topLevel> <multipleNested enabled="true"/> <multipleNested value="1"/> <singleNested enabled="false"/> <singleNested value="2"/> </topLevel>
<topLevel> <multipleNested enabled="true"/> <multipleNested value="1"/> <singleNested enabled="false" value="2"/> </topLevel>
- Wenn zwei Factory-Elemente unter einem anderen Element verschachtelt sind und die ID-Werte nicht übereinstimmen, richtet
sich das Zusammenführungsverhalten nach der Kardinalität des verschachtelten Elements. Werden mehrere verschachtelte
Elemente erwartet, werden die Elemente nicht zusammengeführt. Wird nur ein einziges
verschachteltes Element erwartet, werden die verschachtelten Elemente trotz der widersprüchlichen ID-Werte zusammengeführt. Beispiel:
Die effektive Konfiguration ist folgende:<topLevel> <multipleNested id="1" enabled="true"/> <multipleNested id="2" value="1"/> <singleNested id="3" enabled="false"/> <singleNested id="4" value="2"/> </topLevel>
<topLevel> <multipleNested id="1" enabled="true"/> <multipleNested id="2" value="1"/> <singleNested id="4" enabled="false" value="2"/> </topLevel>