assembly sname { .category = text .description = " text " .console = " subord-name " input sname output sname ... property sname  [ : dflt = value ] property sname  [ : mandatory ] ... volume sname subordinate sname { .class = clsname attr = val ... } connections [ sub-name . trm-name => sub-name . trm-name .... ] visual { ... } }
The following attributes are defined for assemblies only, they have no meaning in simple components:
.console | the name of a subordinate component, which will serve as the default login target for this assembly. This makes it possible to define an assembly that behaves like a simple component in the sense of allowing the assembly to accept a login request the same way as a simple component that has support for a login console can. As not every component is required to have a login console (depends on the OS and the software installed on it), an assembly is not required to have one. If the assembly does not need a login console or does not have any component that can serve as one, this attribute can be omitted or set to the empty string. Note that as a special exception, when the attribute is omitted (rather than set explicitly to the empty string), and the assembly has only one subordinate it is silently assumed that this subordinate is the default login target. The subordinate specified by the .console attribute (or assumed by default, for single-subordinate assemblies) can itself be an assembly. NOTE: it is not an error to specify a subordinate that does not support console login (either because it is a component that has no console, or because it is an assembly that has .console set to emtpy): the only outcome of such a setting will be that the resulting assembly will not support console login. |
.category | an arbitrary string that defines the general category to which the component belongs. It is allowed by the ADL syntax, but is not interpreted in any way. It is intended for use by the AppLogic visual tools to organize components in component libraries (catalogs). |
.description | a short description of the component. Similarly to .category , the value of this attribute is arbitrary and intended for documentation purposes only. |
subordinate entity.
Here is a summary of the sub-entities of the 'assembly' entity, followed by sub-sections defining each one in detail:
input, output | these sub-entities define the assembly's terminals. |
property | defines a property of the assembly. Each property must be connected to at least one property of a subordinate component - see the 'subordinate' entity. |
volume | defines a property of the assembly, similar to the 'property' entity. |
subordinate | defines a subordinate component in the assembly. |
connections | defines the assembly's connection table. This is an array entity, each element corresponds to one connection. |
visual | Visual presentation data. ADL does not define the contents of this entity. It is intended for a GUI editor to store information related to how the assembly is displayed in the editor's window (color, icon shape, layout of terminals, layout of subordinate components, routing of connections, etc.). The contents of this entity must conform to the general syntax rules of UDL, which were presented earlier in this document - in the Syntax Rules that Apply to All Descriptor Types section. Also, see the UDL specification for more details. |
mandatory . Specifying this attribute means that the terminal must be connected; mandatory terminals will trigger a compilation error in an assembly that includes a component with such a terminal left unconnected. Note that specifying the mandatory attribute for an assembly is not necessary if the subordinate component's terminal to which it is connected is already mandatory.
An assembly can have any number of terminals, except for the top-level assembly of an application, which should have no terminals.
dflt attribute. The default, if specified, overrides the default value in the subordinate components to which the property is connected. Alternatively, ' mandatory ' may be specified, requiring that the property be set from outside (e.g., in an outer assembly) even if the subordinate components to which it is connected have a default value for the property.
property entity. The property defined with the 'volume' entity must be connected to at least one 'volume' property on a subordinate component - see the subordinate entities below. The property defined by a volume entity may have the mandatory attribute specified, requiring it to be set, even if the components' volumes to which it is connected do not have the mandatory attribute set. Unlike regular properties, default= cannot be specified for a volume.
subordinate entity defines a subordinate component in the assembly. Each subordinate can have any number of attributes, each corresponding to a property (including 'volume' properties) of the component that is overridden with the specified value. In addition, the following pre-defined attributes with a special meaning exist for each subordinate, all having a name that begins with a '.' to distinguish them from regular properties:
.class | specifies the class name of the subordinate component; this can be either the name of an instantiable class or the name of a singleton. This attribute is mandatory and cannot be omitted. The class name is specified either as a simple name or in the form catalog-name.class-name, where catalog-name is the name of a catalog (either a catalog that belongs to the application or a global catalog configured in the AppLogic configuration file). The catalogs specified in the application package are looked up first. When no catalog name is given, the class-name is taken to be that of a component class residing in the same place as the assembly - e.g., if the assembly is a catalog part, the subordinate is looked up in the same catalog; if the assembly belongs to an application the subordinate is looked up in the application's package. |
.start_order | defines the order of starting this subordinate, relative to the other subordinates in the same assembly. Lower numbers are started first and those with a higher number are not started until all those with lower numbers have started successfully. Subordinates having the same start_order number can be started in any order and may have their startups overlap in time. The start order is local to the assembly and the same start order numbers can be reused in different assemblies (the relative order of starting subordiantes in different assemblies depends on the start order numbers assigned to those assemblies). Subordinates with no .start_order attribute are started after all subordinates that do have the attribute. |
.failover | defines a failover group identifier. Components that have the same failover group ID in the application constitute a group of components that serve as backup for one another and therefore should never be scheduled on the same physical device (so that in case of hardware failure, some of them remain alive). The failover group ID is global to the application, that is, components with the same group ID in different assemblies are considered to belong to the same group. Setting this attribute to the empty string is allowed and is treated as if the attribute is not set at all (i.e., no scheduling preference for this component). |
.ignore | A boolean attribute. If it is set to 1 (true), specifies that the subordinate's operation is not critical to the assembly and if the subordinate fails to start, the application startup should proceed as normal. Note that this attribute cannot be redirected to the assembly boundary. When setting this attribute, check that the other subordinates that have outputs connected to the one with .ignore set will work correctly if their outputs are unconnected. |
.field_opt | This sets the 'instance field-option' value of the subordinate. Unlike the other pre-defined attributes of a component (.migrateable, .boot_tout, etc.) which can be overridden by specifying the attribute of the same name in a subordinate entity in an assemlby, the component's own .field_opt is not overridden - it is kept as the 'class field-option' instead. See the .field_opt definition in the component descriptor syntax and also above where the assembly's attributes are explained. |
.boot_tout, .migrateable, .server, .standby ), as well as the component-specific properties defined in it by the 'property' or the 'volume' entities (see the component descriptor syntax).
A special type of value is defined indicating that the property is connected to the assembly's boundary: $.name, where name is the name of one of the 'property' or 'volume' entities in the assembly. If a property has to be set to a literal value that begins with the "$." characters, the value must be quoted to ensure that it is not interpreted as a property connection. More than one subordinate property can be connected to the same boundary property and all such properties get the default value from the boundary property definition if none is provided in an outer-scope assembly. The $.name can be used for the pre-defined attributes of the subordinate as well, making them regular properties on the assembly boundary.
The 'subordinate' entity in an assembly also accepts the resource sub-entities mem , cpu and bw , with the same attributes as defined in the Component Descriptor Syntax section.When applied to a subordinate that is a simple component, they override the resource settings in that component. The "override" must remain within the limits of the range defined in the component (i.e., the new range must no wider than the old one and must fit entirely into the old one). When applied to a subordinate that is an assembly, the specified resources are distributed pro-rata according to the relative weight of the resource requirements in each of that assembly's subordinates. If a resource setting for a subordinate assembly causes a component to receive a resource setting that is outside of the min-max range defined for it, an error is reported by the ADL linker.
connections entity is an array entity and each array element is an "association" in the form x => y, where x and y identify two terminals to be connected, each terminal identifier consists of a subordinate name and a terminal name separated by a '.' character. Terminals that are to be exposed as terminals of the assembly itself ("exterior" connections) are also defined in in the same table, with the following syntax:
$. atrm-name => sub-name . strm-name, or
sub-name . strm-name => $. atrm-name.
Both syntax variants are equivalent and mean that the terminal strm-name of subordinate sub-name is to be visible as atrm-name on the assembly (atrm-name must correspond to an input or output entity defined in the assembly). Since an input terminal is a 'network server' and an output terminal is a client, the following rules apply: