[rules-users] Pooling stateful sessions to have threaded executions of a ruleset

Maxime Falaize maxime.falaize at gmail.com
Mon Apr 14 04:08:58 EDT 2014


I'm disposing after use because if i'm not the working memory is not empty
between 2 calls right ? And I am saying that I'm using them as a pool
because I have 5 sessions that could be used at the same time, which is
impossible if I declare only one.

If you have recommandation for my use case, please tell me as I found
nothing in the doc about this.


2014-04-13 22:42 GMT+02:00 Mark Proctor <mproctor at codehaus.org>:

> as it says in the docs. we've designed things to put in foundations for
> future multi-threaded exploitation, but there is nothing there now.
>
> The  example code doesn't make too much sense to me. As you are saying you
> are using them as a pool, but you are disposing after use.
>
> Mark
>
> On 11 Apr 2014, at 08:48, Mercier Jonathan <jmercier at genoscope.cns.fr>
> wrote:
>
>  Le 09/04/2014 11:20, Maxime Falaize a écrit :
>
> I confirm that the multithreaded rules evaluation is not currently
> supported. See
> https://github.com/droolsjbpm/drools/blob/master/drools-core/src/main/java/org/drools/core/RuleBaseConfiguration.java#L683
>
>
> 2014-04-07 12:27 GMT+02:00 Maxime Falaize <maxime.falaize at gmail.com>:
>
>> I'm sorry but I don't understand what you are talking about. In this
>> article, there is nothing about multithreaded rules evaluation. It just
>> says that the Phreak algorithm is designed for thread safety and *future*multicore processors exploitation. It doesn't mean that it is already
>> multithreaded. Moreover I tested my appliciation with and without
>> multithreaded sessions (I am using Drools 6.0.1.Final) and I noted a faster
>> execution in the multithreaded one.
>>
>>
>> 2014-04-04 13:53 GMT+02:00 jmercier <jmercier at genoscope.cns.fr>:
>>
>>  Le 04/03/2014 09:55, Maxime Falaize a écrit :
>>>  > Hello,
>>> >
>>> > I want to ask you if it is a good practive to pool stateful sessions
>>> > for a specific ruleset to improve the execution performance.
>>> > Actually in my application I execute my rules by calling SOAP
>>> > webservice. For performance purpose, I test multithreaded calls to my
>>> > webservice and I noted that when I pool sessions in the server side,
>>> > it improves the performance a lot.
>>> >
>>> > To pool sessions, I just declare multiple ksession tag in my
>>> > kmodule.xml :
>>> >
>>> > <kbase name="KBase" packages="com.example.*">
>>> >         <ksession name="KSession1"/>
>>> >          <ksession name="KSession2"/>
>>> >         <ksession name="KSession3"/>
>>> >         <ksession name="KSession4"/>
>>> >         <ksession name="KSession5"/>
>>> >  </kbase>
>>> >
>>> > In my spring webservice endpoint I just put that code to handle the
>>> > pool :
>>> >
>>> > @Endpoint
>>> > public class ExampleEndpoint implements InitializingBean {
>>> >
>>> >     @Autowired
>>> >     private ExampleRuleService ruleService;
>>> >      private Map<Integer, Boolean> isRunningMap = new
>>> > HashMap<Integer, Boolean>();
>>> >     private static final int NB_POOL_SESSIONS = 5;
>>> >
>>> >     @PayloadRoot(localPart = "com.example.ExampleRequest")
>>> >      @ResponsePayload
>>> >     public ExampleResponse handleRequest(
>>> >             @RequestPayload ExampleRequest request) throws
>>> > InterruptedException {
>>> >         KieServices ks = KieServices.Factory.get();
>>> >         KieContainer kc = ks.getKieClasspathContainer();
>>> >          while (true) {
>>> >             for (int i = 0; i < NB_POOL_SESSIONS; i++) {
>>> >                 boolean run = false;
>>> >
>>> >                 synchronized (isRunningMap) {
>>> >                     if (!isRunningMap.get(i)) {
>>> >                          isRunningMap.put(i, true);
>>> >                         run = true;
>>> >                     }
>>> >                 }
>>> >
>>> >                 if (run) {
>>> >                     KieSession ksession = kc.newKieSession("KSession"
>>> > + (i + 1));
>>> >                      ExampleResponse response =
>>> > ruleService.run(ksession, request);
>>> >                     ksession.dispose();
>>> >
>>> >                     isRunningMap.put(i, false);
>>> >                     return response;
>>> >                  }
>>> >             }
>>> >             Thread.sleep(100);
>>> >         }
>>> >     }
>>> >
>>> >     public void afterPropertiesSet() throws Exception {
>>> >         for (int i = 1; i <= NB_POOL_SESSIONS; i++) {
>>> >             isRunningMap.put((i - 1), false);
>>> >          }
>>> >     }
>>> >
>>> > }
>>> >
>>> > It works well because in my benchmark I improve 5 times the
>>> > performance (as I have 5 different threads) but I wondered if it is a
>>> > good practice and if it does not hide any issues that I could have in
>>> > the future.
>>> >
>>> > Thanks for your help.
>>> >
>>> > --
>>> > Maxime FALAIZE
>>>  > _______________________________________________
>>> > rules-users mailing list
>>> > rules-users at lists.jboss.org
>>> > https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>> Hi maxime,
>>>
>>> I do not remember if use drools 6 or drools 5. If you using drools 6.
>>> Phreaks algorithm use multi threading according to use 'from
>>> accummulate' far i understand here:
>>>
>>> http://planet.jboss.org/post/drools_6_performance_with_the_phreak_algorithm
>>>
>>> Instead to put a thread by ksession here rules evaluation are
>>> multi-threaded.
>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>>
>>
>>  --
>> Maxime FALAIZE
>>
>
>
>
> --
> Maxime FALAIZE
>
>
> _______________________________________________
> rules-users mailing listrules-users at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>
>
> Ah yes. Maybe Mark Proktor could tell  some information about this
>  _______________________________________________
> 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
>



-- 
Maxime FALAIZE
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20140414/918a33c5/attachment.html 


More information about the rules-users mailing list