Roughly spoken, the application programmer defines conditions on message
objects, by specifying methods through which these objects should
be queried, along with expected values that are compared to
the values returned by invoking these methods.
Subscription patterns are expressed through an API, which inherently
expresses a subscription grammar: by instantiating and combining filter
objects, syntax errors violating the grammar are detected by the JAVA
compiler. Thanks to the structural reflection of
message objects, type errors are avoided by verifying the
methods specified by the application.
In the following, we present our customizable filter objects, called conditions. These enable the dynamic definition of conditions on message objects, and are realized in a general manner through accessors, which we introduce first.