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

Wolfgang Laun wolfgang.laun at gmail.com
Tue Oct 11 06:19:16 EDT 2011


Why should newStatefulKnowledgeSession, which merely *creates* a
StatefulKnowledgeSession object from a KnowledgeBase, be able to run in
parallel with calls to the same method? It's a lightweight operation, not
taking long, and the KnowledgeBase must be protected for a short time to
avoid confusion in its internal data structures.

-W


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

> Hi all,
>
> Try to execute many threads with the next source code (simple simple code).
> You will see that only one CPU-thread is used in a mutithreaded CPU system.
> It seems to be a system lock inside newStatefulKnowledgeSession().
>
> This is a big disappoint because we can't use StatefulKnowledgeSession in
> multithreaded environment. All is executing sequentially because of this
> problem. Yes, we can asure newStatefulKnowledgeSession() is multithread (no
> error is returned) but we can't asure newStatefulKnowledgeSession()
> executes
> in parallel.
>
> Do you know any problem about this?
>
> Thank's in advance
>
> PROBLEMATIC SOURCE CODE:
>
> public class KnowledgeSessionThread extends Thread {
>        private static final int ITERATIONS = 1000000;
>        private KnowledgeBase kbase;
>
>    public KnowledgeSessionThread() throws Exception {
>                kbase = readKnowledgeBase();
>    }
>
>    public void run() {
>                try {
>                        for( int i = 0; i < ITERATIONS; i++ ) {
>                                StatefulKnowledgeSession session =
> kbase.newStatefulKnowledgeSession();
>                                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/StatefulKnowledgeSession-construction-executes-sequentially-no-multithread-tp3412107p3412107.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/09913b5d/attachment.html 


More information about the rules-users mailing list