Liberty:구성 요소 병합 규칙
구성 요소가 서버 구성에서 여러 번 지정되면 이러한 요소가 병합됩니다. 구성 병합에는 다음 규칙이 적용됩니다.
- 싱글톤 요소는 항상 병합됩니다. 다음 예제에서 서버 구성 featureManager에 있는 요소의 모든 인스턴스는 하나의 featureManager 요소를 형성하도록 모두 병합됩니다.
실제 구성은 다음과 같습니다.<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>
- 서버 구성의 최상위 레벨에 지정된 팩토리 요소는 ID가 서로 같을 경우 병합됩니다. 다음 예제에서 id= "ds1"인 dataSource 요소는
병합되며 id= "ds2"인 dataSource는 현재 상태로 유지됩니다. 예를 들면 다음과 같습니다.
실제 구성은 다음과 같습니다.<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"/>
- 팩토리 요소에 ID 값이 없는 경우 이 요소는 ID 값이 없는 같은 유형의 다른 요소와 서로 다른 요소로 간주됩니다. ID 값이 없는 여러 팩토리 요소는 병합되지 않습니다.
다음 예제에서 dataSource는 병합되지 않으므로 실제 구성은 지정된 구성과 동일합니다.
실제 구성은 다음과 같습니다.<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
<dataSource jdbcDriverRef="myDriver"/> <dataSource jndiName="jdbc/myDriver"/>
- 병합될 요소에 충돌하는 속성이 있는 경우 병합된 요소는 구성 구문 분석기가 발견한 마지막 값을 사용합니다. 다음 예제에서 id= "ds1"인 dataSource는
병합되며, jdbcDriverRef="myDriver2"가 사용되는 반면 jdbcDriverRef="myDriver"는 제거됩니다.
실제 구성은 다음과 같습니다.<dataSource id="ds1" jdbcDriverRef="myDriver"/> <dataSource id="ds1" jdbcDriverRef="myDriver2"/>
<dataSource id="ds1" jdbcDriverRef="myDriver2"/>
- 팩토리 요소가 다른 요소 아래에 중첩된 경우 이는 같은 실제 상위 아래에 있는 다른 요소하고만 병합됩니다. 다음 예제에서 id= "ds1"인 dataSource는
병합되며 properties.derby.embedded id="props1" 요소는 상위가 dataSource id="ds1"인 다른 properties.derby.embedded id="props1"과 병합됩니다.
실제 구성은 다음과 같습니다.<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>
- 팩토리 요소가 다른 요소 아래에 중첩되어 있으며 팩토리 요소에 지정된 ID 값이 없는 경우에는 중첩된 요소의 카디널리티에 따라 특수 규칙이 적용됩니다.
특정 유형의 여러 중첩된 요소가 예상된 경우 이러한 요소는 병합되지 않습니다. 그러나 하나의 중첩된 요소만 예상된 경우에는 중첩된 요소가 병합됩니다.
예를 들면 다음과 같습니다.
실제 구성은 다음과 같습니다.<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>
- 두 팩토리 요소가 다른 요소 아래에 중첩되어 있으며 ID 값이 일치하지 않는 경우 병합 동작은 중첩된 요소의 카디널리티에 따라 달라집니다.
여러 중첩된 요소가 예상된 경우 이러한 요소는 병합되지 않습니다. 하나의 중첩된 요소가 예상된 경우에는 충돌하는 ID 값에도 불구하고 중첩된 요소가 병합됩니다. 예를 들면 다음과 같습니다.
실제 구성은 다음과 같습니다.<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>