[rules-users] Design guidelines regarding session pools
Mark Proctor
mproctor at codehaus.org
Tue Nov 20 15:48:07 EST 2007
Mikael Larsson wrote:
> Hi!
>
> I have some questions about multithreaded apps and if it is necessary
> to pool session objects for performance.
You don't need to pool session in drools, just cache the rulebase in a
singleton.
>
> * I understand that it is expensive to create the RuleBase objects but
> what about the sessions?
> If I create a new stateful session object for each request will that
> become a potential bottleneck?
sessions are lightweight, do not pool.
>
> * Is the session class thread safe, what will happen if two or more
> threads simultaneously call fireAllRules on one and the same session
> object?
sessions are thread safe, apart from the iterators.
>
> One advantage of pooling session is if you have some data that does
> not change per request. Say that I have some data associated with a
> specific type of request that should be inserted for all requests of
> that particular type and evaluated towards request specific stuff,
> e.g. params in the request. E.g. An object that specifies allowed
> values for a particular API will be the same for all requests (well at
> least until you reconfigure the allowed values...) and the rules would
> evaluate the request specific value based on the "allowed values"
> object. In this case only the request specific parameter/value needs
> to be inserted/retracted per request.
>
> * I would rather use StatefulSession instead of stateless since I find
> the API more flexible, are there any performance considerations I
> should be aware of? If pooling is necessary I guess I must use the
> stateful session. But if creating one session per request, are there
> any concrete reasons for using the stateless session (besides the
> simpler API and that I need to call dispose on the stateful session)?
stateless just wraps stateful anyway, stateless is really just a
convienience api - how stateless sessions do allow for "sequential rete"
which is a performance improvement if you don't need information (fact
modications leading to rule re-evaluation) but you have to go to large
number of rules and objects to see a big difference with sequential rete.
>
> Kind of hoping that the answer will be: "No, pooling will not be
> necessary.", but any feedback about situations where it may be
> necessary for best performance would be much appreciated.
No, pooling will not be neceesary.
>
> Regards,
> /Mikael
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
More information about the rules-users
mailing list