I have seen similar behavior, though at the time I didn't have the opportunity to
investigate the cause. (Sorry about not reporting it at the time.) Unlike the code below
it was while calling session.fireUntilHalt(). (In a seperate thread.) After calling
session.halt() from another thread the fireUntilHalt() would exit, but the VM would not
exit due to a non-daemon thread persisting.
--- On Thu, 7/16/09, Rafael Ribeiro <rafaelri(a)gmail.com> wrote:
From: Rafael Ribeiro <rafaelri(a)gmail.com>
Subject: Re: [rules-users] StatefulKnowledgeSession leaves threads running
To: "Rules Users List" <rules-users(a)lists.jboss.org>
Date: Thursday, July 16, 2009, 12:10 PM
Hi Edson!
as I've already mentioned I've modified the
sample so, if you get the StockTick sample and replace the
Main class this will run fine.
The sample shuts down fine but as I saw it sets the
JFrame uses frame.setDefaultCloseOperation(
WindowConstants.EXIT_ON_CLOSE ); which in turn makes the
trick.
Below the code of my modified main class:
package org.drools.examples.broker;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseConfiguration;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.conf.EventProcessingOption;
import org.drools.examples.broker.model.Company;
import org.drools.examples.broker.model.CompanyRegistry;
import org.drools.examples.broker.model.StockTick;
import org.drools.io.ResourceFactory;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.rule.WorkingMemoryEntryPoint;
public class Main {
private static final String RULES_FILE =
"/broker.drl";
static StatefulKnowledgeSession session;
static WorkingMemoryEntryPoint tickStream;
/**
* @param args
*/
public static void main(String[] args) throws
Exception {
// set up and show main window
CompanyRegistry companies = new
CompanyRegistry();
KnowledgeBuilder builder =
KnowledgeBuilderFactory.newKnowledgeBuilder();
try {
builder.add(
ResourceFactory.newInputStreamResource(
Main.class.getResourceAsStream( RULES_FILE ) ),
ResourceType.DRL);
} catch ( Exception e ) {
e.printStackTrace();
}
if( builder.hasErrors() ) {
System.err.println(builder.getErrors());
System.exit( 0 );
}
KnowledgeBaseConfiguration conf =
KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
conf.setOption( EventProcessingOption.STREAM
);
KnowledgeBase kbase =
KnowledgeBaseFactory.newKnowledgeBase( conf );
kbase.addKnowledgePackages(
builder.getKnowledgePackages() );
session =
kbase.newStatefulKnowledgeSession();
session.setGlobal( "services", new
BrokerServices() {
public void log(String message) {
System.out.println(message);
}
});
for( Company company :
companies.getCompanies() ) {
session.insert( company );
}
session.fireAllRules();
tickStream =
session.getWorkingMemoryEntryPoint( "StockTick
stream" );
for (int i=10;i>0;i--) {
tickStream.insert(new
StockTick("RHT", i*10,
System.currentTimeMillis()));
session.getAgenda().getAgendaGroup(
"evaluation" ).setFocus();
session.fireAllRules();
}
session.dispose();
session.halt();
System.out.println("Still
running...");
}
}
regards,
Rafael Ribeiro
2009/7/16 Edson Tirelli <tirelli(a)post.com>
Hi Rafael,
Are you setting the MultithreadEvaluation option or is
this using default options? Do you have an example code that
shows this behavior?
Thanks,
Edson
2009/7/16 Rafael Ribeiro <rafaelri(a)gmail.com>
Hi all,
I've downloaded Drools fusion sample and started to
make some changes to
the code (first of all wipe out the UI so I can test it
easier).
I tried to get to a minimal set so I can run a console
main class and see
what happens but I am facing a strange behaviour.
As soon as I start pushing events into the
WorkingMemoryEntryPoint
("StockTick stream") a Thread - not daemonized
since it blocks shutdown from
ending - is spawned and this prevents my JVM from shutting
down (obviously
if I call System.exit(0) it will but I am avoiding this).
I've tried both to halt and dispose the session that
this entry point
belongs but with no success. Does anyone know how could I
get rid of this
thread?
best regards,
--
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
http://lists.jboss.org/mailman/listinfo/rules-users
-----Inline Attachment Follows-----
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
http://lists.jboss.org/mailman/listinfo/rules-users