Hi all,
As you all know, we use "entry-points" to represent streams in Drools,
but in fact, entry points are a much more general abstraction than just
streams. For instance, they create partitions in the RETE's alpha network,
they support all Rete concepts like truth maintenance, they share a
centralized fact handle factory (that is possibly a contention point), etc.
Event Streams in general can have a much more specialized implementation.
For instance, as events are immutable, there is no need for truth
maintenance; streams should be 100% parallelizable (does this word exist?);
some algorithms like event sequencing can be run before injecting events
into the main engine instead of injecting and then coordinating back with
the sequencing algorithm.
Because of things like the ones above, I was considering creating an
explicit concept for streams in Drools. They would be a first class concept
in the engine and would be handled appropriately. They would be orthogonal
to entry-points, and be used exclusively for events.
The other option that we have would be to continue to hide the
implementation behind the concept of entry-points and to select algorithm
details by compile time analysis. Although it seems like a simpler solution,
it has the potential of confusing users that would not know exactly when
something is being executed as a regular entry point (with TMS, and all the
stuff mentioned above) or as a specific stream (that has features that would
be specific for events).
Thoughts?
Edson
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @
www.jboss.com