@Revision(value="$Revision: 1.4 $", date="$Date: 2006/12/15 20:37:49 $", tag="$Name: $")

Package rcf.core.concurrent.events

Includes support for a highly abstract, and powerful event model.

See:
          Description

Interface Summary
CausedEvent An event which was caused either by another Event or a Throwable.
Event An instance of this interface encapsulates some kind of meaningful sequenced event from a source.
EventCausedEvent An event which was caused by another Event.
EventSink<E extends Event> A sink for Events which can be registered with syndicates through the EventSyndicate.add(rcf.core.util.reference.Reference, Class) method.
EventSource A source of events, including a EventSource.syndicate() and some form of sequence numbering.
EventSyndicate A syndicate which distributes events from a single EventSource to many EventSinks, according to the Class of the event and the class of events for which the event sink was registered with EventSyndicate.add(Reference, Class).
IdentityChangeEvent<T> An event which marks a change in the identity of the Event.source() with respect to the Object.equals(Object), Object.hashCode() and Object.toString() methods.
ThrowableCausedEvent An event which was caused by a Throwable.
 

Class Summary
AbstractEventSource TODO: Javadoc
ArrayEventSyndicate TODO: Javadoc A very simple implementation of EventSyndicate which will only report events of a single type.
HashEventSyndicate TODO: Javadoc
 

Exception Summary
InvalidEventType TODO: Javadoc
 

Package rcf.core.concurrent.events Description

Includes support for a highly abstract, and powerful event model.


Event Model

At it's most basic, an EventSource calls EventSource.syndicate().EventSyndicate.event(Event) with an implementation of Event. The EventSyndicate is then reponsible for calling the EventSink.event(Event) method on all of the EventSinks which have been registered through EventSyndicate.add(rcf.core.util.reference.Reference, Class) with a Class that is Class.isAssignableFrom(Class) from the Object.getClass() of the event.

For more information about the uses of this event model, please see all of the descendents of the Event interface. Notable uses are the ThrowableCausedEvent, IdentityChangeEvent and the various possibilites suggested by encapsulting a method invocation as an Event. In conjunction with a publish/subscribe model this could be the basis of an Aspect Oriented Programming framework. Finally the rcf.core.concurrent.transactions package is a very important user of this package as both Transaction is both an Event and a Task

TODO: Javadoc
TODO: Javadoc review, Seal/Finalize

Author:
Greg Gibeling