KieBaseConfiguration kbconf = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
kbconf.setOption(EventProcessingOption.STREAM);
kbconf.setOption( RuleEngineOption.RETEOO );
KnowledgeBase kbase = loadKnowledgeBaseFromString( kbconf, str );
final StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
final EntryPoint ep = ksession.getEntryPoint( "X" );
List list = new ArrayList();
ksession.setGlobal( "list", list );
Executor executor = Executors.newCachedThreadPool(new ThreadFactory() {
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
}
});
final int RUN_TIME = 5000; // runs for 10 seconds
final int THREAD_NR = 2;
CompletionService<Boolean> ecs = new ExecutorCompletionService<Boolean>(executor);
ecs.submit(new Callable<Boolean>() {
public Boolean call() throws Exception {
try {
ksession.fireUntilHalt();
return true;
} catch (Exception e) {
errors.add( e );
e.printStackTrace();
return false;
}
}
});
for (int i = 0; i < THREAD_NR; i++) {
ecs.submit(new Callable<Boolean>() {
public Boolean call() throws Exception {
try {
final String s = Thread.currentThread().getName();
long endTS = System.currentTimeMillis() + RUN_TIME;
int j = 0;
while( System.currentTimeMillis() < endTS) {
ep.insert( new StockTick( j++, s, 0.0, 0 ) );
Thread.sleep(1);
}
return true;
} catch (Exception e) {
errors.add( e );