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-e...
Sent from the Drools: User forum mailing list archive at
Nabble.com.