[rules-users] Firiing explicit rules

Chris Richmond crichmond at referentia.com
Thu Jun 25 15:04:33 EDT 2009


*Excellent* description of the system operation and overall and answer to my
question.   Thank you very much!

 

Chris

 

  _____  

From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Edson Tirelli
Sent: Thursday, June 25, 2009 2:28 AM
To: Rules Users List
Subject: Re: [rules-users] Firiing explicit rules

 


   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/0a4b0b34/attachment.html 


More information about the rules-users mailing list