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
                        

Reply via email to