Component B is said to be install compatible with component A if B is call compatible with A, and uses of A can be safely replaced with uses of B in the following cases:
A call to an install block of A.
A component extending from A.
A component containing a reference to A.
Install compatibility basically means structural compatibility.
The constraints imposed by install compatibility mean that any existing installed component can be safely replaced by another install compatible component without having to modify our data structures regarding how the original was installed. Call compatibility is a much weaker statement, as the call compatible component may need to be reinstalled over the original component to properly update our data structures.
For install compatibility to hold, B and A must belong to the same version tree. They may not be components from two distinct version trees.
The provisioning software only enforces install compatibility for components that serve as types. Specifically, when a component type is updated to reference a new version of a component, the new version is install compatible with the original version. Therefore, install compatible updates can be made to component types without having to rebuild and reinstall all existing components derived from that type. As a consequence, if a change is made to a component type that is not install compatible, the client will need to encode that change as a new, distinct component version tree with its own type name. In such cases, the new component type can maintain call compatibility with the original by extending from the original component type. To easily identify the relationship between types, use a versioning system to encode component type names. For example, the component names, EBJ-1.0 and EJB-1.1 easily identifies EJB-1.1 as a later version of the EJB-1.0 component type.
Install compatible implies call compatible, but the reverse does not hold. It also follows that not call compatible implies not install compatible.
This section lists elements that serve as boolean operators, and appear within the condition of an <if> step. Boolean operators have the property that they evaluate to true or false.
A boolean operator used to determine if a particular value is true. It contains a single attribute "value" and has no child elements. It evaluates to true if and only if the value of the "value" attribute case-insensitive equals "true".
Name |
Type |
Required |
Configurable |
Description |
---|---|---|---|---|
value |
string |
Yes |
Yes |
The value to compare against "true". |
Element |
Result |
---|---|
<istrue value="True"/> |
true |
<istrue value="yes"/> |
false |
<istrue value=":[var]"/> |
true if the value of var is true |
A boolean operator used to determine if a particular value is equal to another value. It contains attributes "value1", "value2" and "exact", and has no child elements. It evaluates to true if and only if the values of the "value1" and "value2" attribute are equal. If "exact" is true, then they must be case-sensitive equals, otherwise they must be case-insensitive equals.
<istrue value="..."/> is a syntactic shorthand for <equals value1="..." value2="true"/>.
Name |
Type |
Required |
Configurable |
Description |
---|---|---|---|---|
value1 |
string |
Yes |
Yes |
A value to be compared. |
value2 |
string |
Yes |
Yes |
The other value to be compared. |
exact |
boolean |
No |
No |
True if a case-sensitive match should be performed, false otherwise. Defaults to false. |
Element |
Result |
---|---|
<equals value1="True" value2="true"/> |
true |
<equals value1="True" value2="true" exact="true"/> |
false |
<equals value1="apple" value2="apple" exact="true"/> |
true |
<equals value1="apple" value2="orange"/> |
false |
<equals value1=":[var1]" value2=":[var2]"/> |
true if the value of var1 is equal to the value of var2. |
A boolean operator used to determine if a particular value matches a pattern. It contains attributes "value", "pattern" and "exact", and has no child elements. It evaluates to true if and only if value of the "value" attribute matches the glob-style pattern contained in the value of the "pattern" attribute. If "exact" is true, then they must be case-sensitive match, otherwise they must be case-insensitive match.
Name |
Type |
Required |
Configurable |
Description |
---|---|---|---|---|
value |
string |
Yes |
Yes |
The value to be matched against the pattern. |
pattern |
string |
Yes |
Yes |
The pattern that should be matched. |
exact |
boolean |
No |
No |
True if a case-sensitive match should be performed, false otherwise. Defaults to false. |
Element |
Result |
---|---|
<matches value="True" pattern="true"/> |
true |
<matches value="True" pattern="t*"/> |
true |
<matches value="blue" pattern="*u"/> |
false |
<matches value="True" pattern="t?ue"/> |
true |
<matches value="Tue" pattern="t?ue"/> |
false |
<matches value="True" pattern="t*" exact="true"/> |
false |
<matches value=":[var1]" pattern=":[var2]"/> |
true if the value of var1 matches the pattern of var2.
|
A boolean operator which negates the result of another boolean operator. It contains no attributes, and a single boolean operator child element. It evaluates to true if and only if the value of its contained operator is not true.
Element |
Result |
<not><istrue value="True"/></not> |
false |
<not><equals value1="apple" value2="orange"/></not> |
true.
|
A boolean operator which logically ands results of other boolean operators. It contains no attributes. It may contain any number of boolean operator child elements. It evaluates to true if and only if all of its child elements evaluates to true.
Element |
Result |
---|---|
<and/> |
true |
<and><istrue value="True"/></and> |
true |
<and><equals value1="apple" value2="orange"/></and> |
false |
<and> <matches value="apple" value2="ap*e"/> <istrue value="TRUE"/> <not><equals value1="apple" value2="orange"/></not></and> |
true |
<and> <matches value="apple" value2="ap*e"/> <istrue value="TRUE"/> <equals value1="apple" value2="orange"/></and> |
false |
A boolean operator which logically ors results of other boolean operators. It contains no attributes. It may contain any number of boolean operator child elements. It evaluates to true if and only if it contains at least one child element that evaluates to true.
Element |
Result |
---|---|
<or/> |
false |
<or><istrue value="True"/></or> |
true |
<or><equals value1="apple" value2="orange"/></or> |
false |
<or> <matches value="apple" value2="p*e"/> <istrue value="FALSE"/> <equals value1="apple" value2="orange"/></or> |
false |
<or> <matches value="apple" value2="p*e"/> <not><istrue value="FALSE"/></not> <equals value1="apple" value2="orange"/></or> |
true |
Attributes of type entityName have a maximum length of 512 and match the following pattern:
[a-zA-Z_][0-9a-zA-Z-_. ]* |
Attributes of type systemName have a maximum length of 64 and match the following pattern:
[a-zA-Z_][0-9a-zA-Z-_. +]* |
Attributes of type identifier have a maximum length of 32 and match the following pattern:
[a-zA-Z_][0-9a-zA-Z_]* |
Attributes of type pathName have a maximum length of 512 and match one of the following patterns:
"/" ( "/" identifier )+ |
Attributes of type pathReference have the following syntax:
pathReference: absolutePath relativePath absolutePath: "/" "/" relativePath relativePath: relativePathStart relativePathStart "/" relativePath relativePathStart: ".." identifier |
Attributes of type modifierEnum have either ABSTRACT or FINAL as their value. In general, ABSTRACT indicates that the associated entity must be overridden by a derived component, and FINAL indicates that the associated entity may not be overridden.
Attributes of type accessEnum have either PUBLIC, PROTECTED, PATH or PRIVATE as their value. In general, PUBLIC indicates that the accessibility of the associated entity is unlimited, PROTECTED means that accessibility is limited to derived components and entities in the same path, PATH means that accessibility is limited to entities in the same path, and PRIVATE means that accessibility is limited to just the declaring component.
Attributes of type version match the following pattern:
[0-9]+\.[0-9]+ |
Attributes of type schemaVersion currently may only have one value:
4.1 |
This section enumerates the changes that can be made to a component, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
non-abstract to abstract |
no |
yes |
abstract to non-abstract |
yes |
yes |
more restrictive access |
no |
no |
less restrictive access |
yes |
yes |
change value of description, label, softwareVendor, or author |
no |
yes |
change value of name or path |
no |
yes |
change from simple to composite component |
no |
no |
change from composite to simple component |
no |
no |
This section enumerates the changes that can be made to a platform, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
more general platform |
yes |
yes |
more specific platform |
no |
yes |
unrelated platform |
no |
yes |
Here, a platform X is more specific than Y if X is a descendant of Y. It is more general if X is an ancestor of Y.
This section enumerates the changes that can be made to LimitToHostSet, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
any change to limitToHostSet |
no |
yes |
Unlike platforms, the limitToHostSet names a generic, client-specified host set over which there is no explicit control. Its membership can change at any time, so there"s no way to enforce notions of more or less specific host sets.
This section enumerates the changes that can be made to Extends, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
new base component instance of original |
no |
yes |
original base component instance of new |
no |
no |
new base component unrelated to original |
no |
no |
new base component install compatible with original |
yes |
yes |
new base component call compatible with original |
no |
yes |
This section enumerates the changes that can be made to a variable, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
add a new variable |
no |
yes |
remove/rename a non-private variable |
no |
no |
remove/rename a private variable |
yes |
yes |
change final var default value |
no |
yes |
change non-final var default value |
yes |
yes |
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
non-abstract to abstract |
no |
yes |
abstract to non-abstract |
yes |
yes |
more restrictive access |
no |
no |
less restrictive access |
no |
yes |
This section enumerates the changes that can be made to the Component Ref List, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
new type instance of original |
no |
yes |
original type instance of new |
no |
no |
new type unrelated to original |
no |
no |
new type install compatible with original |
yes |
yes |
new type call compatible with original |
no |
yes |
This section enumerates the changes that can be made to Component Ref, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
non-abstract to abstract |
no |
yes |
abstract to non-abstract |
yes |
yes |
change installMode |
no |
no |
add a new component ref |
no |
yes |
remove/rename a nested component ref |
no |
no |
remove/rename a toplevel component ref |
no |
no |
add/modify/remove nested component argList args |
no |
yes |
add/modify/remove toplevel component argList args |
yes |
yes |
new type instance of original |
no |
yes |
original type instance of new |
no |
no |
new type unrelated to original |
no |
no |
new type install compatible with original |
yes |
yes |
new type call compatible with original |
no |
yes |
new nested comp instance of original |
no |
yes |
original nested comp instance of new |
no |
no |
new nested comp unrelated to original |
no |
no |
new nested comp install compatible with original |
yes |
yes |
new nested comp call compatible with original |
no |
yes |
This section enumerates the changes that can be made to a resource, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
non-abstract to abstract |
no |
yes |
abstract to non-abstract |
yes |
yes |
modify install path, name, group or user |
no |
yes |
modify rsrcName, rsrcVersion |
no |
yes |
This section enumerates the changes that can be made to an install, control, or uninstall block, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
non-final to final |
no |
yes |
final to non-final |
yes |
yes |
non-abstract to abstract |
no |
yes |
abstract to non-abstract |
yes |
yes |
more restrictive access |
no |
no |
less restrictive access |
no |
yes |
add a new non-private block |
no |
yes |
add a new private block |
yes |
yes |
remove/rename a non-private block |
no |
no |
remove/rename a private block |
yes |
yes |
change body of block |
yes |
yes |
add/modify/remove local vars of block |
yes |
yes |
add/modify/remove params of private block |
yes |
yes |
add required param to non-private block |
no |
no |
add optional param |
yes |
yes |
remove optional/required param |
yes |
yes |
rename optional param |
yes |
yes |
rename required param of non-private block |
no |
no |
change param from optional to required in non-private block |
no |
no |
change param from required to optional |
yes |
yes |
change param displayMode |
yes |
yes |
change param prompt |
yes |
yes |
Snapshot blocks generally have the same compatibility matrix as other blocks listed above, except for dealing with their prepare, capture and cleanup blocks.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
add/modify/remove prepare/cleanup block |
yes |
yes |
add/modify/remove capture step |
yes |
yes |
This section enumerates the changes that can be made to Diff Ignore, and whether they are call and/or install compatible.
Nature of Change |
Install Compatible |
Call Compatible |
---|---|---|
add/modify/remove an ignore directive |
yes |
yes |
The ignore directives are only considered at diff runtime, and do not affect the state of existing snapshots in any way.