[rules-users] question about updating main memory
Senlin Liang
senlin.liang at gmail.com
Mon Jul 7 09:31:04 EDT 2008
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,
--
Senlin Liang
More information about the rules-users
mailing list