Application, Parent and Membership
All entities have a parent entity, which creates and manages it, with one important exception: applications. Application entities are the top-level entities created and managed externally, manually or programmatically.
Applications are typically defined in Brooklyn as an application descriptor.
This is a Java class specifying the entities which make up the application,
by extending the class
AbstractApplication, and specifying how these entities should be configured and managed.
All entities, including applications, can be the parent of other entities. This means that the "child" is typically started, configured, and managed by the parent. For example, an application may be the parent of a web cluster; that cluster in turn is the parent of web server processes. In the management console, this is represented hierarchically in a tree view.
A parallel concept is that of membership: in addition to one fixed parent, an entity may be a member of zero or more groups (a "group" is a special kind of entity). Membership of a group can be used for whatever purpose is required; it is commonly used to manage a collection of entities together for one purpose.
For example, a group could be used to indicate the targets for a load balancer, getting the address of each. These targets do not need to have the same parent (e.g. the members may have been deployed in different locations, where the 'parent' hierarchy mirrors the different locations).
Another example would be deployment of a set of VMs where there is a "sidecar" logging process on each VM. The parent hierarchy could be a top-level cluster with a child entity per VM. Under each of these VM entities there could be two child entities for the two processes. There could then be a "group" entity whose members were all the sidecar logger entities.