[rules-users] Unsatisfied rule fires - Drools bug?
Wolfgang Laun
wolfgang.laun at gmail.com
Tue Sep 27 05:10:11 EDT 2011
Please use the new "knowledge" API for compiling and building a knowledge
(not: rule) base.
This bug has been fixed for 5.3.0. It is one of several that may occur when
you use 5.2.0 and deviate from the constraint syntax as defined with 5.1.1.
-W
On 26 September 2011 22:51, matvey1414 <matvey1414 at gmail.com> wrote:
> Hi,
>
> I am working with Drools to implement a high-profile rules-engine. I have
> two rules defined. Clearly, only the first should fire, but both do. Here
> is
> my DRL:
>
>
> package com.sample
>
> import com.sample.DroolsTest.Request;
>
> rule "ExpensiveCanonShopper0"
> when
> Request( attributeMap["camera0"] == "canon" &&
> attributeMap["price0"] >= 500 )
> then
> System.out.println("ExpensiveCanonShopper0");
> end
>
> rule "ExpensiveCanonShopper1"
> when
> Request( attributeMap["camera1"] == "canon" &&
> attributeMap["price1"] >= 500 )
> then
> System.out.println("ExpensiveCanonShopper1");
> end
>
> And the Java class to execute it:
>
> public class DroolsTest {
>
> @SuppressWarnings({ "rawtypes", "unchecked" })
> public static final void main(String[] args) {
> try {
> //Loading the Rules
> System.out.println("Loading rules");
> RuleBase ruleBase = readRule();
> StatelessSession workingMemory =
> ruleBase.newStatelessSession();
>
> System.out.println("Firing rules");
>
> Map map = new HashMap();
> map.put("camera0", "canon");
> map.put("price0", 600);
>
> Request request = new Request();
> request.setAttributeMap(map);
> workingMemory.execute(request);
>
> } catch (Throwable t) {
> t.printStackTrace();
> }
> }
>
> /**
> * Please note that this is the “low level” rule assembly API.
> */
> private static RuleBase readRule() throws Exception {
> //read in the source
> Reader source = new FileReader(new File("drl",
> "Generated.drl"));
>
> //optionally read in the DSL (if you are using it).
> //Reader dsl = new InputStreamReader(
> DroolsTest.class.getResourceAsStream( “/mylang.dsl” ) );
>
> //Use package builder to build up a rule package.
> //An alternative lower level class called “DrlParser” can
> also be used…
>
> PackageBuilder builder = new PackageBuilder();
>
> //this wil parse and compile in one step
> //NOTE: There are 2 methods here, the one argument one is
> for normal DRL.
> builder.addPackageFromDrl( source );
> if (builder.hasErrors()) {
> PackageBuilderErrors errors = builder.getErrors();
> throw new RuntimeException("Error adding package to
> builder: " + errors.toString());
> }
>
> //Use the following instead of above if you are using a DSL:
> //builder.addPackageFromDrl( source, dsl );
>
> //get the compiled package (which is serializable)
> Package pkg = builder.getPackage();
>
> //add the package to a rulebase (deploy the rule package).
> RuleBase ruleBase = RuleBaseFactory.newRuleBase();
> ruleBase.addPackage( pkg );
> return ruleBase;
> }
>
> public static class Request {
> private Map attributeMap;
>
> public Map getAttributeMap() {
> return attributeMap;
> }
>
> public void setAttributeMap(Map attributeMap) {
> this.attributeMap = attributeMap;
> }
> }
> }
>
> The output is this, meaning both rules fired:
> Loading rules
> Firing rules
> ExpensiveCanonShopper1
> ExpensiveCanonShopper0
>
> I have two questions:
>
> 1. Is this a bug, or am I doing something wrong? Only
> "ExpensiveCanonShopper0" should fire.
>
> 2. I am pretty sure this is somehow related to the fact that I'm using Map
> attributes, and not POJO to get "price0" and "camera0". My issue is that I
> won't know the parameters in advance (they are coming in a URL), so I can't
> pre-declare them, and thus need something dynamic like a Map. Is this how
> Drools is intended to be used? The documentation appears very POJO-centric.
>
> I am using Drools 5.2
>
> Thank you!
> -Matt
>
> --
> View this message in context:
> http://drools.46999.n3.nabble.com/Unsatisfied-rule-fires-Drools-bug-tp3370653p3370653.html
> Sent from the Drools: User forum mailing list archive at Nabble.com.
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110927/aea6d2bb/attachment.html
More information about the rules-users
mailing list