[rules-users] question about updating main memory

Jaroslaw Kijanowski kijanowski at gmail.com
Mon Jul 7 12:41:50 EDT 2008


What I'm missing is an import statement in your drl file (import 
tests.Test.ClassP;).
Everything else looks correct and should give the expected results 
(ResultSize = 5).

Cheers,
  Jarek

Senlin Liang wrote:
> Hi all,
> 
> I am trying to insert some object, querying them and the retract them.
> My question, when I query the inserted objects using defined "query",
> it return 0 objects. But when I iterate over all objects in WM, the
> objects are returned.
> 
> Any information is appreciated!
> 
> Files:
> ===================test.drl====================
> package tests;
> query "selectQuery"
>       p : ClassP()
> end
> ==================end of test.drl================
> 
> ==================Test.java====================
> package tests;
> 
> import java.io.*;
> import java.io.InputStreamReader;
> import org.drools.RuleBase;
> import org.drools.RuleBaseFactory;
> import org.drools.StatefulSession;
> import org.drools.compiler.PackageBuilder;
> import org.drools.QueryResult;
> import org.drools.QueryResults;
> import org.drools.FactHandle;
> import java.util.Iterator;
> 
> public class Test {
>     public static void main (String args[]) {
> 	try {
> 	    Reader source = new
> InputStreamReader(Test.class.getResourceAsStream("../test.drl"));
> 	    final PackageBuilder builder = new PackageBuilder();
> 	    builder.addPackageFromDrl(source);
> 	    if (builder.hasErrors()) {
> 		System.out.println(builder.getErrors().toString());
> 		System.exit(0);
> 	    }
> 	    final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> 	    ruleBase.addPackage(builder.getPackage());
> 	    final StatefulSession session = ruleBase.newStatefulSession();
> 
>             System.out.println("Inserting objects ...");
> 	    for (int i = 0; i < 5; i ++) {
> 		session.insert(new ClassP(1, i));
> 	    }
> 	
>             System.out.println("Querying objects ...");
> 	    QueryResults results = session.getQueryResults("selectQuery");
> 	    System.out.println("ResultSize = " + results.size());
>             /***************************************************************************************
>              Here, it reports results.size() is 0, and there should be
> 5 objects in WM right now. It is
>              the place I got the question.
> 
>              I have no idea whether I am using the "query" correctly.
> Anything wrong?
>             ***************************************************************************************/
> 	    for (Iterator it = results.iterator(); it.hasNext(); ) {
> 		final QueryResult result = (QueryResult) it.next();
> 		ClassP p = (ClassP) result.get("p");
> 		System.out.println("p(" + p.getFirst() + ", " + p.getSecond()+")");
> 	    }
> 
> 	    System.out.println("Deleting ...");
> 	    for (Iterator it = session.iterateFactHandles(); it.hasNext(); ) {
> 		FactHandle factHandle = (FactHandle) it.next();
> 		ClassP p = (ClassP) session.getObject(factHandle);
> 		System.out.println("p(" + p.getFirst() + ", " + p.getSecond()+")");
> 		session.retract(factHandle);
> 	    }
>             /***************************************************************************************
>              Here, it prints out: it is deleting p(1, 1), ... p(1, 5).
>              It verifies that there are the 5 objects inserted.
>             ***************************************************************************************/
> 
> 	    session.dispose();
> 	} catch (Exception e) {
> 	    System.out.println(e);
> 	    System.exit(0);
> 	}
>     }
> 
>     public static class ClassP {
> 	private int first;
> 	private int second;
> 	public ClassP() {}
> 	public ClassP(int firstIn, int secondIn) {
> 	    this.first  = firstIn;
> 	    this.second = secondIn;
> 	}
> 	public int getFirst() {
> 	    return this.first;
> 	}
> 	public int getSecond() {
> 	    return this.second;
> 	}
>     }
> }
> ========================end of Test.java=====================
> 
> Thanks a lot,
> 




More information about the rules-users mailing list