[rules-users] ClassCastException and "from collect" keyword issue?

Wolfgang Laun wolfgang.laun at gmail.com
Thu Jan 31 11:13:45 EST 2013


Looks like a bug to me. You could try with 5.2.0 or later.

A possible workaround might be achieved by

  when
       EvaluateRule(ruleName == "INSCOPE") ### move up front
        $RatingData : RatingRuleFact()
        $contract : Contract()
        $noHoldingAgreementAccts : ArrayList()
        from collect ( Account(collatNetId == $contract.contractId,
                     businessUnit not in ("COMM", "FID", "FX", "IED",
             "SECLENDING", "SWAPS")) from $contract.collatAccounts
       )
#####

which is much better anyway, as it avoids repeated evaluations due to
changes in Account and other facts (which you may not have, but never
mind).

-W



On 31/01/2013, Tan, Kevin <Kevin.Tan at morganstanley.com> wrote:
> Hi Wolfgang,
>
> Thanks for your reply. Yes - this is the only place where both
> d2.rules.state.EvaluateRule and d2.autorating.data.model.Account are
> referenced. That's why we finally locate the classcastexception in this
> line:
>
> Account acct = (Account) obj;
>
> The weird thing is we are not able to replicate this error during the second
> time run in our program. We also searched and found some similar issues:
>
> http://drools.46999.n3.nabble.com/accumulate-vs-collect-td1884308.html
> http://lists.jboss.org/pipermail/rules-users/2009-June/009484.html
> http://drools.46999.n3.nabble.com/unexpected-ClassCastException-when-dealing-with-sliding-windows-td1692092.html
>
> Please advise.
>
> -Kevin
>
> -----Original Message-----
> From: rules-users-bounces at lists.jboss.org
> [mailto:rules-users-bounces at lists.jboss.org] On Behalf Of Wolfgang Laun
> Sent: Thursday, January 31, 2013 10:29 AM
> To: Rules Users List
> Subject: Re: [rules-users] ClassCastException and "from collect" keyword
> issue?
>
> Is rule "EXC_COLLAT_HOLDING_ARRANGEMENT" *absolutely* the only one where
> both d2.rules.state.EvaluateRule and d2.autorating.data.model.Account are
> referenced?
> -W
>
> On 31/01/2013, Tan, Kevin <Kevin.Tan at morganstanley.com> wrote:
>> Hi rules users,
>>
>> I am having a problem with Drools 5.1.1 recently. The exception we had
>> is:
>>
>> java.lang.ClassCastException:
>> d2.rules.state.EvaluateRule cannot be cast to
>> d2.autorating.data.model.Account
>> org.drools.runtime.rule.ConsequenceException: rule:
>> DERIVE_COLLAT_MECHANISM_PLEDGE
>>
>> Our rules are listed as below:
>>
>> //////////////////////////////////////////////////////////////////////
>> //////////////////////////////////////////////////////////////////////
>> //////////////////
>> rule "DERIVE_COLLAT_MECHANISM_PLEDGE"
>> no-loop true
>> salience 19991
>>     when
>>        $RatingData : RatingRuleFact()
>>        $contract : Contract()
>>        $csaDoc : Document(documentId == $contract.csaId && status ==
>> "Final/Signed")
>>        (EvaluateRule(ruleName == "INSCOPE))
>>     then
>>         RuleProcessingOutput ruleOutput = $RatingData.getRuleOutput();
>>         RuleResult result = new RuleResult(drools.getRule().getName(),
>> $contract.getContractId(), $RatingData.getPrincipalPartyCountry());
>>         ruleOutput.addRuleResult(result);
>>         $contract.setCollateralMechanism(result.getRuleOutputText());
>>         insertLogical(new EvaluateRule(drools.getRule().getName()));
>> end
>>
>> rule "EXC_COLLAT_HOLDING_ARRANGEMENT"
>> no-loop true
>> salience 19985
>>     when
>>        $RatingData : RatingRuleFact()
>>        $contract : Contract()
>>        $noHoldingAgreementAccts : ArrayList()
>>        from collect ( Account(collatNetId == $contract.contractId,
>>                     businessUnit not in ("COMM", "FID", "FX", "IED",
>> "SECLENDING", "SWAPS")) from $contract.collatAccounts
>>        )
>>        EvaluateRule(ruleName == "INSCOPE")
>>     then
>>         RuleProcessingOutput ruleOutput = $RatingData.getRuleOutput();
>>         for (Object obj : $noHoldingAgreementAccts) {
>>             Account acct = (Account) obj;
>>             if (acct.getDp2Account() != null) {
>>                 RuleResult result = new
>> RuleResult(drools.getRule().getName(), $contract.getContractId(),
>> $RatingData.getPrincipalPartyCountry());
>>                 result.setAccountId(acct.getDp2Account().getAccountId());
>>                 result.setRuleOutputText("BU has no Data");
>>                 ruleOutput.addRuleResult(result);
>>             }
>>         }
>>         if ($noHoldingAgreementAccts.size() > 0) {
>>             insertLogical(new EvaluateRule(drools.getRule().getName()));
>>         }
>> end
>> //////////////////////////////////////////////////////////////////////
>> //////////////////////////////////////////////////////////////////////
>> //////////////////
>>
>>
>> *         In object Account(), we did not have any EvaluateRule() object
>> in
>> it.
>>
>> *         We also noticed after the "from collect" key word there are
>> EvaluateRule() object defined after it(but the purpose is just to
>> determine if this object exist or not in the Working Memory), in the
>> LHS of each rule file.
>>
>> *         In the variable $noHoldingAgreementAccts, we are not supposed
>> to
>> see the object - EvaluateRule (BUT the exception is showing it is
>> trying to cast EvaluateRule into Account)
>>
>>
>> My question is are there any known problems/issues with the following
>>
>> -          Drools rule compilers
>>
>> -          Key word from collect
>>
>> -          Rules production memory
>>
>> -          Version 5.1.1
>>
>> that can make this happen? Any ideas will be appreciated. Thanks.
>>
>>
>> Kevin Tan
>> Morgan Stanley | Enterprise Data & Services
>> 700 Rue Wellington | Floor 04
>> Montreal, QC H3C 3S4
>> Phone: +1 514 876-5756
>> Kevin.Tan at morganstanley.com<mailto:Thanh.Dang at morganstanley.com>
>>
>>
>>
>> ________________________________
>>
>> NOTICE: Morgan Stanley is not acting as a municipal advisor and the
>> opinions or views contained herein are not intended to be, and do not
>> constitute, advice within the meaning of Section 975 of the Dodd-Frank
>> Wall Street Reform and Consumer Protection Act. If you have received
>> this communication in error, please destroy all electronic and paper
>> copies and notify the sender immediately. Mistransmission is not
>> intended to waive confidentiality or privilege. Morgan Stanley
>> reserves the right, to the extent permitted under applicable law, to
>> monitor electronic communications. This message is subject to terms
>> available at the following link:
>> http://www.morganstanley.com/disclaimers If you cannot access these
>> links, please notify us by reply message and we will send the contents
>> to you. By messaging with Morgan Stanley you consent to the foregoing.
>>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
> --------------------------------------------------------------------------------
>
> NOTICE: Morgan Stanley is not acting as a municipal advisor and the opinions
> or views contained herein are not intended to be, and do not constitute,
> advice within the meaning of Section 975 of the Dodd-Frank Wall Street
> Reform and Consumer Protection Act. If you have received this communication
> in error, please destroy all electronic and paper copies and notify the
> sender immediately. Mistransmission is not intended to waive confidentiality
> or privilege. Morgan Stanley reserves the right, to the extent permitted
> under applicable law, to monitor electronic communications. This message is
> subject to terms available at the following link:
> http://www.morganstanley.com/disclaimers. If you cannot access these links,
> please notify us by reply message and we will send the contents to you. By
> messaging with Morgan Stanley you consent to the foregoing.
> _______________________________________________
> 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