IMHO you should still think about putting the Map values into working memory.
 
This would both simplify your rules and make their execution faster (eval cannot be indexed, if I remember correctly).
 
You might need to adapt your data model representation into one that is more efficient for use in a RETE network.
 
Can you explain your use case to help understand? Unless you have very good reason to keep the facts in the Map your life will be more difficult than it need be.
 
An "eval" returns a boolean indiciating whether the "pattern" matched and therefore, whilst you can reference other bound LHS facts, you cannot bind other objects to variables.
 
Thanks,
 
Mike


From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of shaz
Sent: 02 November 2007 02:32
To: Rules Users List
Subject: Re: [rules-users] Accessing maps (hashmaps) keys and values in rules

Hi,

I am placing objects in the Hashmap that were retrieved from the database. There are currently a hundred objects that I'm storing in the HashMap. I just made a simple example earlier :) . What works for me now is putting the getting of the values in the eval(). However, I don't know how to assign the values that I've taken from the Map.

eval( ( (MyClass)mapOfObj.get("keyOfObj")).getId() > 30);

How do I assign (MyClass)mapOfObj.get("keyOfObj") to a variable?


tnx,

shaz


----- Original Message ----
From: "Anstis, Michael (M.)" <manstis1@ford.com>
To: Rules Users List <rules-users@lists.jboss.org>
Sent: Friday, November 2, 2007 12:17:51 AM
Subject: RE: [rules-users] Accessing maps (hashmaps) keys and values in rules

By way of example (if you misunderstand how the rule engine should be used):-
 
rule chkobj
when
    $o : MyClass( id == "1"name == "name" )
then
    //Do something else
    $o.doSomething();
end


From: rules-users-bounces@lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] On Behalf Of Edson Tirelli
Sent: 01 November 2007 15:48
To: Rules Users List
Subject: Re: [rules-users] Accessing maps (hashmaps) keys and values in rules


   Shaz,

   We strongly advise you to move to 4.0.3, but this is not related to your problem.
   I think you are misunderstanding something. Why are you using the global map to store your fact? Simply insert it into the working memory and it will work fine.

   []s
   Edson


2007/11/1, Shaz Tumulak <shauii@yahoo.com>:

Hi,

I can't seem to make this syntax work in Drools 4.0.2. Pls. see my sample
code below.
________________________________________
class MyClass {
        String id;
        String name;

        MyClass(String id, String name){
                this.id = id;
                this.name = name;
        }
        :
        getter, setter methods
        :
}

MyClass obj = new MyClass("1"", "name");

TreeMap<String, MyClass> mapOfObj = new TreeMap<String, MyClass>();
mapOfObj.put("keyOfObj", obj);
________________________________________

DRL file
-------

global java.util.TreeMap mapOfObj;

rule chkobj
when
        obj : MyClass(mapOfObj["keyOfObj"].id == "1");
        eval(obj.getName() == "name");
________________________________________

I'm getting this error: org.drools.RuntimeDroolsException:
java.lang.NullPointerException
                            at
org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:76)

Is my syntax correct and has someone used this in 4.0.2 or should I move on
to Drools 4.0.3? Thanks in advance.

Regards,

shaz


Edson Tirelli-3 wrote:
>
>    Denis,
>
>    If you are using latest build from trunk (I'm not sure it already works
> in MR3), you can use a simplified MVEL syntax:
>
> when
>     Person( address["business"].phone == "99999999" )
> then
>     ...
> end
>
>    Although, the above will be converted into an inline-eval. Not as bad
> as
> a top level eval, but still more costly then using regular fields.
>
>    []s
>    Edson
>
> 2007/7/19, Ryan, Dennis (Dennis) <dennisryan@avaya.com >:
>>
>>  We are using Maps (HashMaps) in our rules and the only way we have found
>> to access keys and values in the Map in the "when" clauses is thru use on
>> eval() which I know is a big no-no by rules purists. Is there a better
>> way,
>> maybe some shorthand I'm not familiar with to deal with Maps in the when
>> clause?
>>
>>
>>
>> Thanks,
>>
>> Dennis
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users@lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
>
> --
>   Edson Tirelli
>   Software Engineer - JBoss Rules Core Developer
>   Office: +55 11 3529-6000
>   Mobile: +55 11 9287-5646
>   JBoss, a division of Red Hat @ www.jboss.com
>
> _______________________________________________
> rules-users mailing list
> rules-users@lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
shauii@yahoo.com
--
View this message in context: http://www.nabble.com/Accessing-maps-%28hashmaps%29-keys-and-values-in-rules-tf4112197.html#a13524477
Sent from the drools - user mailing list archive at Nabble.com.

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



--
  Edson Tirelli
  Software Engineer - JBoss Rules Core Developer
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com



Platonic friends of the opposite sex - the real deal?
Be a better buddy
Find out at Yahoo! Answers