In recent years, many researchers have studied context-awareness to support non-intrusive adaptability of context-aware applications. Context-aware applications benefit from emerging technology that connects everyday objects and provides opportunities to collect and use context information from various sources. Context-awareness helps to adapt continuously to new situations and to turn a static computing environment into a dynamic ecology of smart and proactive applications. In this chapter, we present our framework that manages and uses context information to adapt applications and the content they provide. We show how application adaptation can be handled at the composition level, by reconfiguring, redeploying and rewiring components, e.g. to fall back into reduced functionality mode when redeploying an application on a handheld. The key features of our context-aware adaptation framework notonly include local adaptations of context-aware applications and content, but also the addressing of context in large scale networks and the contextaware redeployment of running applications in a distributed setting. We discuss how adaptation is handled along various levels of abstraction (user, content, application, middleware, network) and illustrate the flexibility of context-aware content and application adaptation by means of a realistic use case scenario.
We witness nowadays a trend towards ubiquitous information and pervasive communication networks. Technology is emerging that connects everyday mobile objects and embeds intelligence in our environment. The ability to collect and combine data from various sources and adapt to changes in our surroundings is crucial to turn static environments into smart and proactive ones. In such environments, as envisioned by Weiser (1991), computing is pushed away from the traditional desktop to small embedded and networked computing devices around us. In recent years, the use of context-awareness to support non-intrusive adaptability of content and applications has received a lot of attention (Moran & Dourish, 2001; Islam & Fayad, 2003; Gheis et al. 2006; Chaari et al., 2006; Yang & Shao, 2007).
It goes without saying that context-awareness plays a key role in such systems in order (1) to meet changing user expectations, (2) to satisfy changing device and application resource constraints and (3) to optimize the quality of service.
As Chaari et al. (2006) explain, context-awareness is the capability of perceiving the user situation in all its forms, and of adapting in consequence the system behavior, i.e., the services and content supplied to the users. Or as Charles Darwin stated earlier: “It is not the most intelligent of the species that survive the longest, it is the most adaptable.” In order to be successful, applications need to adapt continuously to their environment and therefore require information from this environment for the adaptation to be effective.
Developing mobile and pervasive applications with support for context-driven adaptation is a daunting task. The problem is threefold. First of all, to carry out application adaptation at runtime, we require a proper application design methodology that facilitates customizing the functionality during the deployment and runtime life cycle of the application. Secondly, the design methodology needs to be complemented with runtime support that enables applications to dynamically adapt their behavior and the content they offer to the user whenever the applications’ context changes. And thirdly, applications must take into account the characteristics of the systems on which they are deployed, the environment in which they are embedded, and the user expectations regarding the application in order to exhibit optimal behavior. Hence, context-awareness is a key concern that needs to be supported within the adaptation framework from the ground up. To address these challenges, we present in this chapter an integrated approach to context-aware adaptation of applications and the content they supply. The focus of our contribution is (1) a design methodology in which applications are composed out of loosely coupled distributed components, enhanced with (2) an adaptation framework that provides solutions to facilitate context-aware adaptation of applications and the content supplied by those applications. Context-aware adaptation in our framework consists of application adaptation and content adaptation and is handled at different levels.
Context-aware applications have a component-based design with basic constructs such as components, component ports, connectors, contracts and context interfaces. Components provide the functionality of the application and communicate with other components through connectors attached to their component ports. Contracts and context interfaces ensure a specific behavior in a particular situation. These concepts are further explained in section 4. Application adaptation is handled at the architectural level by reconfiguring and redeploying components, while content adaptation is addressed internally by the components, for example, through content filtering (e.g. selecting content related to a given location, or selecting a content format that fits the capabilities of the client device) and/or content transformation (e.g. transforming content to a data format supported by the user’s device).