[rules-users] ClassCastException and "from collect" keyword issue?
Wolfgang Laun
wolfgang.laun at gmail.com
Thu Jan 31 10:28:46 EST 2013
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.
>
More information about the rules-users
mailing list