You are using variables (like $nissan) before binding them. Remember you can only use a variable "after" binding it.

   []s
   Edson

2008/8/20 Marcin Krol <mrkafk@gmail.com>
Hello everyone,

I managed to produce my first example of Drools rules. However, I am having problems with some field restrictions:

Racing order:Unable to create restriction '[QualifiedIndentifierRestr: != $nissan.pos ]' for field 'pos' in the rule 'Racing order'

The problem is only SOME field restrictions produce this error. Other field restrictions don't!

If anybody has a hint or knows why this is not working, please let me know, I would greatly appreciate it.



The rules are:


#created on: 2008-08-20
package com.sample

#list any import classes here.

#declare any global variables here

dialect "mvel"

import com.sample.Car;

rule "Racing order"
   when

       // Porsche was not red
       $porsche : Car( manufacturer == "Porsche",
               pos != $nissan.pos,
               pos != $subaru.pos,
               color != "red"
               //color != "blue",
               //color != $nissan.color,
               //color != $subaru.color
               )


               // First car was Nissan
       $nissan : Car( manufacturer == "Nissan",
        pos == 1,
        color != $subaru.color,
        color != $porsche.color )

       // Subaru was blue
       $subaru : Car( manufacturer == "Subaru",
               //pos == 2,
               pos != $nissan.pos,
               pos != $porsche.pos,
               color == "blue" )

               // 2nd car was silver
       Car( pos == 2,
                     color == "silver",
                     this in ( $nissan, $subaru, $porsche ) )

       then
       System.out.println( "Nissan " + $nissan.getPos() + " " + $nissan.getColor() );
       System.out.println( "Subaru " + $subaru.getPos() + " " + $subaru.getColor() );
       System.out.println( "Porsche " + $porsche.getPos() + " " + $porsche.getColor() );

end

       



The Car.java file:


package com.sample;

   public class Car {
       private String manufacturer;
       private String color;
       private int pos;
       
       public Car() {
               
       }
       
       public Car(String manufacturer, String color, int pos) {
               super();
               this.color = color;
               this.pos = pos;
               this.manufacturer = manufacturer;
       }
       
       public String getManufacturer() {
               return this.manufacturer;
       }
       
       public float getPos() {
               return this.pos;
       }
       
       public String getColor() {
               return this.color;
       }
   }




The CarExample.java file, which is the main app:



package com.sample;

import java.io.InputStreamReader;

import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
import com.sample.Car;

public class CarExample {

   public static void main(String[] args) throws Exception {

       final PackageBuilder builder = new PackageBuilder();
       builder.addPackageFromDrl( new InputStreamReader( CarExample.class.getResourceAsStream( "CarExample.drl" ) ) );

       final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
       ruleBase.addPackage( builder.getPackage() );

       final StatefulSession session = ruleBase.newStatefulSession();

       String[] names = new String[] { "Nissan", "Subaru", "Porsche"};
       String[] colors = new String[] { "red", "blue", "silver"};
       int[] positions = new int[] { 1, 2, 3 };

       for ( int n = 0; n < names.length; n++ ) {
           for ( int c = 0; c < colors.length; c++ ) {
               for ( int p = 0; p < positions.length; p++ ) {
                   session.insert( new Car( names[n], colors[c], positions[p]) );
               }
           }
       }

       session.fireAllRules();
       session.dispose();
   }



}

_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users



--
Edson Tirelli
JBoss Drools Core Development
JBoss, a division of Red Hat @ www.jboss.com