Event communications are asynchronous compared with the request/response operations in the standard client/server model for distributed systems. There are many application areas where event-driven operation is the most natural paradigm: interactive multimedia presentation support; telecommunications fault management; credit card fraud; disaster simulation and analysis; mobile programming environments; location-oriented applications, and so on. An event is defined as the occurrence of some interaction point between two computational objects in a system. Such a point may reflect an internal change of state of the system, or an external change captured by the system. An event can be a base event which has a single source of generation, or a composite event which correlates multiple base event occurrences to be signalled as a whole. Events may be pushed by suppliers to consumers (the push model) or pulled by consumers from suppliers (the pull model) through specific or generic interfaces; such communication may be direct, or indirect i.e. through an intermediate object between the consumer and the supplier. Active systems monitor the occurrences of events and push them through to client applications to trigger actions [2, 5]. In contrast, passive systems require client applications to poll to detect event occurrences. An active system is therefore inherently more scalable than a passive system.
For example, in an Interactive Multimedia Presentation support platform [3] a script specifies event-condition-action rules to drive the interactive presentation. The events ``Roger appears'' and ``Roger disappears'' may be associated with frames 2056 and 3092 of a video presentation. If the user clicks on Roger (an area of the screen marked during pre-processing of the film) after ``Roger appears'' and before ``Roger disappears'' then the pause method is invoked on the video, a new window pops up, text on Roger is displayed and the film resumes when the user clicks again. Location devices, such as active badges or electronic tags, are another source of events. We may wish to analyse how users behaved during a fire drill in order to determine bottlenecks in a building [2]. We may arrange for our programming environment to move with us when we are detected moving from one workstation to another [1]. In telecommunication, various events are monitored by the management system and used for network analysis and fault recovery [12].
We have designed an architecture for building active, event-driven systems in a large distributed environment, where there is potential for high volumes of event traffic; for instance in telecommunication applications, a single source can generate tens or hundreds events per second. The design focuses on providing components to support easy construction of applications. The components include event primitives, the mediator and the composite event service; each features well-defined interfaces and semantics for event registration, notification and fine-grain filtering. We demonstrate that COBEA is flexible in supporting various application scenarios yet handles efficiently high event volumes in the prototype implementation. After experience in using this approach in a home-built RPC system we have extended CORBA, an open standard for distributed object computing, to handle events in this way.