2011/9/28 matvey1414 <matvey1...@gmail.com> > Hi, > > Thank you for your reply. I will use the Knowledge API going forward. > > Can you please explain what you mean by "deviate from the constraint syntax > as defined with 5.1.1"? What's an example of 5.1.1 syntax, >
For a complete picture, get the Expert manual of 5.1.1. Most constraint have to be written as <field> <comp-op> <value> and there's a restrictive list of what is permitted as a <value>, e.g. field == (one + 2) // parens are required or field > 42 // OK and so on. > and what's an example of a deviation? > For instance: 42 < field or field == one + 2 and so on. HTH -W > > -Matt > > On Tue, Sep 27, 2011 at 5:12 AM, laune [via Drools] <[hidden > email]<http://user/SendEmail.jtp?type=node&node=3376645&i=0> > > wrote: > >> 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 <[hidden >> email]<http://user/SendEmail.jtp?type=node&node=3372058&i=0> >> > 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 >>> [hidden email] <http://user/SendEmail.jtp?type=node&node=3372058&i=1> >>> >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >> >> >> _______________________________________________ >> rules-users mailing list >> [hidden email] <http://user/SendEmail.jtp?type=node&node=3372058&i=2> >> https://lists.jboss.org/mailman/listinfo/rules-users >> >> >> ------------------------------ >> If you reply to this email, your message will be added to the discussion >> below: >> >> http://drools.46999.n3.nabble.com/Unsatisfied-rule-fires-Drools-bug-tp3370653p3372058.html >> To unsubscribe from Unsatisfied rule fires - Drools bug?, click here. >> > > > > -- > www.calcmachine.com - easy online calculator. > > ------------------------------ > View this message in context: Re: [rules-users] Unsatisfied rule fires - > Drools > bug?<http://drools.46999.n3.nabble.com/Unsatisfied-rule-fires-Drools-bug-tp3370653p3376645.html> > > Sent from the Drools: User forum mailing list > archive<http://drools.46999.n3.nabble.com/Drools-User-forum-f47000.html>at > Nabble.com. > > _______________________________________________ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > >
_______________________________________________ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users