[rules-users] Firiing explicit rules
Edson Tirelli
tirelli at post.com
Thu Jun 25 08:27:59 EDT 2009
Chris,
The decision between A and B must be taken on the basis of: do you need
to join objects from the different streams together? If so, you need A. If
not, better go with B.
Regarding threads, the engine works with a single thread, unless you
activate the KnowledgeBase partitioning option (check the Drools Fusion
documentation), in which case the engine spawns a pool of worker threads.
The threads are not assigned to specific streams. They are used as a pool
for processing of all required rules in the knowledge base.
In any case, as long as you don't have multiple threads concurrently
inserting facts/events into a single entry-point, everything else is thread
safe.
[]s
Edson
2009/6/24 Chris Richmond <crichmond at referentia.com>
> Hello,
>
>
>
>
>
> For performance reasons, assuming I am using STREAM mode, is it better to :
>
>
>
> A. create several streams in my rule file and inject objects into
> various streams depending on my needs
>
>
>
> or
>
>
>
> B. create a different session for each stream that I might have had in
> A. above?
>
>
>
>
>
> And if I do use option A, is my understanding correct that each stream will
> be processed on it’s own thread?
>
>
>
> And if so, I notice that I am able to update a common statistical object
> that I created within my rule file and update it from consequences on
> different streams. If each stream is processed on it’s own thread, is
> updating of this in rule defined statistics object synchronized/thread safe?
>
>
>
> For example in my rule file I have the following “stats” object:
>
>
>
> # stats object
>
> declare ObjectStats
>
> id : String @key
>
> name: String
>
> lastReadingA : int
>
> lastReadingB : int
>
>
>
> end
>
>
>
>
>
> ….then I have the following two rules……
>
>
>
> rule "update stats from objects A”
>
> lock-on-active
>
> when
>
>
>
> $stats : ObjectStats( $id : id)
>
> $a : ObjectTypeA(parentId == $id, $aValue : value) from entry-point
> “stream for objects of type a”
>
>
>
> then
>
>
>
> modify($stats) { lastReadingA = $aValue };
>
>
>
>
>
> end
>
>
>
>
>
> rule "update stats from objects B”
>
> lock-on-active
>
> when
>
>
>
> $stats : ObjectStats( $id : id)
>
> $b : ObjectTypeB(parentId == $id, $bValue : value) from entry-point
> “stream for objects of type b”
>
>
>
> then
>
>
>
> modify($stats) { lastReadingB= $bValue };
>
>
>
> end
>
>
>
>
>
> This is working fine and the lock-on-active seems to be preventing me from
> getting the “cross product” problem, but is each of these streams processed
> independantly on their own thread?
>
>
>
> Thanks,
>
>
>
> Chris
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
--
Edson Tirelli
JBoss Drools Core Development
JBoss by Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20090625/75dfc519/attachment.html
More information about the rules-users
mailing list