At first glance, the question seems to be very simple but usually simple questions leads to generic answers which usually leads to false understanding of the nature of things. therefore, we may redefine the question to series of questions:
What is the nature of an event?
Event is about "change" in state of an object in a specific time, and the object could be anything such as atom, cell or photon. Event existence must be reflex of another event which means event must be a part of series, chain or tree of events [1].
The knowledge [2] about an event to an observer system is event itself and it happens as reflex of the main event, that means the observer system will always know about the event "after" it happens and there is no knowledge about an event "before" it happens.
What is the relation between events?
Event can be related with another event with their position in the events chain, therefore, event can be either the cause or effect of another event but if we have two different subsets of the events chain we may have two totally independent events in this case the time will be the only relation between them.
When two events being the same?
Event is always unique due the nature uniqueness of the time. therefore, its impossible for two events being the same [3] unless they happen in the same time and they have the same cause (parent events) and effect (child events).
What is the prevention of an event?
Due the fact of the knowledge about an event happens after the event itself, there is no way to prevent an event existence unless you change the cause chain of events, therefore, once the event exist its fact and there is nothing to do about it.
I know you may agree or disagree with me about the answers of above questions, that will keep events topic always very interesting especially when combining it with reactive/reflex agents [4] which recently, I start to work on it in ORGANON project [5]. The project requirement is to provide abstract messaging layer between agents and easy way to show interest in the system environment changes and observe it.
What is the event abstract layer from ORGANON perspective?
- Any object can be an event.
- Event has only one source (The dispatcher).
- Events are dispatched after it happens in event channel (synchronous or asynchronous).
- Channel has an address.
- Any object can be an address.
- Channel has a direction and can be either Upstream, Downstream or Bidirectional.
- Channel has a chain of handlers (Pipeline).
- Channel handler may handle Upstream and Downstream events.
- Channel handler may interrupt the flow of the event in the channel pipeline.
- Channels maybe connected to each other to share the events stream.
- There is no way to prevent event.
- A message is an event.
- A transaction is a group of events.
Lets take two examples of how events may work in ORGANON:

The above flowchart describe SMTP delivery system using ORGANON

The above flowchart describe XMPP network using ORGANON
The event/channel API [6] combine the above concepts into set of pluggable interfaces, annotation and various handlers implementation to improve the code quality of the agents and acceleration of the development
// Here an example of how agents works using Publish/Subscribe API
class ReflexAgent{
@Observes
public void handleTeaEvent(Tea tea){
System.
out.
println("Tea type is " + tea.
getType());
}
}
// Now show your interset
Platform.subscribe(new ReflexAgent());
// Later someone will drink tea
Platform.publish(new Tea());
// Also may someone drinks a green tea
Platform.publish(new GreenTea());
That's all, HAPPY ORGANON!
[1] Butterfly Effect - http://en.wikipedia.org/wiki/Butterfly_effect
[2] Information Theory - http://en.wikipedia.org/wiki/Information_theory
[3] Davidson's Theories of Events - http://en.wikipedia.org/wiki/Event_(philosophy)
[4] Intelligent agent - http://en.wikipedia.org/wiki/Intelligent_agent
[5] Organon Project - http://www.kemetex.com/en/technology/organon
[6] Event/Channel API - http://api.kemetex.com/docs/organon/platform/api/