Describing and managing a J2EE application
The target application that we use for our experiments in self-management is a multitier J2EE server deployed on a cluster. This application is organized as follows.
  •  The web server (e.g., Apache) receives clients' requests and serves those that only require static contents. The other requests go to the next tier. 
  • The servlet server (e.g., Tomcat) generates dynamic content web pages, using data from the next (EJB) tier.
  • The EJB server (e.g., JOnAS) executes the business code of the application, using data stored in the database.
  • The database server (e.g., MySQL) stores the persistent data of the application.
The components of the various tiers are replicated on several nodes to improve performance and availability.
This architecture is represented on the following figure.
 J2EE application
The goal of autonomic management is to allow this application to resist wide load variations (self-optimization), hardware of software failures (self-repair) and attacks (self-protection). To achieve this goal, we need to be able to dynamically reconfigure the application on the nodes of the cluster, e.g., by increasing the replication degree of an overloaded tier, or by allocatiing a new node to replace a failed one, assuming that a reserve of free nodes is available. 
As described in the section on autonomic computing, we take an architecture-driven approach, based on a semi-formal description of the managed system, in terms of an assemly of components, each of which wraps a part of the application and provides a uniform management interface. This approach has the following benefits:
  •  The management interface is used by the actuators of the feedback control loops that implement the autonomic management functions.
  • The structural description of the application's architecture is used to construct the knowledge base used by the decision stage of the control loops.
The Fractal component model is the base for component wrapping and for global architecture description. 
To give an idea of how an application's global structure is described using the Fractal Architecture Description Language, consider the application described by the following figure.
A J2EE server configuration
This application is described by this fragment of Fractal ADL code. Notice in particular:
  • The description of the bindings between components' interfaces in the "bindings" section. These bindings may be statically checked for interface conformance.
  • The allocation of components to "virtual nodes" (between the <virtual-node> markers). The mapping of virtual nodes to physical nodes is done at deployment time.