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@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users