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.fala...@gmail.com <mailto:maxime.fala...@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 <jmerc...@genoscope.cns.fr
    <mailto:jmerc...@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@lists.jboss.org <mailto:rules-users@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@lists.jboss.org <mailto:rules-users@lists.jboss.org>
        https://lists.jboss.org/mailman/listinfo/rules-users




-- Maxime FALAIZE




--
Maxime FALAIZE


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

Ah yes. Maybe Mark Proktor could tell  some information about this
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to