Sometimes this is indeed not clear, so I will try to explain here. Drools uses MVEL to resolve some expressions and semantic code. Although we would like to make it 100% compatible and enable it to use mvel everywhere, that is easier said than done (but we do have someone working on that).

   Anytime you want to force Drools to fallback into MVEL (or java, as the other supported dialect) you need to place your code inside an eval(). For some well known situations, Drools does this automatically, but that is not the case with empty.
 
   For now, in your case, you could either do:

MyGrabBag( someMap != null, someMap.empty == true )

   Or if you are using mvel as your rule dialect:

MyGrabBag( eval( someMap == empty ) )

   []s
   Edson


2009/8/18 Pegram, Macon <zmpegram@choosehmc.com>

According to MVEL they’ve added a convenience for checking the “emptiness” of a value (see: http://mvel.codehaus.org/Value+Tests )

 

In MVEL you’d simply write:  myMap == empty

 

This seemed like a MUCH cleaner way to write some of the LHS of the rules, so I thought I’d try it out. 

 

Given the following rule:

rule "Check Empties - Original"

    when        

        $grabBag : MyGrabBag(someMap != null)

        eval ($grabBag.getSomeMap().size() == 0)

    then

end

 

This could be rewritten:

 

rule "Check Empties - Simple"

    when        

        MyGrabBag(someMap == empty)

    then

end

 

The IDE (Eclipse 3.4.2 w/ Drools plugin) seems to recognize “empty”  is a keyword (it makes it bold), but the drools compiler in the IDE  reports:
BuildError: Unable to create restriction '[VariableRestriction: == empty ]' for field 'someMap' in the rule 'Check Empties - Simple'

BuildError: Unable to return Declaration for identifier 'empty'

 

Am I assuming incorrectly that the LHS is fully MVEL compliant?

 


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




--
 Edson Tirelli
 JBoss Drools Core Development
 JBoss by Red Hat @ www.jboss.com