##### Feature ID

A feature may have an identifier (*feature id* further in the text) which is used to locate a specific feature in the configuration model. Whether a feature has an ID or not is specified in the feature spec. A feature ID is essential to be able to customize the configuration of a specific feature.

Feature ID consists of a feature spec name plus one or more feature parameters. Feature parameters that are a part of the feature ID include *feature-id="true"* attribute in their descriptions (and cannot be nillable). For example

[source,xml]
----
 <feature-spec xmlns="urn:jboss:galleon:feature-spec:1.0" name="feature1">
   <params>
     <param name="name" feature-id="true"/>
     <param name="b" default="bb"/>
     <param name="c" nillable="true"/>
   </params>
 </feature-spec>
----

Now if a config includes multiple features of the spec *feature1*, they could be refered to by *feature1:name=_unique_name_*, where the _unique_name_ is the value of the parameter *name* of the corresponding feature.

Feature ID parameters cannot change values during config customizations. If a user wants to have a different value for an ID parameter of a certain feature, the existing feature has to be excluded from the config and a new feature with the desired ID parameter value has to be added in.

Here is an example of a feature spec with multiple feature ID parameters:

[source,xml]
----
 <feature-spec xmlns="urn:jboss:galleon:feature-spec:1.0" name="feature2">
   <params>
     <param name="p1" feature-id="true"/>
     <param name="p2" feature-id="true"/>
     <param name="p3" nillable="true"/>
   </params>
 </feature-spec>
----

An ID of a feature of this spec will look like *feature2:p1=_p1_value_,p2=_p2_value_*. The order of the ID parameters is not significant.
