Hi,
To show my problem, I'll give a simple example for illustration
purposes:
Let say, I have an Object
myObject{
private int id;
myObject(int i) {id=i;}
public int getId(){return id;}
}
And I have a rule file containing one rule:
<?xml version="1.0"?>
<rule-set name="myObject Example"
xmlns="http://drools.org/rules"
xmlns:java="http://drools.org/semantics/java"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://drools.org/rules rules.xsd
http://drools.org/semantics/java java.xsd">
<import>myproject.myObject</import>
<rule name="Rule">
<parameter identifier="a">
<class>myproject.myObject</class>
</parameter>
<parameter identifier="b">
<class>myproject.myObject</class>
</parameter>
<java:condition>a.getId()!=b.getId()</java:condition>
<java:consequence>
System.out.println("myObject "+a.getId()+" is different from
myObject"+b.getId());
</java:consequence>
</rule>
</rule-set>
Case 1:
=======
O1 = new myObject(1);
O2 = new myObject(2);
workingMemory.assert(O1);
workingMemory.assert(O2);
workingMemory.fireAllRules();
In this case "Rule" get fired and I get the results:
myObject 1 is different from myObject 2
myObject 2 is different from myObject 1.
Case 2:
=======
Vector data = new Vector();
data.addElement(new myObject(1));
data.addElement(new myObject(2));
for(int i=0;i<data.size();i++)
workingMemory.assertObject(data.elementAt(i));
And I tried with casting too:
for(int i=0;i<data.size();i++)
workingMemory.assertObject((myObject)data.elementAt(i));
In this case "Rule" doesn't get fired and surely nothing happens. When I
check the Objects
In the working memory by doing this:
List objects = workingMemory.getObjects();
System.out.println("List of Objects in the Memory:");
for(int i=0;i<objects.size();i++)
{
System.out.println("myObject:
"+((myObject)objects.get(i)).getId());
}
I get:
myObject 1
myObject 2
Which means the objects are in fact in the working memory but why they
didn't trigger the rule to
be fired ????
Thanks in advance for your help
Maher Rahmouni