[rules-users] Using the drools as the backend engine for a service

Anstis, Michael (M.) manstis1 at ford.com
Wed Feb 6 04:03:15 EST 2008


Nope, stateless can have multiple objects inserted prior to rule invocation
(look at the overloaded execute method).
 
Stateful are best suited when you need to insert different facts over the
course of a "rule session" and the state of previous facts may affect the
interpretation of new facts. Stateless cleans itself up after execution. I
assume you're exposing the rules as a web-service over HTTP in which case
each HTTP request will represent a stateless invocation of the rules and
hence stateless would IMO be preferable. This leads to better scalability
(as you don't need to store session information in [web-server] memory) and
is more resilient (as you don't need to concern yourself with HTTP sessions
being timed out on the server and you trying to recover).
 
With kind regards,
 
Mike


  _____  

From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Jai Vasanth
Sent: 05 February 2008 19:27
To: Rules Users List
Subject: Re: [rules-users] Using the drools as the backend engine for a
service


I see. Yes , I must have confused myself with sequential stateless and
stateless. So from what I can infer, the main advantage of statefull session
over a stateless is that we can insert multiple objects into the  working
memory before calling fireAllRules() as opposed to the stateless where we
need to fire rules based on just 1  fact object? What are the other
differences that I need to know if I have to evaluate using stateless
sessions.

Thanks

Jai 


On Feb 5, 2008 1:57 AM, Anstis, Michael (M.) <manstis1 at ford.com> wrote:


Obviously you know your requirments better than I, but the following
stateless example accommodates dynamic insertion of facts:-
 
DRL
 
package com.test
 
import com.test.Fact1;
import com.test.Fact2;
 
rule "Fact1"
 when
  Fact1()
 then
  System.out.println("Fact1");
  insert(new Fact2());
end
 
rule "Fact2"
 when
  Fact2( )
 then
  System.out.println("Fact2"); 
end
 
Java
 
StatelessSession session = ruleBase.newStatelessSession();
session.execute(new Fact1());
 
Console


Fact1
Fact2
 
Are you getting (general) stateless sessions confused with sequential
stateless sessions?
 
With kind regards,
 
Mike 

 
  _____  


From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Jai Vasanth

Sent: 04 February 2008 21:02 

To: Rules Users List
Subject: Re: [rules-users] Using the drools as the backend engine for a
service


As part of the rules evaluation, more objects are inserted into the working
memory. Even though I just insert 1 object after creating a session, rule
outcomes inside lead to more objects to  be inserted. 
Correct me if I am wrong, but I was under the impression that a stateless
wouldnt be able to automatically fire rules when we objects are inserted
dynamically

Thanks

Jai


On Feb 4, 2008 1:05 AM, Anstis, Michael (M.) <manstis1 at ford.com> wrote:


IMHO, you might achieve better scalability and resilience if you can make
the working memory stateless.
 
I assume your "service" to be a web-service over stateless-HTTP and not a
service exposed over a stateful protocol.
 
Cheers,
 
Mike


  _____  


From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Jai Vasanth

Sent: 01 February 2008 22:05
To: Rules Users List
Subject: Re: [rules-users] Using the drools as the backend engine for a
service


I must have not been clear, yes I was planning on instantiating the rulebase
when the service starts and instantiating a new session for every request.



ONCE:
 
 RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );

PER REQUEST:
Stateful session = ruleBase.newStatefulSession();  (Is this what you were
referring to as working memory ? )


I hope that looks ok.

Thanks

Jai 

On Feb 1, 2008 1:37 PM, Michael Rhoden <mrhoden at franklinamerican.com> wrote:


You would likely NOT want to create a rulebase per session. Most people
create working memory per session. Rulebases should only be loaded once per
server (context) in my opinion, and you reload it as rules changes. Loading
a rulebase loads rules from a file, and orders your rete tree. For our
installation that takes several minutes.

 

Rulebase = once

Working memory = per user/transaction

 

-Michael

 


  _____  


From: rules-users-bounces at lists.jboss.org
[mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Jai Vasanth
Sent: Friday, February 01, 2008 3:23 PM
To: Rules Users List
Subject: [rules-users] Using the drools as the backend engine for a service

 

Hi,

 I am planning on using Drools as the rules engine for a service that I am
building. I am considering instantiating a stateful session for every
request to the service. The RuleBase would be created when the service
starts. Is this the correct way to  go about incorporating Drools in a
service ? Is session creation an expensive process and if so are there other
efficient ways of doing so ?



Thanks 

Jai 


_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users





_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users





_______________________________________________
rules-users mailing list
rules-users at lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users




-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080206/a267fc38/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4159 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-users/attachments/20080206/a267fc38/attachment.bin 


More information about the rules-users mailing list