[rules-users] Nested properties and memberOf

Meeraj Kunnumpurath mkunnumpurath at googlemail.com
Fri Jul 16 16:39:49 EDT 2010


Thanks Edson, will do that.

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

>      Whatever you write inside an eval() passes through to the chosen
> dialect.
>
>      Although, I agree it might be a good idea to improve that and add
> support to null-safe accessors in DRL as well. It is just not there. Feel
> free to open a JIRA with a feature request.
>
>     Edson
>
> 2010/7/16 Meeraj Kunnumpurath <mkunnumpurath at googlemail.com>
>
>> Hi Edson,
>>
>> Just as a matter of interest ... How come the grammar recognizes the
>> null-safe accessors below
>>
>> CreditTransferTransactionInformation10( eval( !( accountNumbers contains
>> dbtrAcct.?id.?othr.?id ) ) )
>>
>> and not
>>
>> CreditTransferTransactionInformation10(dbtrAcct.?id.?othr.?id not memberOf
>> accountNumbers )
>>
>> Kind regards
>> Meeraj
>>
>>
>> On Fri, Jul 16, 2010 at 7:57 PM, Meeraj Kunnumpurath <
>> mkunnumpurath at googlemail.com> wrote:
>>
>>> 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
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> 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/0f7f6de7/attachment.html 


More information about the rules-users mailing list