Due to its nature, a mobile-enabled environment is very dynamic: reachable resources and services change very often. Users hardly know which resources they can exploit and which services they may require. In such a context, a technical support which identifies the available resources and services and indicates which resource is the best one to execute a service would be very helpful. This chapter proposes an adaptive solution to achieve these issues. Adaptivity is related to the fact that besides searching for the reachable resources or services, this approach proposes the most appropriate one for the current request by exploiting additional information about users, resources and services. Moreover, it ensures that services are delivered with the qualities requested and expected by the users. In the scientific literature adaptivity is exploited for functionality reasons (i.e., a system is not able to do what it was supposed to do) or for performance reasons (i.e., a system is not able to ensure the qualities of the services expected by the users or there is a better configuration for a given task). A challenging issue of adaptivity is the identification and design of the knowledge useful for the adaptation process and how this knowledge is exploited at run-time especially in a highly dynamic environment. This chapter proposes an approach which models the adaptation knowledge through reflective entities, qualities and properties, the management of the adaptation knowledge through views, the decision support through strategies, and the management of the functional and non-functional elements through managers.
Today information systems are built of various types of devices (i.e., PCs, laptops, PDAs, mobile phones) and communication networks (i.e., LAN, WI-FI, Bluetooth, ZigBee). One of the main features of such systems is their mobility nature. Devices can change their location and hence may connect to different types of other devices providing different services through various types of networks.
From the architectural point of view a software system is built of components and connections among them (Garlan & Shaw, 1994). Generally, mobility is defined as the quality of moving freely (Merriam-Webster, 2008). Mobile-enabled systems are usually very dynamic in that components may join and leave a system anytime. This implies that such systems define communication mechanisms (i.e., discover, connect, disconnect), which enable their components to interact among them independent of their current location. Furthermore, the dynamic nature of mobile-enabled systems may lead to the modification of their performance features (i.e., in a client server approach with a significant number of clients) or of their functionalities (i.e., in a P2P approach where peers may provide different functionalities). In this context, adaptivity plays an important role and it is closely related to the execution environment of a system.
Service Oriented Architectures (SOA) (Erl, 2005) aim to provide a solution to the ever growing complexity of today’s information systems. The idea behind SOA is to define independent components which provide autonomous and atomic functionalities. The interaction among these components is based on the loose-coupling paradigm: components offering services (called providers) and requiring services (called consumers) are not tightly linked among them. They discover each other and interact among them through a well-established protocol and using well-defined high-level interfaces. Implementation or functional details are not visible outside of a component.
A challenging issue to address in SOA is related to the high number of components providing identical or similar services. The problem of consumers is how to decide which provider to choose for the requested service. Hence, their decision should be based on additional information about services. This information is related to the quality of the provided services (QoS – Quality of Service (Aagedat, 2001; Chalmers & Sloman, 1999; OMG, 2004)) which may include aspects regarding availability, reliability, costs, delivery time and many other significant non-functional aspects.
In this context, adaptivity becomes one of the most challenging issues to be addressed (Cheng Garlan & Schmerl, 2006; Kon Costa Blair & Champbell, 2002; McKinley Sadjadi Kasten & Cheng, 2004; Poladian Sousa Garlan & Shaw, 2004). It is achieved by exploiting information at run-time which is not usually modelled in a software representation of a system. Thus, it needs appropriate abstractions to represent this information and efficient mechanisms to implement activities usually performed by humans based on their own knowledge and experience.