Maxim,

   I'm not sure about what specific case you are talking too, but Drools 4 is supposed to be faster than Drools 3, specially if you follow the best practices and disable shadow facts.

   []s
   Edson

2008/8/21 Maxim Veksler <maxim.veksler@gmail.com>
Hello Edson,

Thank you for your reply. We are considering moving on to Drool4, the main question actually is performance. Is Drools4 can provide better performance regarding speed of conclusion.

I'm considering suggesting a move to v4 but haven't so because I've read some reports on this list about Drools 4 slowness. Could you suggest please your opinion on the subject?


Thank you very much,
Maxim.


On Thu, Aug 21, 2008 at 4:57 PM, Edson Tirelli <tirelli@post.com> wrote:

   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@gmail.com>


On Wed, Aug 20, 2008 at 8:57 PM, Edson Tirelli <tirelli@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@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

_______________________________________________
rules-users mailing list
rules-users@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@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@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@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