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" <wolfgang.laun(a)gmail.com
<mailto:wolfgang.laun@gmail.com>> 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 <heijink(a)audible.com
> <mailto:heijink@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(a)lists.jboss.org <mailto:rules-users@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org <mailto:rules-users@lists.jboss.org>
>
https://lists.jboss.org/mailman/listinfo/rules-users
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users