The fundamental design principle of ASF is to separate the implementation of adaptive behavior from the server application business logic. This means the adaptation should be encapsulated into components external to the application implementation. Hence the goal of ASF is to provide infrastructure components and services to facilitate the construction of behavioral adaptation. This is achieved by creating a component model for developing adaptive control components, and providing associated services that support the deployment of adaptive components with J2EE application servers.
ASF interacts with applications and the underlying application server platform. ASF defines a component architecture for implementing dynamic, adaptive control, such as managing the lifecycle of control components and coordinating their communications. Adaptive logic implemented using ASF components runs in an adaptive engine. ASF components interact with the application server, monitor the runtime environment, analyze collected data, and change the application’s behavior by adapting the response or setting the server’s configuration to fulfill the business goals. In this way, ASF helps developers to focus on the design and implementation of adaptive logic and insulates them from the complexities of the underlying J2EE platform.
To fulfill the goals of ASF, its various components and services are designed as reusable from application to application. We divide the ASF infrastructure into three layers to address the reusability of its components and services. ASF executes above the middleware layer, and the current implementation runs on top of exisiting middleware platforms such as application servers, messaging servers and service buses. These layers include:Adaptive component layer: this layer supports a component model that defines the control components and interactions needed to implement adaptive behaviors. The control components collect data on the application server’s environment, tune the server configuration and/or change its behavior through management layer interfaces.
Service layer: ASF acts as a container of control components for adaptive behaviors. In order to manage these components, ASF provides a default implementation of useful services, such as lifecycle management, concurrent execution of ASF components, security management, and so on. This service layer also provides infrastructure support for reusable ASF components services including wrappers for Web services, event correlation and security management, and policy management. For example, policies are application-defined, but the mechanisms for checking and enforcing polices provided by the policy management subsystem are generic, and therefore they can be reused as infrastructure services. By separating these general services into a specific layer, the tasks of developing adaptive behavior using ASF control components can be further simplified.
Management layer: ASF control components are executed on top of the management layer. The management layer includes utilities and mechanisms that can be used to monitor the runtime behavior of the application and the underlying platform, and reconfigure the application settings. Our goal is to build adaptive server applications without requiring changes to or specialized services from the underlying middleware. This is achieved by utilizing standard-based management protocols to collect status information and reconfigure an application server. For example, the JMX (Java Management Extensions) based management architecture is leveraged in our current implementation of ASF. Most Java-based application servers utilize JMX to both implement internal server management and provide APIs for hosted applications to retrieve and set the state of the application server configuration.
The adaptive component layer, the service layer and the management layer together form the platform that augments applications with adaptation. The application is not aware of the existence of the adaptive components, thus achieving our aim of separation of concerns.