EMN, INRIA | project Obasco |
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).