[rules-users] DRL authoring help

Mark Proctor mproctor at codehaus.org
Mon Jun 18 12:29:34 EDT 2007


class instances are globals, classes themselves aren't.

Mark
Smitha Bhat wrote:
> Hi Krishnan,
> I need the class itself to be global as I might have to access other 
> functions of it as I go along in the effort.
> I cannot seem to be able to call the methods of this global class. I 
> have also added a snippet of the code.
>  
> Thanks
>  Smitha
> Here is my drl
>  
>  
> drl=
> package test.tools.rulesengine
> import test.tools.rulesengine.Utilities;
> global test.tools.rulesengine.Utilities util;
> rule "Rule1"
> when
> $Position1 : PosReport()
> eval($Position1.getName() == "POS_0_1")
> then
> util.setColor($Position1, "red");
> end
>  
>  
>  
> try {
>      builder.addPackageFromDrl(new StringReader( drl) );
>      
>    
>       if(firstCall){
>         ruleBase = RuleBaseFactory.newRuleBase();
>         ruleBase.addPackage( builder.getPackage() );
>         workingMemory = ruleBase.newWorkingMemory();
>         Utilities util = new Utilities();
>         workingMemory.setGlobal("util", util);
>             
>         firstCall = false;
>       }else
>            ruleBase.addPackage( builder.getPackage() );
>      //workingMemory = ruleBase.newWorkingMemory();
>     } catch (DroolsParserException e1) {
>      // TODO Auto-generated catch block
>      e1.printStackTrace();
>     } catch (IOException e1) {
>      // TODO Auto-generated catch block
>      e1.printStackTrace();
>     } catch (Exception e1) {
>      // TODO Auto-generated catch block
>      e1.printStackTrace();
>     }
>
>
> */Krishnan <krishiyer at gmail.com>/* wrote:
>
>
>     Hi Smitha,
>
>     They way I understand, in the then clause you would like to call a
>     static function from some class. So, then you can add that to the
>     import and access it directly. It does not have to be global.
>     However, if for some reason you do need to add it as a global,,
>     let me know.
>
>     send that when part of the rule again.
>
>     -Krishnan.
>
>     On 6/18/07, *Smitha Bhat* <bhat_smitha at yahoo.com
>     <mailto:bhat_smitha at yahoo.com>> wrote:
>
>         Hi Krishnan,
>         I need the functionality of being able to call methods of a
>         global class in the 'then' piece of the drl. I had defined the
>         drl file as:
>          
>         package test.tools.rulesengine
>         import test.tools.rulesengine.Utilities;
>         global test.tools.rulesengine.Utilities util;
>          
>         rule "Rule1".................
>          
>         When I debug the 'when' piece, I see that the method to check
>         the name is being called, but tfter that, the global util's
>         class method is not called. Any pointers would be helpful.
>          
>         Thanks,
>         Smitha
>
>
>         */Krishnan < krishiyer at gmail.com
>         <mailto:krishiyer at gmail.com>>/* wrote:
>
>             Hi Smitha,
>
>             Rewrite the rule as follows :-
>
>             rule "Rule1"
>             when
>             $Position1 : Position ( name matches "POS-RPT_0_1" )
>             then
>             $Position.setColor("red");
>             end
>
>             Note : You had something called util, unless it is a
>             global, it will not work.
>
>             -Krishnan.
>
>             On 6/18/07, *Smitha Bhat* < bhat_smitha at yahoo.com
>             <mailto:bhat_smitha at yahoo.com>> wrote:
>
>                 Hi,
>                 I am new to JBoss rules. I have a .drl as given below:
>                  
>                 rule "Rule1"
>                 when
>                 $Position1 : Position()
>                 eval($Position1.getName() contains "POS-RPT_0_1")
>                 then
>                 util.setColor($Position1, "red");
>                 end
>                  
>                 Before firing the rules, I assert my object as
>                  
>                 posIn = new Position(name,
>                      id,
>                      symbolCode,
>                      lonDouble,
>                      latDouble,
>                      elevDouble,
>                      reportDate,
>                      this);
>                     workingMemory.assertObject ( posIn );
>                     workingMemory.fireAllRules();
>                  
>                 I get the following error.
>                  
>                 org.drools.rule.InvalidRulePackage: Rule Compilation
>                 error The left-hand side of an assignment must be a
>                 variable Syntax error on token "contains", invalid
>                 AssignmentOperator
>                 at org.drools.rule.Package.checkValidity(Unknown Source)
>                 at
>                 org.drools.common.AbstractRuleBase.addPackage(Unknown
>                 Source)
>                  
>                 What is wrong with my drl? I have a Utilities class
>                 that I have defined as global.
>                  
>                 Thanks
>                  
>                 ------------------------------------------------------------------------
>                 Looking for a deal? Find great prices on flights and
>                 hotels
>                 <http://us.rd.yahoo.com/evt=47094/*http://farechase.yahoo.com/;_ylc=X3oDMTFicDJoNDllBF9TAzk3NDA3NTg5BHBvcwMxMwRzZWMDZ3JvdXBzBHNsawNlbWFpbC1uY20->
>                 with Yahoo! FareChase.
>                 _______________________________________________
>                 rules-users mailing list
>                 rules-users at lists.jboss.org
>                 <mailto:rules-users at lists.jboss.org>
>                 https://lists.jboss.org/mailman/listinfo/rules-users
>                 <https://lists.jboss.org/mailman/listinfo/rules-users>
>
>
>
>
>             -- 
>             Sivaramakrishna Iyer Krishnan (Anand)
>
>             Never assume the obvious is true.
>             - William Safire
>             _______________________________________________
>             rules-users mailing list
>             rules-users at lists.jboss.org
>             <mailto:rules-users at lists.jboss.org>
>             https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>         ------------------------------------------------------------------------
>         Need a vacation? Get great deals to amazing places
>         <http://us.rd.yahoo.com/evt=48256/*http://travel.yahoo.com/;_ylc=X3oDMTFhN2hucjlpBF9TAzk3NDA3NTg5BHBvcwM1BHNlYwNncm91cHMEc2xrA2VtYWlsLW5jbQ-->on
>         Yahoo! Travel.
>         _______________________________________________
>         rules-users mailing list
>         rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>         https://lists.jboss.org/mailman/listinfo/rules-users
>         <https://lists.jboss.org/mailman/listinfo/rules-users>
>
>
>
>
>     -- 
>     Sivaramakrishna Iyer Krishnan (Anand)
>
>     Never assume the obvious is true.
>     - William Safire _______________________________________________
>     rules-users mailing list
>     rules-users at lists.jboss.org
>     https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> ------------------------------------------------------------------------
> Get the Yahoo! toolbar and be alerted to new email 
> <http://us.rd.yahoo.com/evt=48225/*http://new.toolbar.yahoo.com/toolbar/features/mail/index.php>wherever 
> you're surfing.
> ------------------------------------------------------------------------
>
> _______________________________________________
> 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/20070618/7aaf2342/attachment.html 


More information about the rules-users mailing list