N1 Service Provisioning System 4.1 Reference Guide

Install Compatibility

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:

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.


Note –

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.

Boolean Operators

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.

istrue Boolean Operator

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".

istrue Boolean Operator Attributes

Name 

Type 

Required 

Configurable 

Description 

value 

string 

Yes 

Yes 

The value to compare against "true".  

istrue Boolean Operator Examples

Element 

Result 

<istrue value="True"/> 

true 

<istrue value="yes"/> 

false 

<istrue value=":[var]"/> 

true if the value of var is true 

equals Boolean Operator

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.


Note –

<istrue value="..."/> is a syntactic shorthand for <equals value1="..." value2="true"/>.


equals Boolean Operator Attributes

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. 

equals Boolean Operator Examples

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. 

matches Boolean Operator

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.

matches Boolean Operator Attributes

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. 

matches Boolean Operator Examples

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.  

 

not Boolean Operator

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.

not Boolean Operator Examples

Element 

Result 

<not><istrue value="True"/></not> 

false 

<not><equals value1="apple" value2="orange"/></not> 

true. 

 

and Boolean Operator

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.

and Boolean Operator Examples

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 

or Boolean Operator

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.

or Boolean Operator Examples

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 

Attribute Types

entityName Type

Attributes of type entityName have a maximum length of 512 and match the following pattern:


[a-zA-Z_][0-9a-zA-Z-_. ]* 

systemName Type

Attributes of type systemName have a maximum length of 64 and match the following pattern:


 [a-zA-Z_][0-9a-zA-Z-_. +]* 

identifier Type

Attributes of type identifier have a maximum length of 32 and match the following pattern:


[a-zA-Z_][0-9a-zA-Z_]* 

pathName Type

Attributes of type pathName have a maximum length of 512 and match one of the following patterns:


 "/" ( "/" identifier )+ 

pathReference Type

Attributes of type pathReference have the following syntax:


pathReference: 	
	absolutePath 	
	relativePath  

absolutePath: 
	"/"
	"/" relativePath

relativePath:
	relativePathStart
	relativePathStart "/" relativePath  

relativePathStart:
	".."
	identifier 

modifierEnum Type

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.

accessEnum Type

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.

version Type

Attributes of type version match the following pattern:


[0-9]+\.[0-9]+ 

schemaVersion Type

Attributes of type schemaVersion currently may only have one value:


4.1 

Component Change Compatibility

This section enumerates the changes that can be made to a component, and whether they are call and/or install compatible.

Component Attribute Changes

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 

Platform Changes

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.

LimitToHostSet Changes

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.

Extends Changes

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 

Variable Changes

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 

Component Ref List Changes

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 

Component Ref Changes

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 

Resource Changes

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 

Install, Control and Uninstall Block Changes

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 Block Changes

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 

Diff Ignore Changes

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.