Aha! I missed the line about the dispose. That makes a lot of sense. What I don't understand is why the example 3.37 in the docs would work. If I understand what you're saying, it shouldn't.
Thanks! Hank Sent from my iPhone On Jul 30, 2011, at 8:27 AM, "Wolfgang Laun" <[email protected]<mailto:[email protected]>> wrote: StatelessKnowledgeSession.execute(...) executes the command(s) and finally calls dispose() on the session. Use a stateful session or a global (filled with a low-salience rule) or - simply use the getObjects command. -W On 29 July 2011 22:47, Heijink, Hank <<mailto:[email protected]>[email protected]<mailto:[email protected]>> wrote: Hi all, I'm new to Drools, so please excuse me if I'm asking about the obvious--it's certainly not obvious to me. The problem is this: I use a stateless knowledge session where a list of facts is inserted. The rules that fire create new facts, and after all the rules have fired, I'd like to obtain a list of all the facts (the old and the new). The best way seemed to use a query. I'm using Drools 5.1 on Linux. This is part of my .drl file (without the imports): rule "create badge" when Event ( eventType == EventType.SOME_EVENT_TYPE ) not BadgeState ( identifier == "badge" ) then insert( new BadgeState("badge") ); end query "all badges" aBadge : BadgeState() end This is the Java code: StatelessKnowledgeSession ksession = StatsKnowledgeBase.getKnowledgeBase().newStatelessKnowledgeSession(); // Create a list of share events ArrayList<Event> events = new ArrayList<Event>(); Date now = new Date(); MobileDevice aDevice = new MobileDevice("uniqueId", "deviceType"); for (int i = 0; i < 5; i++) { Event anEvent = new Event.Builder(now, aDevice, "aCustomer", EventType.SOME_EVENT_TYPE).build(); events.add(anEvent); } // Create the query for the badges List<Command> commands = new ArrayList<Command>(); commands.add(CommandFactory.newInsertElements(events)); commands.add(CommandFactory.newQuery("all badges", "all badges")); // Feed the events into Drools KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession); ExecutionResults results = ksession.execute( CommandFactory.newBatchExecution(commands) ); NativeQueryResults queryResults = (NativeQueryResults)results.getValue("all badges"); // At this point, queryResults is empty. logger.close(); // Get a list of badges List<BadgeState> badges = new ArrayList<BadgeState>(); for (Iterator<QueryResultsRow> i = queryResults.iterator(); i.hasNext(); ) { QueryResultsRow result = i.next(); BadgeState obj = (BadgeState)result.get("aBadge"); badges.add(obj); } The logger shows me that the BadgeState object is created, but the query returns an empty list. I've searched the documentation, which suggests that I'm doing it right (<http://drools.herod.net/drools-expert/html/ch03.html#d0e1956>http://drools.herod.net/drools-expert/html/ch03.html#d0e1956, example 3.37), the archives of this mailinglist, and the web, so far without success. Clearly, I'm missing something, and I have the nagging feeling that it's something simple... Any help is much appreciated! Best, Hank _______________________________________________ rules-users mailing list <mailto:[email protected]>[email protected]<mailto:[email protected]> <https://lists.jboss.org/mailman/listinfo/rules-users>https://lists.jboss.org/mailman/listinfo/rules-users _______________________________________________ rules-users mailing list [email protected]<mailto:[email protected]> https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
