On 31/07/2011 17:25, Heijink, Hank wrote:
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.
It should work, as long as the query is executed as part of the same execute batch. We have unit tests f or that too somewhere.

mark

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 <[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,
    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
    [email protected] <mailto:[email protected]>
    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

_______________________________________________
rules-users mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to