Règles de fusion de l'élément de configuration
Si un élément de configuration est spécifié plusieurs fois dans la configuration du serveur, les éléments sont fusionnés. Les règles suivantes s'appliquent à la fusion de configuration :
- Les éléments singleton sont toujours fusionnés. Dans l'exemple
suivant, toutes les instances de l'élément dans la configuration de
serveur sont fusionnées pour former un seul élément featureManager :
La configuration effective devient :<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>
- Les éléments de fabrique qui sont spécifiés au niveau
supérieur de la configuration de serveur sont fusionnés s'ils portent
le même ID. Dans l'exemple suivant, l'élément
dataSource est fusionné avec l'élément
id= "ds1" et l'élément
dataSource avec id=
"ds2" reste tel quel. Par exemple,
La configuration effective devient :<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"/>
- Si un élément de fabrique ne comporte pas de valeur d'ID, il est
considéré comme distinct des autres éléments du même
type sans valeur d'ID. Plusieurs éléments de fabrique sans
valeurs d'ID ne sont pas fusionnés. Dans l'exemple suivant, les
éléments dataSource ne sont pas fusionnés, de sorte
que la configuration effective est identique à la
configuration spécifiée :
La configuration effective devient :<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
- Si les éléments qui doivent être fusionnés comportent des
attributs en conflit, l'élément fusionné utilise la dernière
valeur qui est détectée par le programme d'analyse syntaxique de configuration. Dans l'exemple suivant, l'élément
dataSource est fusionné avec l'élément
id= "ds1" et l'élément
jdbcDriverRef="myDriver2" est utilisé, tandis
que l'élément jdbcDriverRef="myDriver" est retiré.
La configuration effective devient :<dataSource id="ds1" jdbcDriverRef="myDriver"/> <dataSource id="ds1" jdbcDriverRef="myDriver2"/>
<dataSource id="ds1" jdbcDriverRef="myDriver2"/>
- Si un élément de fabrique est imbriqué sous un autre élément, il
est fusionné avec d'autres éléments sous le même parent
effectif uniquement. Dans l'exemple suivant, l'élément
dataSource est fusionné avec l'élément
id= "ds1" et l'élément
properties.derby.embedded
id="props1" est fusionné avec l'autre élément
properties.derby.embedded id="props1" dont le
parent est également dataSource id="ds1".
La configuration effective devient :<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>
- Si un élément de fabrique est imbriqué sous
un autre élément et s'il ne comporte pas de valeur d'ID
spécifique, des règles spéciales s'appliquent
en fonction de la
cardinalité de l'élément imbriqué. Si plusieurs éléments imbriqués
d'un type particulier sont attendus, les éléments ne sont pas
fusionnés. Toutefois, si un seul élément imbriqué est prévu, ces
éléments sont fusionnés. Par exemple,
La configuration effective devient :<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>
- Si deux éléments de fabrique sont imbriqués
sous un autre élément et si les valeurs d'ID ne correspondent pas, le
comportement de fusion dépend de la cardinalité de l'élément
imbriqué. Si plusieurs éléments imbriqués sont
attendus, les éléments ne sont pas fusionnés. Si un seul
élément imbriqué est prévu, les éléments imbriqués sont fusionnés
malgré les valeurs d'ID en conflit. Par exemple,
La configuration effective devient :<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>