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 <rafae...@gmail.com> wrote: > From: Rafael Ribeiro <rafae...@gmail.com> > Subject: Re: [rules-users] StatefulKnowledgeSession leaves threads running > To: "Rules Users List" <rules-users@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 <tire...@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 <rafae...@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@lists.jboss.org > > http://lists.jboss.org/mailman/listinfo/rules-users > > > > > > -----Inline Attachment Follows----- > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > http://lists.jboss.org/mailman/listinfo/rules-users > _______________________________________________ rules-users mailing list rules-users@lists.jboss.org http://lists.jboss.org/mailman/listinfo/rules-users