[rules-users] StatefulKnowledgeSession construction executes sequentially (no multithread)

Wolfgang Laun wolfgang.laun at gmail.com
Tue Oct 11 08:35:45 EDT 2011


Its just a hunch, but try your original code (not the pooling one) but pass
the newStatefulKnowledgeSession to the constructor of the Thread sublass.
-W


2011/10/11 Juan Carlos Fernández <juancarlos.fernandez at safelayer.com>

> Here you have my pooling solution. Testing this source code reaches 100%
> CPU
> usage!! Used apache commons pooling. borrowObject() creates stateful
> session
> and pool it. returnObject() retracts all facts.
>
> Can we extract a conclusion with my tests? I'm going to implement pooling
> solution inside my SOAP app and do performance tests (throughput).
>
> public class KnowledgeSessionThread extends Thread {
>
>         int iterations = 500;
>        int numberFacts = 1000;
>        private ObjectPool pool;
>
>    public KnowledgeSessionThread(ObjectPool pool) throws Exception {
>        this.pool = pool;
>     }
>
>    public void run() {
>        try {
>                for( int i = 0; i < iterations; i++ ) {
>                        StatefulKnowledgeSession session =
> (StatefulKnowledgeSession)pool.borrowObject();
>                                 for( int j = 0; j < numberFacts; j++ ) {
>                                        Message msg = new Message();
>                                        msg.setMessage("Hello world");
>                                        msg.setStatus(Message.HELLO);
>                                        session.insert(msg);
>                                }
>                                session.fireAllRules();
>                                 pool.returnObject(session);
>                         }
>                    System.out.println("Thread finished " +
> this.currentThread().getName());
>        } catch( Exception e ) {
>                e.printStackTrace();
>        }
>    }
> }
>
>         @Override
>        public Object makeObject() throws Exception {
>                System.out.println(Thread.currentThread().getName() + " -
> makeObject()
> called" );
>                return kbase.newStatefulKnowledgeSession();
>        }
>
>        @Override
>        public void destroyObject( Object obj ) {
>                StatefulKnowledgeSession session =
> (StatefulKnowledgeSession)obj;
>                session.dispose();
>
>        }
>
>        @Override
>        public void passivateObject(Object obj) {
>                StatefulKnowledgeSession session =
> (StatefulKnowledgeSession)obj;
>                for( FactHandle handle : session.getFactHandles() ) {
>                        session.retract(handle);
>                }
>        }
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/StatefulKnowledgeSession-construction-executes-sequentially-no-multithread-tp3412107p3412338.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
> _______________________________________________
> 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/20111011/9a69303d/attachment.html 


More information about the rules-users mailing list