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

Edson Tirelli tirelli at post.com
Thu Aug 21 09:57:54 EDT 2008


   Yes, it is a new feature on Drools 4. Please note that Drools 4 has a
huge amount of improvements in comparison to Drools 3, and we strongly
advise the upgrade.
   If you really want to stay on Drools 3, you should contact Red Hat for
support. Not sure it is possible, but you may try.

   []s
   Edson

2008/8/21 Maxim Veksler <maxim.veksler at gmail.com>

>
> On Wed, Aug 20, 2008 at 8:57 PM, Edson Tirelli <tirelli at post.com> wrote:
>
>>
>>    You are using variables (like $nissan) before binding them. Remember
>> you can only use a variable "after" binding it.
>>
>>    []s
>>    Edson
>>
>
> Please allow me to a related question, regarding drools 3.0.x
>
> In this LHS example, mentioned in this thread :
>
> """
>        $fred : Golfer( name == "Fred")
>        $bob : Golfer( name == "Bob",
>                position != $fred.position,
>                color == "plaid",
>                color != $fred.color)
> """
>
> $fred is a bind variable, but how is it possible to use a data member from
> this variable inside another node's ruling ?
>
> Judging from Drools 3, this should have failed with compilation errors,
> assuming that it's a new feature of Drools 4, is there a possibility to
> implement this behavior in drools3? as it would be great help for me in my
> rules.
>
> // Just for reference, the way I would implement the above logic in Drools
> 3 is :
>
> """
>        $fred : Golfer( name == "Fred", $fredPosition : position, $fredColor
> : color)
>        $bob : Golfer( name == "Bob",
>                position != $fredPosition,
>                color == "plaid",
>                color != $fredColor)
> """
>
>
> Thank you,
> Maxim.
>
>>
>>
>> 2008/8/20 Marcin Krol <mrkafk at 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 at 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
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
> Cheers,
> Maxim Veksler
>
> "Free as in Freedom" - Do u GNU ?
>
> _______________________________________________
> rules-users mailing list
> rules-users at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080821/cd10cfe6/attachment.html 


More information about the rules-users mailing list