REFLECTION is a concept by
which a component provides observation and control features of its own internal
structure and behavior to the outside world. This means that a reflective
component provides a metamodel of itself, including structural and behavioral
aspects that can be customized by an external component. This metainformation
is used as an input to perform appropriate actions for implementing
non-functional properties (e.g. concerning fault-tolerance and security
strategies), but also for the customisation of communication protocols.
Reflective systems indeed distinguish the base-level in charge of the
execution of the application software and the metalevel responsible for
the implementation of observation and control software.
In object-oriented terms, the base-level is composed of objects, the
metalevel is composed of metaobjects. The interaction between object and
metaobject is performed by a MetaObject Protocol (MOP). The MOP implements
reification (and introspection) features, but also intercession features to
adapt the base-level behavior according to system requirements.
The FRIENDS system is a distributed architecture based on MetaObject
Protocols that enables non-functional mechanisms to be implemented at the
metalevel. The use of reflective concepts is recursively used to address
various non-functional requirements: fault tolerance by mean of several
replication strategies, security by means of ciphering and authentication
protocols, communication using atomic multicast protocols. Thank to its
reflective architecture, FRIENDS provides separation of concerns between
applications and mechanisms, but also between different mechanisms.
In the last version of the FRIENDS system, a specialized MOP was
developed using open-compilers. This MOP enables interaction between CORBA
objects to be intercepted and state information to be obtained at the metalevel
for objects in both C++ and Java.
The advanced features of this MOP have been used to develop fault
tolerance replication techniques as CORBA (meta)objects. The later can be
reused dynamically and adapted according to the evolution of the system
configuration and its environment. This approach is a significant step forward
in the design and the implementation of fault tolerant systems with long
life-time and changing dependability constraints.
The prototype runs on a network of Unix workstation on top of Orbacus.
Slides of the presentation at SRDS’2000,
The
Symposium on Reliable Distributed Systems,
Nürnberg, Germany — October 16-18, 2000