[rules-users] Design guidelines regarding session pools
Mikael Larsson
mikael.larsson at redpill.se
Wed Nov 21 02:10:02 EST 2007
Hi!
Just the answer I was hoping for, thanks for the fast reply!
/Mikael
Mark Proctor wrote:
> 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
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
--
______________________________________________
Mikael Larsson
Redpill AB
Tel. + 46 54 15 09 40
Mob. + 46 73 42 41 483
www.redpill.se
______________________________________________
More information about the rules-users
mailing list