Hi Juan Carlos,
Sorry for the late reply.
Would you mind sending me the Sample.drl en .bpmn files as well?
I happen to have a bit of code that I can use to look into this.
Thanks,
Marco
10/06/2011 01:28 PM, juancarlos.fernandezj:
> Hello,
>
> I'm having trouble when trying to insert() facts inside parallel
> StatefulKnowledgeSessions. From a main() java program I start multiple
> threads. Every thread creates new KnowledgeBase and every KnowledgeBase
> creates new StatefulKnowledgeSession so I have one StatefulKnowledgeSession
> in every thread. Once StatefulKnowledgeSession has been created, I insert
> lots of facts in each StatefulKnowledgeSession.
>
> What was expected? I expected to run insert() in parallel, each insert
> inside its thread StatefulKnowledgeSession. 4 threads inserting lots of
> facts inside its own StatefulKnowledgeSession is expected to run in parallel
> and see how CPU usage increases.
>
> What have I seen? when all threads are inserting facts in its own
> StatefulKnowledgeSession I can see that only one CPU is being used so there
> is no parallel insertion in different StatefulKnowledgeSession.
>
> Is there a synchronization inside insert() code? It's so strange. Even if i
> try with 12 threads, I can't see a CPU usage increase when executing
> parallel insert() inside different StatefulKnowledgeSession (threads).
>
> Help please.
>
> This is my thread code (no static objects):
>
> public class KnowledgeSessionThread extends Thread {
>
> private StatefulKnowledgeSession session;
> private Message[] facts;
>
> public KnowledgeSessionThread(Message[] facts) throws Exception {
> session = readKnowledgeBase().newStatefulKnowledgeSession();
> this.facts = facts;
> }
>
> public void run() {
> try {
> for( int i = 0; i< facts.length; i++ ) {
> session.insert(facts[i]);
> }
> session.startProcess("flowId");
> session.fireAllRules();
> session.dispose();
> System.out.println("Thread finished");
> } catch( Exception e ) {
> e.printStackTrace();
> }
> }
>
> private KnowledgeBase readKnowledgeBase() throws Exception {
> KnowledgeBuilder kbuilder =
> KnowledgeBuilderFactory.newKnowledgeBuilder();
> kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"),
> ResourceType.DRL);
> kbuilder.add(ResourceFactory.newClassPathResource("Sample.bpmn"),
> ResourceType.BPMN2);
> KnowledgeBuilderErrors errors = kbuilder.getErrors();
> if (errors.size()> 0) {
> for (KnowledgeBuilderError error: errors) {
> System.err.println(error);
> }
> throw new IllegalArgumentException("Could not parse
> knowledge.");
> }
> KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
> kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
> return kbase;
> }
> }
>
> --
> View this message in
> context:http://drools.46999.n3.nabble.com/ksession-insert-executes-sequentially-in-multithreaded-StatefulKnowledgeSessions-tp3399339p3399339.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
--
jBPM/Drools developer
Utrecht, the Netherlands
___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users