Pervasive Computing Middleware Gregor Schiele, Marcus Handte and Christian Becker 1 Introduction Pervasive computing envisions applications that provide intuitive, seamless and distraction-free task support for their users. To do this, the applications combine and leverage the distinct functionality of a number of devices. Many of these devices are invisibly integrated into the environment. The devices are equipped with various sensors that enable them to perceive the state of the physical world. By means of wireless communication, the devices can share their perceptions and they can combine them to accurate and expressive models of their surroundings. The resulting models enable applications to reason about past, present and future states of their context and empower them to behave according to the expectations of the user. This ensures that they provide high-quality task support while putting only little cognitive load on users as they require only minimal manual input. To provide a truly seamless and distraction-free user experience, the applications can be executed in a broad spectrum of vastly different environments. Thereby, the require only little manual configuration since they can autonomously adapt and optimize their execution depending on the capabilities of the environment. In many cases, changes to the environment are compensated with little impact on the support provided by the application. Failures are handled transparently and the capabilities of newly available devices are integrated on-the-fly. Given this or similarly ambitious visions, pervasive applications are very attractive from a user’s perspective. In essence, they simply promise to offer more sophisticated and more reliable task support for everyone, everywhere. From an Gregor Schiele Universität Mannheim, Germany, e-mail: gregor.schiele@uni-mannheim.de Marcus Handte Fraunhofer IAIS and Universität Bonn, Germany, e-mail: handte@cs.uni-bonn.de Christian Becker Universität Mannheim, Germany, e-mail: christian.becker@uni-mannheim.de H. Nakashima et al. (eds.), Handbook of Ambient Intelligence and Smart Environments, DOI 10.1007/978-0-387-93808-0_8, © Springer Science+Business Media, LLC 2010 201 202 Gregor Schiele, Marcus Handte and Christian Becker application developers perspective, on the other hand, they are close to a nightmare come true: unprecedented device heterogeneity, unreliable wireless communication and uncertainty in sensor readings, unforeseeable execution environments that span the complete spectrum from static to highly dynamic, changing user requirements, fuzzy user preferences and the list goes on and on. As a result, even simple applications that process a small number of user inputs can often exhibit enormously large spaces of possible execution states and these spaces need to be considered by the application developer. Thus, without further precautions, the development of pervasive applications is a non-trivial, time-consuming and error-prone task. It is exactly at this point, where pervasive computing middleware can come to the rescue. Over the last years, middleware for pervasive computing has come a long way. Given the diversity of pervasive applications and the harsh conditions of their execution environments, the design of a comprehensive and adequate middleware for pervasive applications is certainly a rewarding but also a challenging goal. The pursuit of this goal has lead to a multitude of different concepts which resulted in an even greater number of supportive mechanisms. It is due to this variety of concepts and mechanisms that the anatomy of existing middleware differs widely. As a consequence, it is necessary to take a closer look at the influencing factors in middleware design in order to enable a meaningful in-depth discussion and comparison. 2 Design Considerations In this section we discuss the three main influencing factors for the design of pervasive computing middleware: the organizational model of the middleware, the level of abstractions provided by the middleware, and the tasks supported by the middleware. 2.1 Organizational Model The first key influential factor of middleware design is the organizational model of the execution environment. Given a certain organization, the middleware developer may introduce assumptions to improve or simplify middleware mechanisms and application development. In addition, the organizational model also introduces quantitative thresholds for important variables such as the maximum and typical number of devices or the frequency and types of fluctuations that can be expected. At the present time, there are two predominant organizational models, as shown in Figure 1. In the past, middleware developers primarily focused on either one: • Smart environment: A large fraction of pervasive computing middleware systems such as [19], [36], [33], [34] are geared towards the organizational model of a smart environment. Thereby, a smart environment can be defined as a spatially limited area, e.g. a meeting room or an apartment, equipped with various Pervasive Computing Middleware 203 Fig. 1 Predominant organizational models sensors and actuators. As a result, many devices in smart environments are stationary. However, as users might be using mobile devices such as laptops or personal digital assistants (PDAs) as well, some devices must be dynamically integrated. Typically, the integration is performed depending on the physical location of the device which can be determined automatically by the available sensors or it can be manually configured through some user interface. Due to the fact smart environments usually contain a number of stationary devices, middleware for smart environments relies typically on an stationary and rather powerful coordinating computer to provide basic services. Since the services are often an essential building block of the applications, the presence of the coordinating computer is required at all times and thus, its availability must be high. Clearly, demanding the availability of a powerful and highly available computer may be problematic due to technical and economic constraints. However, if it can be guaranteed, a coordinating computer can significantly ease middleware and application development, since it provides a central point of management that can enforce policies, mediate communication, distribute information, etc. • Smart peers: In addition to middleware for smart environments, there are also a good amount of middleware systems such as [5], [6], [17], [20] that are based on the idea of dynamically formed collections of smart peers. In contrast to smart environments that view a pervasive system as a set of computers located in a certain area, smart peers postulate a people-centric as opposed to location-centric 204 Gregor Schiele, Marcus Handte and Christian Becker perspective on pervasive applications. The key idea is to understand a pervasive system as the collection of computers that surrounds a person independent from the physical location. As a result, the devices in such as system cannot rely on the continuous presence of any of the other devices. This prohibits centralized coordination on a powerful and highly available system. Instead, the smart peers must make use of suitable mechanisms to coordinate in a decentralized manner. In order to get the necessary locality required to keep the dynamic set of devices manageable, the middleware systems typically limit the size on the basis of spatial proximity. While this may seem more flexible at a first glance, the smart peer model is not without issues. Specifically, the management mechanisms tend to be more complicated and if not properly designed, they can also be less efficient. 2.2 Provided Level of Abstraction Another influential factor of the middleware design is the provided level of abstraction. Given that pervasive computing middleware may provide a great variety of services, the level of abstraction can also differ widely, in general. However, from a high-level point of view, it is possible to identify three main levels and in most pervasive computing middleware, the services can be classified as providing either one: • Full transparency: From an application developer’s perspective, the ultimate middleware system should provide full transparency with respect to the addressed challenges. If full transparency can be provided, the application developer can simply ignore all related issues since they are handled by the middleware. Yet, providing transparency requires a thorough understanding of the problem domain and the application domain since the middleware designer must be able to identify a completely generic solution that provides satisfying results for all possible application scenarios. As a consequence, middleware services that provide full transparency are usually restricted to a particular type of application and to a very specific type of problem. • Configurable automation: Given that full automation often imposes severe restrictions on the supported scenario, a frequently used trade off is configurable automation. Instead of defining a middleware layer that abstracts from all details, the middleware designer creates an abstraction that automates the task with the help of some configuration of the application developer. As a consequence, the application developer can forget about the intrinsic problems after deciding upon the basic configuration. In cases where the number of possible solutions is reasonable small, configurable automation can greatly simplify application development. Yet, as the number of possible solutions grows, the configuration becomes more and more complicated until it outweighs the benefits of automation. Pervasive Computing Middleware 205 • Simplified exposure: In cases where configurable automation can no longer achieve satisfying results, pervasive computing middleware can strive for simplified exposure. So instead of offering mechanisms to automate a certain task, the middleware can restrict itself to the automated gathering of information needed to fulfill the task. Given that many tasks are not well-understood or have a huge solution space, this level of abstraction is sometimes the only reasonable option. Clearly, this might seem to be a very low level of abstraction. However, it can still be very valuable for two reasons. On the one hand, the gathering of the necessary information can be a complex task in itself. On the other hand, centralized gathering of information can often be more efficient, especially, in cases where multiple applications require the same type of information. 2.3 Supported Tasks Besides from the organizational model and the level of abstractions, the most influential factor in pervasive computing middleware design is certainly the task supported by the system. Due to the great variety of challenges, the set of tasks is equally large. Yet, several tasks must also be handled by conventional systems and in many cases, the solutions applied by pervasive computing middleware follow traditional patterns. To avoid the repetition of main stream concepts, the in-depth discussion of pervasive computing middleware in this chapter is restricted to the following three main services that can be found in a majority of the existing system. • Spontaneous Interaction: Independent from the underlying organizational model, pervasive applications need to interact spontaneously with an ever-changing set of heterogeneous devices. To do this, applications not only need to communicate with each other but they also need to detect and monitor the available set of devices. As a consequence, even the most basic middleware systems provide functionality to enable this kind of spontaneous remote interaction. The details of the support, however, depend on the organizational model and the level of abstraction can vary accordingly. • Context Management: Besides from interaction, a key difference between traditional and pervasive computing applications is that pervasive applications need to take the state of the physical world in to account. In addition to writing appropriate application logic, this bears many complex challenges. First and foremost, the relevant observations need to be made. Depending on the phenomena, this may require coordinated measurements of multiple distributed sensors and the fusion of several readings. During this process, the application has to deal with varying sensor availability and uncertainties in measurements. Moreover, the application might have to deal with various types of sensors resulting in different data representations, etc. As a result, server middleware systems aim at hiding these complexities by providing integrated context management services. 206 Gregor Schiele, Marcus Handte and Christian Becker • Application Adaptation: The dynamics and heterogeneity of pervasive systems as well as the fact that pervasive applications are usually distributed raises an inherent need for adaptation. In order to function properly despite their highly dynamic execution environment, applications need to adapt to the overall system properties, the available capabilities that can be leveraged at a certain point in time and the context of their users. To simplify application adaptation, many middleware systems provide services that hide several aspects or that provide at least configurable automation. To do this, they introduce additional abstractions, e.g. to specify dependencies on the execution environment or to define optimization goals, and they provide supportive mechanisms. It is noteworthy that only the most basic systems cover solely one of the services described above. In fact, most systems have building blocks for each of them. While some systems have provided basic support for all of these tasks right from the early stages of their development (e.g. [19], [36]), other systems have been extended with additional services over time (e.g. [34], [6]). Yet, due to differences in the underlying organizational model and the specifics of their application scenario, the resulting middleware solutions explore vastly different abstractions. The following sections, provide a more detailed discussion of the three middleware services described above and they relate the internal structure as well as the provided level of abstraction to the organizational model and the application scenario. 3 Spontaneous Interaction Pervasive computing applications are typically distributed over a number of participating devices, e.g. a wall-mounted display for graphical output, a mobile device for user input, and a fixed infrastructure server for data storage. To support this, a suitable distribution platform is needed. We distinguish between three different requirements that such a platform or middleware must fulfill: • Ubiquitous communication and interaction: First, the middleware should support ubiquitous and configuration-free interaction with other devices. This includes basic communication abilities, i.e., the ability to reach other devices and to communicate with them interoperably. In addition a suitable interaction abstraction is required to access remote devices. As an example, a service-based approach can be used. • Integration of heterogeneous devices: Second, the middleware should allow to integrate a wide range of different devices into the system. This includes not only devices based on different hardware and software platforms – the classical goal of interoperability – but also devices with very different resources. As an example, one device might offer a lot of CPU power and memory but no graphical output. Another device might have very scarce computational and memory resources but a large graphical display attached to it. Pervasive Computing Middleware 207 • Dynamic mediation: Third, the middleware should provide a dynamic mediation service that allows to select suitable interaction partners at runtime. This service can be realized in different ways, e.g. by letting devices interact directly with each other or by using an additional system component to mediate between devices. In the following we discuss each of these issues in more detail and analyze how different existing middleware systems for pervasive computing address them. 3.1 Ubiquitous Communication and Interaction Enabling devices to cooperate with each other requires interoperability between these devices. Interoperability is a multilayer issue that needs to be guaranteed starting at the lowest layers of the networking stack up to the application layer. Here, a common understanding of the semantics of shared functionalities is required. To achieve this, different syntactic or semantic descriptions have been proposed. Middleware has to provide the necessary mechanisms to achieve interoperability on these different layers, or at least has to support applications in this task. 3.1.1 Interoperability In general there are three main possibilities to solve the issue of interoperability as shown in Figure 2. interoperability fixed standardized protocol set dynamically negotiated protocol set interaction bridges Fig. 2 Possibilities for interoperability The first possibility is to standardize a fixed common set of protocols, technologies and data formats to interact with other devices. As long as a device uses this standard set of functionality, it will be able to communicate and interact with everybody else in the system. This approach is used by most classical middleware systems, e.g., CORBA [32], Java RMI [50] or DCOM [16]. One prominent example for a pervasive computing middleware relying on a fixed set of standard protocols is UPnP [52]. It defines a set of common communication protocols, e.g., HTTP and SOAP, to allow interaction between devices. Messages are encoded with XML. The exact format of each message must be defined between the communication partners 208 Gregor Schiele, Marcus Handte and Christian Becker before the interaction can take place. Clearly, the main challenge of this approach is the standardization process itself. Once a common standard is established, interaction becomes possible efficiently. However, it is difficult to change the standard protocols without updating or exchanging all devices. This is specifically problematic in pervasive computing systems, since (1) many devices are embedded into everyday items and thus cannot be updated easily, and (2) devices have a relatively long life time if they are embedded into long living objects, like furniture. The second, much more flexible possibility to achieve interoperability is to allow the middleware to negotiate the protocols used to interact with others at runtime. This additionally allows to switch between different communication technologies at runtime. As users and their devices move around in a pervasive computing system, the available communication technologies may vary over time. As an example, a wireless local area network (WLAN) might be available to users in a building but become unavailable when the user leaves it. By switching to another technology, the middleware is able to offer the maximum achievable communication performance. One middleware allowing such so-called vertical handoffs is the BASE middleware [5]. Based on specific communication requirements that can be selected by an application, BASE negotiates the used protocols and technology with the communication partner dynamically. If during an interaction a technology becomes unavailable, it reselects another one automatically and continues the interaction. Another example for a middleware in this class is Jini [53]. Jini is a Java-based middleware that enables the utilization of distributed services in dynamic computer networks. It relies on mobile code to distribute service-specific proxies to clients. These proxies can include proprietary protocol stacks to access the remote service. This allows to use different protocols for accessing different services, and thus enables already deployed devices to interact with new devices that use newer protocols. However, Jini does not allow to switch between different protocols for the same service dynamically. A more sophisticated variant of this approach are dynamically reconfigurable middleware systems (e.g. [28], [38], [4], [10], [9], [41]). These middleware systems are able to adapt their behavior at runtime to different requirements and protocols, e.g., by selecting which wireless communication technique should be used or how marshalling is done. To do so, these systems offer a reflection interface to allow the application to determine and change the current middleware behavior dynamically. A third possible approach is to introduce interaction bridges into the system that map between different approaches. This approach is very well known on lower layers of the networking stack, e.g., to interconnect different networking technologies. In addition, it can be used on higher layers, too. As an example, the Unified Object Bus [37] used in Gaia provides interoperability between different component systems by defining a common interface to control component life-cycles. 3.1.2 Communication Abstractions Another important issue when discussing ubiquitous interoperable interaction is the used communication abstraction. Conventional middleware offers various commu- Pervasive Computing Middleware 209 nication abstractions to develop distributed applications. These abstractions range from network-oriented message passing primitives and publish-subscribe abstractions [18] over associative memory paradigms such as tuple spaces [11] to remote procedure calls [7] or their object-oriented counterpart of a remote method invocation (RMI). Since the latter extends the concept of a local procedure call - or a method invocation respectively - to distributed application development, it is commonly supported by mainstream middleware like CORBA [32], Java RMI [50], and Microsoft’s .NET Remoting [12]. Many pervasive computing middleware systems (e.g. [36], [5], [53], [52]) have adopted RMI as their primary communication abstraction. The main advantage of RMI is that it is well known and generally well understood by developers. However, since a remote call requires to previously bind to a specific communication partner, RMI leads to rather tightly coupled communication partners. This may be problematic in highly dynamic environments with frequent disconnections between communication partners. Without further precautions, such a disconnection results in a communication failure that must be handled programmatically by the application developer. A possible solution is to store requests and responses in persistent queues as done, e.g., by the Rover Toolkit [2]. This way the communicating devices can be disconnected temporarily at any point in time and can continue their interaction once they are connected again. Yet, the application of such queued remote procedure calls is only suitable in cases where very high latencies can be tolerated and requires that the communication partners meet eventually to finish their interaction. If this is not the case, the binding between the communication partners must be dissolved and a new binding must be determined. Note that in case of a stateful interaction that has a shared interaction state at both partners, it is necessary to restore this state at the new communication partner before the interaction can continue. This can, e.g. be done using message logs [22] and checkpointing [22] [20]. To avoid such problems, communication abstractions with loosely coupled communication partners can be used. Here communication partners do not communicate directly but are decoupled by a intermediate communication proxy, e.g., a message queue or tuple space. To initiate an interaction, a device sends a message to the proxy, which stores the message. If another device is interested in the message it can access the proxy and retrieve the message. This approach is e.g. used in iRos [34]. Applications send event messages to a so-called event heap. The event heap stores events and allows other applications to retrieve them at a later time. Events are automatically removed from the event heap after a predefined time. Since there is no explicit binding between communication partners, the event sender does not need to know if its events are consumed by anyone or simply dropped. In addition, the recipient of the events can change during runtime without the sender knowing about it. Similarly to iRos, the one.world system [20] is based on loose coupling. It uses tuple spaces instead of an event heap. Each interaction results in an event data item being stored in the tuple space. An interested recipient can retrieve the data item, consuming it in the process, and can place an appropriate answer in the tuple space. 210 Gregor Schiele, Marcus Handte and Christian Becker 3.2 Integration of Heterogeneous Devices To integrate heterogeneous devices into the system, the middleware must be able to be executed on each of them. This requires the middleware to be adapted to different hardware and software platforms, e.g. by introducing a small system abstraction layer that encapsulates the specific platform properties. On top of this abstraction layer, the system is realized in a platform independent way. Another possibility is to develop the system using a platform independent execution environment like e.g. the Java virtual machine. This way the middleware itself is platform independent and all platform dependent system parts are pushed down in the underlying execution environment. Clearly this works only for target environments for which the used execution environment is available. The challenge of developing cross-platform systems that can be executed on different heterogeneous devices is not specific to pervasive computing. It exists for all cross-platform applications. Therefore we will not go into further detail on this issue here. The reader is referred to [8] for a more elaborate discussion. In pervasive computing the middleware faces an additional challenge when trying to integrate different devices. The used devices may differ widely between the capabilities and resources they offer. A stationary server may have a lot of resources with respect to CPU power, memory, network bandwidth and energy. However, it may not offer any user input or output capabilities. On the other side, a mobile device might have very scarce resources but offer such user interface capabilities. The middleware must take this into account to be usable for all these devices. It should operate with few resources if necessary but utilize abundant resources if possible. On a mobile and thus energy-poor device it should offer energy saving mechanisms to achieve suitable device life times. There are different approaches to create system software with minimal resource requirements that still maintains enough flexibility to make use of additional resources. The two extremes are (1) building multiple, yet compatible systems for different classes of devices, and (2) building modular systems with a minimal yet extensible core. As an example for the first approach, the Object Management Group defined minimumCORBA [31], a subset of CORBA intended for resource-poor devices. Another example is PalmORB [39], a minimal middleware for personal digital assistants that only offers client-side functionality. Thus, the mobile device cannot offer services itself but only acts as a client for remote services. The second approach is to provide a modular and extensible system architecture. One example for this is the Universally Interoperable Core (UIC) [41]. It provides a minimal reflective middleware that is configurable to integrate various resources. UIC can be used in static and dynamic variants. The static version allow to tailor the middleware to a given device but does not allow to change the middleware configuration at runtime. This is only possible in the dynamic variant. BASE [5] is another micro-broker-based middleware system for pervasive computing. It allows its minimal core to be extended by adding so-called plugins, each one abstracting a certain communication protocol or technology. Pervasive Computing Middleware 211 The Gaia project [36] combines both aforementioned approaches. For extremely resource-limited devices, they provide a specialized middleware called LegORB [40]. On other devices, they employ dynamicTAO [38], which relies on a small but dynamically extensible core. 3.3 Dynamic Mediation Applications in pervasive computing are faced with unforeseeable and often highly dynamic execution environments. The communication partners that will be available at runtime are therefore often unknown at development time and may even change dynamically. To cope with that a suitable mediation service must be available that allows to decide dynamically with which devices to communicate and cooperate. Due to the dynamics of the execution environments, this mediation must be performed continuously. Mediation can be discussed for tightly or loosely coupled communication partners. As described before, loosely coupled communication partners do not communicate directly but via an intermediate communication proxy. In this case, mediation is rather simple as it is implicitly done by the proxy storing the data. A message is simply delivered to every device that accesses the proxy and reads the stored data. It is the recipient device’s responsibility to filter the messages that are interesting to it. Thus, mediation is done on the receiver side in this scenario. Tightly coupled communication partners require a much more sophisticated communication mediation. In such systems, the partners are first bound to each other at runtime. After that they exchange data directly. If one of the partners becomes unavailable, the communication binding breaks and must be renewed with different partners. Typical examples for this approach are service-based systems. Therefore, the process of searching for suitable communication partners is typically referred to as service discovery. Existing service discovery approaches can be classified into peer-based (or server-less) and mediator-based (or server-based) discovery approaches. 3.3.1 Peer-based Discovery In peer-based approaches (e.g., [52], [29]), all nodes participate in the discovery process directly (see Figure 3). To find a service, a client broadcasts a discovery request to the whole or part of the network. Nodes offering a suitable service answer the request. Alternatively, service providers broadcast service announcements periodically, notifying others about their services. The provider can announce only its own services [52] or all services it knows of [24]. Recipients of these announcements store them in a local cache. The cache can then be used to answer discovery requests of local [52] or both local and remote clients [24], thereby enhancing the system’s efficiency. The main advantage of peer-based approaches is their 212 Gregor Schiele, Marcus Handte and Christian Becker Fig. 3 Peers-based discovery simplicity and flexibility. This makes them specifically suited for highly dynamic environments. On the downside, to detect new services continuously, devices have to send requests and/or announcements regularly, largely limiting the scalability of peer-based approaches due to the resulting communication overhead and resulting energy consumption. A service discovery system that specifically tries to reduce this energy consumption is DEAPspace [29]. It uses synchronized time windows to broadcast service announcements. Between these windows, devices can be deactivated to save energy. Service descriptions are replicated on all devices and announced collectively. To lessen communication overhead, only one device sends its announcement in each cycle, preferably one with currently unknown services or much energy. Still, all service descriptions must be broadcast regularly, even if no client is interested in them. In addition, to enable new devices to join in, devices have to stay active for more than 50% of their time to ensure overlapping time windows. 3.3.2 Mediator-based Discovery In contrast to peer-based discovery systems, mediator-based service discovery approaches (e.g., [49], [25], [51]) delegate service discovery to a number of special devices – the mediators – that manage a possibly distributed service registry on behalf of all devices (see Figure 4). The mediators can either be independent from each other [49], can coordinate their entries with each other [51], or can form a hierarchy of mediators [1]. To publish services, providers register their services at the registry. Clients query it to detect services. As an optimization, clients can register their required services at the mediators to provide them with up-to-date information about new services via updates. Therefore, no broadcast is needed to detect or announce services, resulting in less communication overhead than with peer-based approaches. This makes mediator-based approaches especially suited to create highly scalable systems (e.g. [25], [51]). Their main drawback is that without a mediator in Pervasive Computing Middleware 213 Fig. 4 Mediator-based Discovery the vicinity, no discovery is possible. This is specifically problematic in highly dynamic environments without fixed infrastructure devices, because we cannot assume continuous connectivity to a specific device that could act as mediator. SLP [25] handles missing mediators by allowing nodes to switch to peer-based discovery if they do not find a mediator. Still, mediators are predefined. As they cannot sleep, battery-operated mediators will run out of energy quickly, forcing all other nodes to switch back to peer-based discovery. In addition, there may be more than one mediator in the vicinity, e.g. if two people come together with their devices. Gaia [36] uses a heartbeat concept for service discovery. As long as a service is available in a given environment, it sends periodic heartbeat messages to the mediator, the so-called PresenceService. As a result, the PresenceService sends enter and leave messages on a service presence channel that interested clients can listen into. An example for an energy-efficient mediator-based discovery system is SANDMAN [45]. Similar to DEAPspace, SANDMAN saves energy by deactivating devices. However, it does so by grouping devices with similar movement patterns into dynamic clusters. Each cluster selects a mediator that takes over service discovery for its cluster. The mediator stays active and answers discovery requests from clients. All other devices power themselves down until they are needed. This approach is more complicated than DEAPspace but scales to larger systems and allows longer deactivation times. 4 Context Management As applications adapt to changes in the environment, the relevant parameters of the environment need to be modeled and changes have to be propagated to interested or affected applications in an appropriate manner. Context management denotes the task of context modeling, acquisition and provisioning where context relates to 214 Gregor Schiele, Marcus Handte and Christian Becker relevant environmental information of an entity. We will first take a look at context itself and established definitions. Thereafter we will discuss the three major responsibilities of context management, namely the acquisition and fusion, modeling and distribution, provisioning and access. After more than a decade of research in context management a number of definitions exist. We do not want to present a survey but discuss two classical definitions. Schilit, Adams and Want identify three important aspects of context[46]. These are • where you are, • who you are with, and • what resources are nearby. Thus, they classify context-aware systems according to their adaptation to the location of use, the collection of nearby people resembling the social context, and the available network and computing infrastructure. Also, the change in these three sets over time plays a crucial role to the adaptation of a context-aware application. A context-aware application must be capable of examine the available context and adapt accordingly. Dey provided one of the first approaches that integrated a framework for adaptive applications, the context toolkit [15], along with software engineering aspects. A number of applications has been investigated. Dey defines context as any information that can be used to characterize the situation of an entity [14]. Entities can be considered to be persons, places, or any object that is considered relevant to the interaction between a user and an application, including the user and applications themselves. This definition specifically addresses applications that are user centered. Dey further defines a system to be context-aware if it uses context to provide relevant information and/or services to the user. Relevancy depends on the user’s task. A further classification of applications leads to three classes of applications: • Context-aware presentation: the application changes its appearance depending on context information. Examples are navigation systems that change the level of detail depending on the speed or multi-modal application that can select different output media, e.g., audio or video, based on context information, e.g., environmental noise. • Automatic execution of a service: in this class, applications are triggered depending on context information. Examples are reminder services that can notify users based on configured patterns, e.g., during a shopping tour, or automatic execution of services in an automated home. • Tagging of context to information for later retrieval: this class of applications allows to augment the daily environment of user with virtual artifacts. Messages that are linked to places or objects can become visible to users due to a distinct context, e.g., their identity, their activity, their role. So far we have seen on a rather abstract view how applications can utilize context in order to change their behavior based on context. A yet open question is the Pervasive Computing Middleware 215 Fig. 5 Generic Model of Context Management management of context. Figure 5 shows a simple and generic model of context management. The physical world is situated at the bottom of the model. Sensors – which may also be users entering data about our environment into an information system – feed the context model. The context model thus contains a more or less comprehensive abstraction of a part of our physical environment. This allows applications to reason about context and take actions. The interfaces between sensors and the context model as well as between context model and applications can be synchronous (pull) or asynchronous (push). Finally, the applications also can provide context information to the model, e.g., user preferences or tagging of context information. We will briefly look at some relevant aspects of context management in the next subsections. 4.1 Acquisition and Fusion Since context to a large degree is related to the physical world, we need sensors to capture the state. This immediately leads to two major problems that have to be handled: • Accuracy: sensors measure and by doing so, they exhibit a deviation with respect to the actual value of the measured entity. Sensors typically specify the mean and maximum error when reading data. A GPS sensor refers to a sphere in space which depends on the number of satellites that can be seen and may be improved by some additional signal. Temperature readers only work with a distinct degree. As a consequence, one can hardly handle context data as facts 216 Gregor Schiele, Marcus Handte and Christian Becker with discrete values. Intervals, possibly enriched with a distribution function of the values, can reflect this fact. • Freshness: once a value is read, it ages. Depending on the characteristics of the entity which is measured, sensor readings show a rather long period where their value can be considered "up to date". Once we know how values in the physical world can change, e.g., the maximum speed of an object, we can estimate the maximum deviation over time. This can help us to reduce the rate in which sensors are read. Basically, this is a transformation from freshness into accuracy once we know the rate of change of the monitored entity. Although we can only gather information about our environment with a distinct accuracy, there are methods to gain a more accurate view. First, combinations of sensors can be used. Using different technology can help to reduce errors. Even the same sensor technology can help to gain more accurate sensor readings, e.g., when visuals are taken from different perspectives. In contrast to redundant or multiple readings from the same or similar sensor technology one can use additional information in order to increase the accuracy or reduce the error probability. If, for example, an indoor positioning system returns two rooms as possible position additional information can help to narrow down the position. Additional information could be login information at a computer or key stroke activity of an instant messenger. Combining different sensor information in order to reduce errors or deduce other context information is called sensor fusion. Higher context information based on low level sensors is a typical task of sensor fusion. As an example consider a meeting room that allows readings of light condition, temperature, ambient noise, etc, e.g., via the ContextCube [3]. A situation with closed blinds, artificial light (can be determined by the wave length), and one person talking can be reasoned to be a presentation. Rules for sensor fusion and reasoning require adequate modeling of sensor information and the relation between different sensors. We will talk briefly about context modeling in the next section. 4.2 Modeling and Distribution Context acquisition can be a costly task. Besides simple and cheap sensors, context can also be gathered by expensive methods, e.g., surveying. In order to mitigate the resulting costs, sharing the costs among a number of applications can be helpful. However, if a single institution cannot handle the costs sharing context information across institutions can pave the way. A popular example is map data. Although it is quite expensive to gather, the scale of its applications from classical maps to modern navigation systems allows achievable costs for the individual user. A prerequisite for sharing is standardization. This can be done by standardized interfaces: the internal representation of the data is decoupled by a a set of functions from the using applications. This eases using data being distributed across a number of services. However, this still requires that the retrieved information can be interpreted across a number of applications. This leads to the second prerequisite: standardized Pervasive Computing Middleware 217 data. Applications need to interpret the data – obviously they need type information. There is a plethora of different context modeling schemes which can only covered by a brief discussion here. Simple approaches use name value pairs. Clearly, this requires that every application knows the names of the context concepts and interprets the associated data the same. Name value pairs do not allow to relate concepts to each other. Thus, specialization of existing concepts is not possible as well as modeling hierarchies, e.g., inclusion of locations. Object-oriented modeling techniques allow to model specialization of concepts and thus extension of existing hierarchies. Additional relations between the concepts cannot be handled and the modeling is restricted to classes. Ontologies offer additional means for modeling and allow reasoning over context. This is, however, a complex field on its own. The interested reader is referred to [48]. Other aspects of distribution is the placement of data in a set of distributed services. This can help to balance requests from services and allow scalability. This requires directory services that forward the requests to the servers hosting the information. Clearly, such directories should not result in performance bottlenecks or single points of failure themselves. 4.3 Provisioning and Access As discussed above, the interface to a context model – realized as a context service – is crucial in order to provide suitable abstractions for applications. Dey as well as Bauer, Becker and Rothermel identify three classes of context that are relevant for context access: • identity: as in regular databases, context information can be identified by a unique key. This allows to query for context information in a direct way. • location: since context information is related to our physical environment, many queries will relate to objects and their spatial relation, i.e., the nearest objects (nearest neighbor queries), objects residing in a distinct spatial area (range queries), and queries for an objects position (position queries). • time: past context can be stored and retrieved later allowing for, e.g., lifelogging applications. Also, some context, e.g., weather or traffic jams, can be predicted. Thus, a context model should support queries for the past, current context and the future. Not every context model has to support all these queries. Also, the kind of queries can differ. Applications can poll context by issuing queries to the context model. This is similar to classical databases. Since many applications react on context changes, it can ease the development of applications when they register only for a notification that is issued, when the context changes. 218 Gregor Schiele, Marcus Handte and Christian Becker 5 Application Adaptation In general, the distraction-free and intuitive task support envisioned by pervasive computing cannot be achieved by a single device alone. As Mark Weiser pointed out already [54], the real power of pervasive computing emerges from the interaction of all of them. Given that only very simple tasks can be supported by one device, thorough task support requires some form of distributed coordination to integrate the unique capabilities of multiple devices. In pervasive computing environments, the integrating coordination of devices is specifically challenging for several reasons. First and foremost, due to the embedding of devices into everyday objects, it is pretty unlikely that different environments will exhibit similar sets of devices. Secondly, due to mobility, failures and continuous evolution, the set of devices that is available in a certain environment is changing over time and many of the changes cannot be predicted reliably. Finally, even if the set of devices is known in advance and does not change, different users may require or prefer the utilization of different devices for the same task in the same environment. As a consequence, the coordination of the devices cannot be done statically in advance. In order to support diverse settings and to provide distraction-free task support for different users, the coordination must be done on the basis of the target environment and user. Furthermore, since the environment may change at any given point in time, the coordination must be able to adapt to many changes. Without appropriate coordination support at the middleware layer, coordination must be handled by the application layer. Besides from complicating the task of the application developer, this approach has the a number of significant drawbacks. For instance, if some parts of the coordination logic cannot or shall not be handled by the application, e.g. to support customization for different users, it is hard to provide an application-overarching customization interface. Similarly, if multiple applications are executed at the same time, their coordination logic might interact in unforeseeable and undesirable ways. In the past, researchers have proposed two alternative coordination approaches which are depicted in Figure 6. Both have been supported by corresponding middleware systems and in principle, they are complementary. However, they have not been integrated in a single unifying system so far. The first approach, inter-application adaptation, coordinates the execution of several non-distributed applications [19], [34]. The second approach, intra-application adaptation, strives for coordination of a single application that is distributed across several devices [13], [6], [42], [33]. The following sections provide a detailed look at each of the two approaches and discusses exemplary middleware services to support the arising tasks. Pervasive Computing Middleware 219 Fig. 6 Application Adaptation 5.1 Inter-Application Adaptation The goal of inter-application adaptation is to provide thorough task support by coordinating the execution of multiple applications across a set of devices. Usually, the applications themselves are not distributed and they are not aware of each other. This enables the utilization of arbitrary compositions, however, this does not necessarily induce that the applications do not interact with each other at all. They may interact either through some form of mediated communication or they may rely on classical mechanisms such as files. A charming benefit of inter-application adaptation is that it enables the reuse of traditional applications in pervasive computing environments with minor or even no modifications. Considering the amount and the value of available applications this argument is quite convincing. In addition, inter-application adaptation can shield the application developer completely from all aspects of distribution since the coordination does not require application support. Last but not least, as applications do not interact with each other directly, intra-application adaptation facilitates robustness and extensibility. To provide support for inter-application adaptation, middleware can take care of multiple tasks. First, the middleware can determine the set of applications that 220 Gregor Schiele, Marcus Handte and Christian Becker shall be executed. Upon execution, it can supply the applications with user-specific session state. Secondly, the middleware can detect changes and adapt the set of applications accordingly. If one application shall be replaced with another one, it can provide transparent transcoding services for user data. Finally, the middleware can also provide services to facilitate the interaction of applications. Clearly, not all existing middleware systems that target inter-application adaptation provide all services. The following briefly describes how two prominent middleware systems, namely Aura [19] and iRos [34], support inter-application adaptation. To understand their mechanisms it is noteworthy to point out that both middleware systems are targeted at smart environments and thus, they assume that some configuration can be done manually and that it is possible to implement centralized services on a device with guaranteed high availability. To manage application compositions automatically, Aura introduces a task abstraction. As indicated by the name, a task actually represents a user task including the relevant data. Examples for tasks are the preparation of a certain document or presentation. Tasks can be specified by the user through some graphical user interface. When a user wants to start or continue a specified task, Aura automatically maps the task to a certain set of applications on a set of the currently available devices. This mapping is done automatically by the PRISM component of Aura. To do this, the PRISM component relies on a so-called environment manager which is a centralized component that maintains a repository of the available applications. In order to supply the applications with the user data and in order to deal with disconnections, Aura relies on the advanced capabilities of the Coda distributed file system [44]. Thereby, Aura can also adapt the fidelity of the data using Odyssey [30] in order to optimize the execution despite fluctuating network quality. However, interaction between applications that are supporting the same task is not supported by any of the services of Aura. While iRos does not support an automated mapping between user tasks and applications, it provides services that are specifically targeted at interaction support. To prevent a tight coupling of applications, iRos introduces a so-called event heap [26]. The event-heap allows applications to post and receive notifications. The notifications can be generated and processed by applications that have been specifically developed with the event heap in mind or by scripts that extend existing applications that are not aware of iRos. A presentation application, for example, may generate an event whenever the slide changes. Some other application may then use the corresponding notifications to dim the light in the room as long as the presentation is running. In addition to pure event distribution, the event heap also stores events for a limited amount of time. This reduces timing constraints between applications and it can be used to recover from application failures. For example, by processing the recent events stored in the event heap, a script may be able to restore the internal state of an application after a failure. Just like Aura, iRos also takes care of data management but it uses a slightly different approach. Instead of reusing an existing distributed filesystem, iRos introduces a so-called data heap. Besides from persistent data storage, the data heap can also provide automated type conversions on the basis of the Paths system [27]. Thus, instead of selecting an application on the ba- Pervasive Computing Middleware 221 sis of the data type of the input files, the user can simply select an application that provides the desired feature set. Despite its undeniable benefits, inter-application adaptation is not without issues. On the one hand, mediated communication or indirect interaction by sharing session data can ensure that individual applications are not tightly coupled. On the other hand, however, it only supports weak forms of coordination between applications well. In cases where stronger forms are required, e.g. if a certain action should take place shortly after a certain event occurred, additional middleware support can greatly simplify application development. Similarly, if a single application must be distributed to fulfill its task, e.g. because it requires resources that cannot be provided by a single device, the application does not benefit from inter-application adaptation. Mitigating this is the primary goal of intra-application adaptation. 5.2 Intra-Application Adaptation The goal of inter-application adaptation is to provide thorough task support by coordinating the execution of a distributed application across a set of devices. The level of integration that can be achieved by this approach exceeds the achievable level of multiple independent applications. Providing thorough task support without coordinating the actions of multiple devices is often simply not possible. For example, a collaboration application that runs on several mobile devices might need to share data in a tightly controlled way. Unlike inter-application adaptation which can benefit on an unlimited degree of compositional flexibility, a distributed application usually requires the availability of certain functionality. For example, in order to print a document, a word processing application requires a printer. In addition to minimum requirements an application may also want to achieve certain optimization goals that may also depend on user preferences, e.g. use the nearest or the cheapest printer. As a consequence, the flexibility of the composition of functionalities is usually limited by application requirements and optimization criteria. Depending on the complexity of the application, the configuration and runtime adaptation of the composition can be quite complicated. As a result, a primary goal of many pervasive computing middleware systems that support intra-application adaptation is the automation or at least the simplification of these aspects. A noteworthy exception is the approach taken by Speakeasy [17]. Instead of automating the composition, Speakeasy proposes the manual composition of a distributed application from components that can be recombined without restrictions. Thus, a user can create compositions that have not been foreseen at development time. However, manual composition is hardly viable for applications that consist of a larger number of components or for environments that exhibit a higher degree of dynamics. The system-supported configuration and runtime adaptation of a composition requires a model of the application that captures the individual building blocks, their dependencies on each other and the dependencies on the environment. The models 222 Gregor Schiele, Marcus Handte and Christian Becker that are applied in practice can be classified depending on the supported degree of flexibility: At the lowest level, the model contains a static set of building blocks with static dependencies. As a consequence, a valid configuration can be formed on a set of devices that fulfills the requirements and runs the specified building blocks of the application. This approach is taken by the MetaGlue [13] agent platform, for example. Although, the approach results in simple applications that must only deal with a fixed and know set of code, the lack of flexibility can be a significant short-coming in practical scenarios. One reason for this is that the approach requires devices to run an application-defined building block. In many scenarios this requires that the devices are capable and willing to install additional code or it simply restricts the set of possible devices to those that are equipped with the code already. In order to mitigate this, it is possible to refrain from restricting the building block to a specific implementation. In order to ensure the correctness of the application despite the unknown implementation, it is necessary to model the required building blocks using a detailed functional and non-functional description. As this description must be provided by the application developer, this approach increases the modeling effort. However, in return, it becomes possible to use alternative implementations of the same functionality without risking undesirable effects on the application behavior. In addition to broadening the number of target devices, this indirect specification also facilitates the evolution of individual building blocks. Yet, having a static set of building blocks may be limiting in cases where one building block can be replaced by a combination of building blocks. The same holds true in cases where the number of building blocks cannot be specified in advance, e.g. because it depends on the environment. To support such scenarios, it is possible to introduce flexible dependencies into the application model and several middleware systems follow this approach. The exact implementation, however, differs depending on the middleware. The Gaia system [36], for example, relies on an application model that allows the utilization of a varying number of components to display or perceive some information. This can be used to adapt the output of an application to the number of users or to the number of available screens. The PCOM component system [6] attaches dependencies to each component and requires that all recursively occurring dependencies are satisfied by another component. As a result, applications in PCOM are essentially trees of components that are composed along their dependencies. The system proposed in [33] also relies on recursion. However, instead of attaching dependencies to components, the authors introduce an additional level of indirection called Goals [43]. Goals represent a specific user goal that can be decomposed automatically into a set of simpler sub Goals. After the decomposition has succeeded, they are mapped to components using Techniques. A Technique essentially resembles a script that defines how the components need to be connected and thus, it is possible to support more complex composition structures than in PCOM. Although, a flexible dependency specification is appealing at a first glance, it is noteworthy that the resulting configuration problems are often quite complex which may limit the scalability of such approaches. Pervasive Computing Middleware 223 On the basis of the application model, pervasive computing middleware can then provide services to automate the configuration and runtime adaptation. The canonical approach is to construct a configuration that satisfies the requirements defined by the application model. The complexity of this depends heavly on the underlying problem and on the completeness of construction procedure. If the construction systematically enumerates all solutions, it can often exhibit an exponential runtime [33], [21]. To mitigate this, it is possible to tradeoff completeness for increased performance [6]. Alternatively, if the environment is mostly static, the configuration can be computed once and reused multiple times [35]. During the construction, additional optimization goals can be introduced in the form of some utility function [33]. The concrete implementation of the utility function may be specified by the user or the application developer. In the case of runtime adaptation, the utility function may encompass cost components [23]. Usually, the cost components model the effort for changing the running configuration which is dependent on the application model and the adaptation mechanisms. During the construction of the configuration, the utility value is usually optimized heuristically as a complete optimization would lead to considerable performance penalties. Middleware systems that are based on the organizational model of a smart environment can assume the permanent presence of a powerful computer that may be used to compute configurations. As a consequence, these systems usually perform the configuration centralized [33]. In peer-based systems, the availability of a single powerful device cannot be guaranteed. As a result, the computer system that is used for configuration is either selected dynamically [47] or the configuration process is distributed among the peers [21]. 6 Conclusion The development of pervasive applications that provide seamless, intuitive and distraction-free task support is a challenging task. Pervasive computing middleware can simplify application development by providing a set of supportive services. The internal structure of the services is heavily influenced by the overall organization of the pervasive system and the targeted level of support. Three main services that can be provided by pervasive computing middleware are support for spontaneous interaction, support for context management and support for application adaptation. As basis for the cooperation of heterogeneous devices found in pervasive systems, middleware support for spontaneous interaction alleviates the handling of low-level communication issues. Beyond communication, support for context management ensures that application developers do not have to deal with the intrinsics of gathering information from a multitude of unreliable sensors. Finally, support for application adaptation simplifies the task of coordinating a changing set of devices to provide a seamless and distraction-free user experience. Although these services can greatly simplify many important tasks of the developer, the development of intuitive task support remains a significant challenge. As 224 Gregor Schiele, Marcus Handte and Christian Becker new scenarios and devices continue to emerge, application developers have to invent and explore novel ways of supporting user tasks with the available technology. Undoubtedly, this will result in additional challenges that may at some point spawn the development of further middleware systems and services. References [1] Adjie-Winoto W, Schwartz E, Balakrishnan H, Lilley J (1999) The design and implementation of an intentional naming system. In: Proceedings of the 17th ACM Symposium on Operating Systems Principles (SOSP99), ACM [2] Anthony D Joseph MFK Joshua A Tauber (1997) Mobile computing with the rover toolkit. IEEE Transactions on Computers 46(3):337–352 [3] Bauer M, Becker C, Hähner J, Schiele G (2003) ContextCube - providing context information ubiquitously. In: Proceedings of the 23rd International Conference on Distributed Computing Systems Workshops (ICDCS 2003) [4] Becker C, Geihs K (2000) Generic QoS-support for CORBA. In: Proceedings of 5th IEEE Symposium on Computers and Communications (ISCC’2000) [5] Becker C, Schiele G, Gubbels H, Rothermel K (2003) Base – a micro-brokerbased middleware for pervasive computing. In: Proceedings of the IEEE international conference on Pervasive Computing and Communications (PerCom), URL citeseer.nj.nec.com/550575.html [6] Becker C, Handte M, Schiele G, Rothermel K (2004) Pcom - a component system for adaptive pervasive computing applications. In: 2nd IEEE International Conference on Pervasive Computing and Communications (PerCom 04) [7] Birrell AD, Nelson BJ (1984) Implementing remote procedure calls. ACM Trans Comput Syst 2(1):39–59, DOI http://doi.acm.org/10.1145/2080.357392 [8] Bishop J, Horspool N (2006) Cross-platform development: Software that lasts. In: SEW ’06: Proceedings of the 30th Annual IEEE/NASA Software Engineering Workshop, IEEE Computer Society, Washington, DC, USA, pp 119–122, DOI http://dx.doi.org/10.1109/SEW.2006.14 [9] Blair G, Coulson G, Andersen A, Blair L, Clarke M, Costa F, Duran-Limon H, Fitzpatrick T, Johnston L, Moreira R, Parlavantzas N, Saikoski K (2001) The design and implementation of Open ORB version 2. IEEE Distributed Systems Online Journal 2(6) [10] Blair GS, Coulson G, Robin P, Papathomas M (2000) An architecture for next generation middleware. In: Proceedings of Middleware 2000 [11] Carriero N, Gelernter D (1986) The s/net’s linda kernel. ACM Trans Comput Syst 4(2):110–129, DOI http://doi.acm.org/10.1145/214419.214420 [12] Chappell D (2006) Understanding .NET (2nd Edition). Addison-Wesley Professional [13] Coen M, Phillips B, Warshawsky N, Weisman L, Peters S, Finin P (1999) Meeting the computational needs of intelligent environments: The metaglue Pervasive Computing Middleware [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] 225 system. In: 1st International Workshop on Managing Interactions in Smart Environments (MANSE’99), pp 201–212 Dey AK (2001) Understanding and using context. Personal Ubiquitous Comput 5(1):4–7, DOI http://dx.doi.org/10.1007/s007790170019 Dey AK, Abowd GD (2000) The context toolkit: Aiding the development of context-aware applications. In: Proceedings of the Workshop on Software Engineering for Wearable and Pervasive Computing Eddon G, Eddon H (1998) Inside Distributed Com. Microsoft Press Edwards KW, WNewman M, Sedivy JZ, Smith TF, Balfanz D, Smetters DK (2002) Using speakeasy for ad hoc peer-to-peer collaboration. In: 2002 ACM Conference on Computer Supported Cooperative Work, pp 256–265 Eugster PT, Felber PA, Guerraoui R, Kermarrec AM (2003) The many faces of publish/subscribe. ACM Comput Surv 35(2):114–131, DOI http://doi.acm. org/10.1145/857076.857078 Garlan D, Siewiorek D, Smailagic A, Steenkiste P (2002) Towards distractionfree pervasive computing. IEEE Pervasive Computing 1(2):22–31 Grimm R, Davis J, Lemar E, MacBeth A, Swanson S, Anderson T, Bershad B, Borriello G, Gribble S, Wetherall D (2004) System support for pervasive applications. ACM Transactions on Computer Systems 22(4):421–486 Handte M, Becker C, Rothermel K (2005) Peer-based automatic configuration of pervasive applications. Journal on Pervasive Computing and Communications pp 251–264 Handte M, Schiele G, Urbanski S, Becker C (2005) Adaptation support for stateful components in PCOM. In: Proceedings of Pervasive 2005, Workshop on Software Architectures for Self-Organization: Beyond Ad-Hoc Networking Handte M, Becker C, Schiele G, Herrmann K, Rothermel K (2007) Automatic reactive adaptation of pervasive applications. In: IEEE International Conference on Pervasive Services (ICPS ’07) Helal S, Desai N, Verma V, Choonhwa L (2003) Konark - a service discovery and delivery protocol for ad-hoc networks. In: Proceedings of the IEEE Wireless Communications and Networking Conference (WCNC 2003), vol 3, pp 2107–2113 Hodes TD, Czerwinski SE, Zhao BY, Joseph AD, Katz RH (2002) An architecture for secure wide-area service discovery. Wirel Netw 8(2/3):213–230, DOI http://dx.doi.org/10.1023/A:1013772027164 Johanson B, Fox A (2002) The event heap: A coordination infrastructure for interactive workspaces. In: 4th IEEE Workshop on Mobile Computing Systems and Applications, pp 83–93 Kiciman E, Fox A (2000) Using dynamic mediation to integrate cots entities in a ubiquitous computing environment. In: 2nd International Symposium on Handheld and Ubiquitous Computing, pp 211–226 Ledoux T (1999) OpenCorba: A reflective open broker. In: Proceedings of the 2nd International Conference on Reflection (Reflection’99), pp 197–214 Nidd M (2001) Service discovery in DEAPspace. IEEE Personal Communications 8(4):39–45 226 Gregor Schiele, Marcus Handte and Christian Becker [30] Noble B, Satyanarayanan M (1999) Experience with adaptive mobile applications in odyssey. Mobile Networks and Applications 4(4):245–254 [31] Object Management Group (2002) Minimum CORBA specification, revision 1.0 [32] Object Management Group (2008) Common object request broker architecture (corba/iiop), revision 3.1. online publication, http://www.omg.org/spec/CORBA/3.1/ [33] Paluska J, Pham H, Saif U, Chau G, Ward S (2008) Structured decomposition of adaptive applications. In: 6th Annual IEEE International Conference on Pervasive Computing and Communications [34] Ponnekanti SR, Johanson B, Kiciman E, Fox A (2003) Portability, extensibility and robustness in iros. In: Proceedings of the IEEE International Conference on Pervasive Computing and Communications (PERCOM 2003) [35] Ranganathan A, Chetan S, Al-Muhtadi J, Campbell R, Mickunas D (2005) Olympus: A high-level programming model for pervasive computing environments. In: 3rd IEEE International Conference on Pervasive Computing and Communications, pp 7–16 [36] Román M, Campbell RH (2000) GAIA: Enabling active spaces. In: Proceedings of the 9th ACM SIGOPS European Workshop [37] Román M, Campbell RH (2001) Unified object bus: Providing support for dynamic management of heterogeneous components. Technical Report UIUCDCS-R-2001-2222 UILU-ENG-2001-1729, Universiy of Illinois at Urbana-Champaign [38] Román M, Kon F, Campbell RH (1999) Design and implementation of runtime reflection in communication middleware: The dynamictao case. In: Proceedings of the 19th IEEE International Conference on Distributed Computing Systems Workshops, Workshop on Electronic Commerce and Web-Based Applications, pp 122–127 [39] Román M, Singhai A, Carvalho D, Hess C, Campbell R (1999) Integrating PDAs into distributed systems: 2K and PalmORB. In: Proceedings of the International Symposium on Handheld and Ubiquitous Computing (HUC’99) [40] Román M, Mickunas D, Kon F, Campbell RH (2000) Legorb and ubiquitous corba. In: Proceedings of the IFIP/ACM Middleware’2000 Workshop on Reflective Middleware [41] Román M, Kon F, Campbell RH (2001) Reflective middleware: From your desk to your hand. IEEE Distributed Systems Online Journal, Special Issue on Reflective Middleware [42] Roman M, Hess C, Cerqueira R, Ranganathan A, Campbell R, Nahrstedt K (2002) Gaia: A middleware infrastructure to enable active spaces. IEEE Pervasive Computing 1(4):74–83 [43] Saif U, Pham H, Paluska J, Waterman J, Terman C, Ward S (2003) A case for goal-oriented programming semantics. In: System Support for Ubiquitous Computing Workshop, 5th Annual Conference on Ubiquitous Computing [44] Satyanarayanan M (2002) The evolution of coda. ACM Transactions on Computer Systems 20(2):85–124 Pervasive Computing Middleware 227 [45] Schiele G, Becker C, Rothermel K (2004) Energy-efficient cluster-based service discovery. In: 11th ACM SIGOPS European Workshop, pp 20–22 [46] Schilit B, Adams N, Want R (1994) Context-aware computing applications. In: Proceedings of the Workshop on Mobile Computing Systems and Applications, pp 85–90 [47] Schuhmann S, Herrmann K, Rothermel K (2008) A framework for adapting the distribution of automatic application configuration. In: 2008 ACM International Conference on Pervasive Services (ICPS ’08), pp 85–124 [48] Strang T, Linnhoff-Popien C (2004) A context modeling survey. In: First International Workshop on Advanced Context Modeling, Reasoning And Management (UbiComp 2004) [49] Sun Microsystems (2001) Jini technology core platform specification, version 1.2. online publication [50] Sun Microsystems (2006) Jdk6 remote method invocation (rmi) - related apis and developer guides. online publication, http://java.sun.com/javase/6/docs/technotes/guides/rmi/index.html [51] uddiorg (2004) UDDI spec technical committee draft, version 3.0.2. online publication, http://uddi.org/pubs/uddi_v3.htm [52] UPnP Forum (2008) Universal plug and play device architecture, version 1.0, document revision date 24 april 2008. online publication, http://www.upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v1.020080424.pdf [53] Waldo J (1999) The jini architecture for network-centric computing. Communications of the ACM 42(7):76–82 [54] Weiser M (1991) The computer for the 21st century. Scientific American 265(3):66–75