[rules-users] Nested properties and memberOf

Meeraj Kunnumpurath mkunnumpurath at googlemail.com
Fri Jul 16 14:57:21 EDT 2010


Thanks Edson.

That worked like a treat

CreditTransferTransactionInformation10( eval( !( accountNumbers contains
dbtrAcct.?id.?othr.?id ) ) )

Regards
Meeraj

2010/7/16 Edson Tirelli <tirelli at post.com>

>    It does short circuit on "constraints". Not on patterns.
>
>    The problem is your assumption that rules are executed in order. They
> are not. Check the manual for "Conflict Resolution".
>
>    Also, the LHS of rules are executed at "insert"/"modify" time, so the
> LHS of both rules will be executed before any of them is fired.
>
>    The shortest syntax for your case is to use an mvel inline eval using
> the null-safe navigation:
>
> rule X
>     dialect "mvel"
> when
>     ...
>     CreditTransferTransactionInformation10( eval( !( accountNumbers
> contains dbtrAcct.?id.?othr.?id ) ) )
>     ...
>
>    Of course, you can do all the null checks in the pattern itself,
> avoiding the need to use the mvel syntax.
>
>    Edson
>
>
> 2010/7/16 Meeraj Kunnumpurath <mkunnumpurath at googlemail.com>
>
>> Thanks Dave.
>>
>> I think the '||' on rule 1 is getting short-circuited. However, it is the
>> '&&' on rule 2 that is not getting short circuited.
>>
>> Kind regards
>> Meeraj
>>
>> 2010/7/16 David Sinclair <dsinclair at chariotsolutions.com>
>>
>> Drools doesn't use short circuit evaluation, so all of those ORs are going
>>> to be evaluated. You may want to consider re-writing your rules or you can
>>> use MVEL's null safe navigation for this. dbtrAcct.?id == null,
>>> dbtrAcct.?id.?othr == nulll, etc.
>>>
>>> dave
>>>
>>>
>>>
>>> 2010/7/16 Meeraj Kunnumpurath <mkunnumpurath at googlemail.com>
>>>
>>>>  Hi,
>>>>
>>>> I have the following rules,
>>>>
>>>> global java.util.Set accountNumbers;
>>>>
>>>> rule "rule 1"
>>>> when
>>>>     $d : Document()
>>>>     $c : CreditTransferTransactionInformation (dbtrAcct == null ||
>>>> dbtrAcct.id == null || dbtrAcct.id.othr == null || dbtrAcct.id.othr.id== null) from $d.cstmrCdtTrfInitn.cdtTrfTxInf
>>>>     $i : InternalInfo() from $c.internalInfo
>>>> then
>>>>     $i.setStatus(PaymentStatus.INVALID);
>>>>     $i.setErrorCode("PR002");
>>>>     $i.setAdditionalInfo("Account number is null");
>>>> end
>>>>
>>>> rule "rule 2"
>>>> when
>>>>     $d : Document()
>>>>     $c : CreditTransferTransactionInformation(internalInfo.status !=
>>>> PaymentStatus.INVALID && dbtrAcct.id.othr.id not memberOf
>>>> accountNumbers) from $d.cstmrCdtTrfInitn.cdtTrfTxInf
>>>>     $i : InternalInfo() from $c.internalInfo
>>>> then
>>>>     $i.setStatus(PaymentStatus.INVALID);
>>>>     $i.setErrorCode("PR002");
>>>>     $i.setAdditionalInfo("Account number not available in the routing
>>>> table");
>>>> end
>>>>
>>>> My assumption is rule 1 and rule 2 will be executed in the order they
>>>> appear. Rule 1 checks all the nested attributes are not null and set the
>>>> status as invalid if any of them is null. Rule 2 uses the and operator and
>>>> checks the nested attribute is in the collection defined by the global, only
>>>> if the object is valid. I assume the LHS of rule 2 will be short circuited
>>>> if the object is invalid. However, if any of the nested property is null I
>>>> get the following exception from MVEL.
>>>>
>>>> Caused by: [Error: unable to access property (null parent): id]
>>>> [Near : {... Unknown ....}]
>>>>              ^
>>>> [Line: 1, Column: 0]
>>>>     at
>>>> org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getMethod(ReflectiveAccessorOptimizer.java:861)
>>>>
>>>> Regards
>>>> Meeraj
>>>>
>>>> _______________________________________________
>>>> rules-users mailing list
>>>> rules-users at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>>
>>>>
>>>
>>> _______________________________________________
>>> rules-users mailing list
>>> rules-users at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/rules-users
>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing list
>> 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
>
> _______________________________________________
> 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/20100716/84b95ed3/attachment.html 


More information about the rules-users mailing list