  Runtime adaptability is often a crucial requirement for today's complex
software systems. Several approaches use an architectural model as a runtime
representation of a managed system for monitoring, reasoning and performing
adaptation. To ease the causal connection between a system and a model, these
models are often closely related to the implementation and at a rather low
level of abstraction. This makes them as complex as the implementation and it
impedes reusability and extensibility of autonomic managers. Moreover, the
models often do not cover different concerns, like security or performance, and
therefore they do not support several self-management capabilities at once. In
this paper we propose a model-driven approach that provides multiple
architectural runtime models at different levels of abstraction as a basis for
adaptation. Each runtime model abstracts from the underlying system and
platform leveraging reusability and extensibility of managers that work on
these models. Moreover, each model focuses on a specific concern which
simplifies the work of autonomic managers. The different models are maintained
automatically at runtime using model-driven engineering techniques that also
reduce development efforts. Our approach has been implemented for the broadly
adopted Enterprise Java Beans component standard and its application is
presented in a self-healing scenario requiring structural adaptation.
