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