Reglas de fusión de elementos de configuración
Si se especifica varias veces un elemento de configuración en la configuración del servidor, los elementos se fusionan. Se aplican las reglas siguientes a la fusión de la configuración:
- Los elementos singleton se fusionan siempre. En el ejemplo siguiente, todas las instancias del elemento de la configuración del servidor se fusionan mediante featureManager para generar un único elemento featureManager:
La configuración efectiva se convierte en:<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>
- Los elementos de fábrica que se especifican en el nivel superior de la configuración del servidor se fusionan si tienen el mismo ID. En el ejemplo siguiente, el elemento dataSource con id= "ds1" se fusiona y el elemento dataSource con id=
"ds2" continúa tal y como está. Por ejemplo:
La configuración efectiva se convierte en:<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 elemento de fábrica no tiene un valor de ID, se considera diferente de otros elementos del mismo tipo sin un valor de ID. No se fusionan conjuntamente varios elementos de fábrica sin valores de ID. En el ejemplo siguiente, dataSource no se fusiona, por lo tanto la configuración efectiva es la misma que la configuración especificada:
La configuración efectiva se convierte en:<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
- Si los elementos que se han de fusionar tienen atributos que entran en conflicto, el elemento fusionado utiliza el último valor que encuentra el analizador de la configuración. En el ejemplo siguiente, se fusiona el elemento dataSource con id= "ds1" y se utiliza jdbcDriverRef="myDriver2", mientras que jdbcDriverRef="myDriver"
se elimina.
La configuración efectiva se convierte en:<dataSource id="ds1" jdbcDriverRef="myDriver"/> <dataSource id="ds1" jdbcDriverRef="myDriver2"/>
<dataSource id="ds1" jdbcDriverRef="myDriver2"/>
- Si un elemento de fábrica se anida debajo de otro elemento, se fusionará con los otros elementos únicamente bajo el mismo padre efectivo. En el ejemplo siguiente, el elemento dataSource
con id= "ds1" se fusiona y el elemento properties.derby.embedded
id="props1" se fusiona con el otro elemento properties.derby.embedded
id="props1" cuyo padre también es dataSource
id="ds1".
La configuración efectiva se convierte en:<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 se anida un elemento de fábrica bajo otro elemento y el elemento de fábrica no tiene especificado un valor de ID, se aplican reglas especiales dependiendo de la cardinalidad del elemento anidado. Si los elementos anidados de un tipo son los previstos, los elementos no se fusionan. Sin embargo, si solo está previsto un único elemento anidado, los elementos anidados se fusionan conjuntamente. Por ejemplo:
La configuración efectiva se convierte en:<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 se anidan dos elementos de fábrica bajo otro elemento y los valores de ID no coinciden, el comportamiento de la fusión depende de la cardinalidad del elemento anidado. Si están previstos varios elementos anidados, no se fusionan los elementos. Si solo está previsto un único elemento anidado, los elementos anidados se fusionan conjuntamente, independientemente de los valores de ID en conflicto. Por ejemplo:
La configuración efectiva se convierte en:<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>