EMN, INRIA project Obasco


What is Reflex?

Reflex was initially conceived as a open and portable reflective extension of Java (and can still be used as such) but later evolved into a kernel for multi-language AOP. It provides, in the context of Java, building blocks for facilitating the implementation of different aspect-oriented languages so that it is easier to experiment with new AOP concepts and languages, and also possible to compose aspects written in different AOP languages. It is built around a flexible intermediate model, derived from reflection, of (point)cuts, links, and metaobjects, to be used as an intermediate target for the implementation of aspect-oriented languages. This is the level at which aspect interactions can be detected and resolved. Below this composition layer, a reflection layer implements the intermediate reflective model. Above the composition layer, a language layer, structured as a plugin architecture, helps bridge the gap between the aspect models and the intermediate model.

In order to be portable, Reflex is implemented as a Java class library. It relies on Javassist to weave hooks in the base bytecode at load-time and connect these hooks to the metalevel, or to add structural elements (methods, classes) according to a Reflex configuration program (which has first to be generated, for each aspect, by the corresponding plugin). Part of this configuration can be modified at runtime through a dynamic configuration API.

Load-time configuration makes it possible to limit program transformation to the program points of interest (partial reflection with spatial selection). Runtime configuration makes it possible to activate/deactiveate the hooks (partial reflection with temporal selection).

An important property of Reflex is that the MOP of its underlying reflective layer is not fixed but can also be configured. This makes it possible to configure Reflex in order to support efficient static weaving but also makes it possible to support dynamic weaving (although a minimal overhead at the level of the hooks cannot be avoided after unweaving).

This is common work with the Department of Computer Science at the University of Chile. See the Reflex web site in Chile. Reflex was initially developed by Eric Tanter for his PhD thesis at the University of Chile (Chile) and Ecole des Mines de Nantes (France).


Reflex is available as open source distributed under the MIT license. See the
Reflex web site in Chile.


The following people are currently working on Reflex at EMN:


Last update 17 May 2005 by Jacques Noyé