[rules-users] Query in stateless knowledge session returns no results

Wolfgang Laun wolfgang.laun at gmail.com
Sat Jul 30 08:26:30 EDT 2011


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 <heijink at audible.com> 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, 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
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110730/0bef13f5/attachment.html 


More information about the rules-users mailing list