As pointed
out in [Fer89], there are mainly two kinds of reflection. The
computational (behavioral)
reflection is concerned with the reification of
computations and their behaviour. In contrast, structural
reflection reifies the structural aspects of a program, such as data
types.
As we will show in this paper, structural reflection can be used to express subscription patterns in content-based publish/subscribe the same way it has already been used in object-oriented data management systems to express object queries (e.g., [SO95]). In our particular context, structural reflection can be reduced to a single aspect: the capability of representing structures of objects. This is sufficient to dynamically define the methods that our filters must use to query message objects. The introspection capabilities of JAVA [Sun99a] offer sufficient support for this, and the possibility of modifying data structures is not required.