[rules-users] Getting hold of the Evaluator Registry

Jaroslaw Kijanowski kijanowski at gmail.com
Thu Jul 16 04:36:23 EDT 2009


On Linux, when I created my own accumulate functions, I had to put this 
file in my home directory to have it picked up by Eclipse.

Cheers,
  Jarek

Edson Tirelli wrote:
> 
>    root of your project "classpath", not root of your project.
> 
>    []s
>    Edson
> 
> 2009/7/15 Asif Iqbal <Asif.Iqbal at infor.com <mailto:Asif.Iqbal at infor.com>>
> 
>     Hi Edson,
> 
>      
> 
>     I have gone away and tried the properties method of adding the
>     customEvaluator, which worked fine for the code.  But my IDE still
>     does not pick it up. Any ideas?
> 
>      
> 
>     Do I need to place it in a META-INF folder in the root of the project?
> 
>      
> 
>     I have the following in the drools.packagebuilder.conf file.
> 
>      
> 
>     drools.evaluator.custom=com.infor.audit.bpr.component.validation.impl.drools.CustomComparableEvaluatorsDefinition
> 
>      
> 
>     thanks..
> 
>      
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>
>     [mailto:rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>] *On Behalf Of *Edson
>     Tirelli
> 
>     *Sent:* 15 July 2009 14:57
>     *To:* Rules Users List
>     *Subject:* Re: [rules-users] Getting hold of the Evaluator Registry
> 
>      
> 
> 
>        Yes, you are in the right track, and I understand this is a bit
>     confusing at first. One more reason for people to go to the October
>     Rules Fest 2009 where I will give a presentation on all the ways to
>     extend the engine to solve specific problems. It will be interesting
>     I hope (last year was awesome) and even Charles Forgy will be there
>     doing a presentation on Parallel Rete. :)
> 
>         Meanwhile I will write a tutorial on this, but just to help you
>     there, your approach is correct, except that you don't need to setup
>     the option for each operator. It works like this:
> 
>     * One EvaluatorDefinition class implements support to one or more
>     evaluators, defined by the method public String[] getEvaluatorIds().
> 
>     * All you need to do, then, is wire you class once and the engine
>     will pick-up all the IDs supported by that class. When you have your
>     class wired, you give it a unique string identifier, so that if you
>     ever need to replace it, or remove it, you will use that id.
>     Sometimes we use the operator as the ID, but usually it is something
>     that reminds you of the kind of evaluators that class define. For
>     instance, drools registers the ComparableEvaluatorsDefinition in
>     this way:
> 
>     drools.evaluator.comparable =
>     org.drools.base.evaluators.ComparableEvaluatorsDefinition
> 
>       So in this case, "comparable" is the identifier. Finally, from my
>     previous e-mail you will see that the reason that the eclipse IDE is
>     still giving you errors is that you are using the API to configure
>     the evaluators. Just move the configuration to the configuration
>     file and the IDE will pick it up.
> 
>        []s
>        Edson
> 
> 
>     2009/7/15 Asif Iqbal <Asif.Iqbal at infor.com
>     <mailto:Asif.Iqbal at infor.com>>
> 
>     Edson,
> 
>      
> 
>     What I have done so far is created a
>     CustomComparableEvaluatorsDefinition, which is exactly the same as
>     the default ComparableEvaluatorsDefinition apart form having support
>     for strings, which I have done by creating
>     StringGreaterOrEqualEvaluators and added that in my custom class,
>     using the addEvaluatorFunction :-
> 
>      
> 
>                 addEvaluator( ValueType.SHORT_TYPE,        
>     Operator.GREATER,             ShortGreaterEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.SHORT_TYPE,        
>     Operator.GREATER_OR_EQUAL,    ShortGreaterOrEqualEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.PSHORT_TYPE,       
>     Operator.LESS,                ShortLessEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.PSHORT_TYPE,   
>         Operator.LESS_OR_EQUAL,       ShortLessOrEqualEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.PSHORT_TYPE,       
>     Operator.GREATER,             ShortGreaterEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.PSHORT_TYPE,       
>     Operator.GREATER_OR_EQUAL,    ShortGreaterOrEqualEvaluator.INSTANCE );
> 
>                 //Custom additions
> 
>                 addEvaluator( ValueType.STRING_TYPE,       
>     Operator.LESS,                StringLessEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.STRING_TYPE,       
>     Operator.LESS_OR_EQUAL,       StringLessOrEqualEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.STRING_TYPE,       
>     Operator.GREATER,             StringGreaterEvaluator.INSTANCE );
> 
>                 addEvaluator( ValueType.STRING_TYPE,       
>     Operator.GREATER_OR_EQUAL,    StringGreaterOrEqualEvaluator.INSTANCE );
> 
>      
> 
>     Now Im am trying to wire it, with the following..
> 
>      
> 
>                             CustomComparableEvaluatorsDefinition
>     MyCustomComparable custom = *new*
>     CustomComparableEvaluatorsDefinition();
> 
>                             KnowledgeBuilderConfiguration config =
>     KnowledgeBuilderFactory./newKnowledgeBuilderConfiguration/();
> 
>                             EvaluatorOption option =
>     EvaluatorOption./get/(_Operator./LESS/.toString()_, custom);
> 
>                             EvaluatorOption option2 =
>     EvaluatorOption./get/(_Operator./LESS_OR_EQUAL/.toString()_, custom);
> 
>                             EvaluatorOption option3 =
>     EvaluatorOption./get/(_Operator./GREATER/.toString()_, custom);
> 
>                             EvaluatorOption option4 =
>     EvaluatorOption./get/(_Operator./GREATER_OR_EQUAL/.toString()_, custom);
> 
>                            
> 
>                             config.setOption(option);
> 
>                             config.setOption(option2);
> 
>                             config.setOption(option3);
> 
>                             config.setOption(option4);
> 
>      
> 
>     Firstly is this the correct approach?....
> 
>      
> 
>     The problem im having is that in my drl files still flag errors,
>     when I do “test” > “test2” , am I missing something?
> 
>      
> 
>     Regards
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>
>     [mailto:rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>] *On Behalf Of *Asif Iqbal
>     *Sent:* 15 July 2009 08:20
>     *To:* Rules Users List
>     *Subject:* RE: [rules-users] Getting hold of the Evaluator Registry
> 
>      
> 
>     Edson,
> 
>      
> 
>     Thanks for your replies they have really helped.
> 
>      
> 
>     1)       I am still not sure about creating a new operator, since
>     the ‘>=’ operator already exists it just does not cater for strings,
>     which I want to add. So would creating a new operator cause the
>     existing one to be overrriden when added to the registry?  
> 
>      
> 
>     2)       Having looked at the examples and tests you emailed, I am
>     still unsure how to actually wire in the changes, say for example I
>     have replaced the existing ‘>=’ evaluator or created a new evaluator
>     so that ‘>=’  now handles strings. When writing rules will the
>     engine pick this up?.. or do I need to create a new jar by
>     building?.. or do I need to update a configuration file?... im just
>     not sure…
> 
>      
> 
>     3)       Wouldn’t the following also add the evaluator definition by
>     replacing the existing one..
> 
>      
> 
>                       _PackageBuilderConfiguration_ pkgb = *_new_*_
>     PackageBuilderConfiguration()_;              
> 
>                      
>     _pkgb.getEvaluatorRegistry()_._addEvaluatorDefinition_(*new
>     *ComparableEvaluatorsDefinition());
> 
>                       _PackageBuilder_ builder = *_new_*_
>     PackageBuilder(pkgb)_;
> 
>      
> 
>                       _builder.addPackageFromDrl(source)_;
> 
>                       _Package_ pkg = _builder.getPackage()_;
> 
>                       // Add the package to a _rulebase_ (deploy the
>     rule package).
> 
>                       rules = _RuleBaseFactory./newRuleBase/()_;
> 
>                       _rules__.addPackage(pkg)_;
> 
>      
> 
>     Thanks for your help…
> 
>      
> 
>     ------------------------------------------------------------------------
> 
>     *From:* rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>
>     [mailto:rules-users-bounces at lists.jboss.org
>     <mailto:rules-users-bounces at lists.jboss.org>] *On Behalf Of *Edson
>     Tirelli
>     *Sent:* 14 July 2009 23:05
>     *To:* Rules Users List
>     *Subject:* Re: [rules-users] Getting hold of the Evaluator Registry
> 
>      
> 
> 
>        I am working in one example of drools features where I implement
>     a custom evaluator here:
> 
>     http://anonsvn.jboss.org/repos/labs/labs/jbossrules/contrib/lotrc/src/main/java/org/drools/examples/lotrc/evaluators/IsAdjacentToEvaluatorDefinition.java
> 
>        I use the configuration file instead of API in the example:
> 
>     http://anonsvn.jboss.org/repos/labs/labs/jbossrules/contrib/lotrc/src/main/resources/META-INF/drools.packagebuilder.conf
> 
>        []s
>        Edson
> 
>     2009/7/14 Edson Tirelli <tirelli at post.com <mailto:tirelli at post.com>>
> 
> 
>        Asif,
> 
>        My recommendation is create a new operator for you instead of
>     overriding existing ones. Although if you really want to replace the
>     existing ones, setting the property or calling the API to register a
>     new operator will override the default.
> 
>        See:
> 
>     http://anonsvn.jboss.org/repos/labs/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/builder/KnowledgeBuilderConfigurationTest.java
> 
>        Test method:
> 
>     testEvaluatorConfiguration()
> 
>        []s
>        Edson
> 
>     2009/7/14 Asif Iqbal <Asif.Iqbal at infor.com
>     <mailto:Asif.Iqbal at infor.com>>
> 
>     Hi,
> 
>      
> 
>     What I need to do is modify one of the evaluator classes
>     specifically ‘<=’, so that it can handle strings. Now I know I need
>     to create a class similar to ComparableEvaluatorDefinition. But what
>     I want to do is replace the existing one in the evaluator registry
>     with my implementation which will include the additional String
>     capability.
> 
>      
> 
>     From my understanding that should be all that is required. Unless im
>     missing something… now all I need to know is how do I get hold of
>     the evaluator registry?
> 
>      
> 
>     Cheers
> 
>      
> 
>     I
> 
>      
> 
>     _______________________________________________
>     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
> 
> 
> 
> 
>     -- 
>      Edson Tirelli
>      JBoss Drools Core Development
>      JBoss by Red Hat @ www.jboss.com <http://www.jboss.com>
> 
> 
> 
> 
>     -- 
>      Edson Tirelli
>      JBoss Drools Core Development
>      JBoss by Red Hat @ www.jboss.com <http://www.jboss.com>
> 
> 
>     _______________________________________________
>     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
> 
> 
> 
> 
>     -- 
>      Edson Tirelli
>      JBoss Drools Core Development
>      JBoss by Red Hat @ www.jboss.com <http://www.jboss.com>
> 
> 
>     _______________________________________________
>     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
> 
> 
> 
> 
> -- 
>  Edson Tirelli
>  JBoss Drools Core Development
>  JBoss by Red Hat @ www.jboss.com <http://www.jboss.com>
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users



More information about the rules-users mailing list