I continue to play with the code attached to https://issues.jboss.org/browse/DROOLS-136 in src.zip. Updated invoice.drl is attached in this mail.

I changed the rule "calculate totalPrice per item" to MVEL and trying to calculate and set totalPrice with one liner:

((DataItemPrice)$v).setTotalPrice(((DataItemPrice)$v).getQty()*((DataItemPrice)$v).getUnitPrice());

but that fails with message: java.lang.IllegalArgumentException: object is not an instance of declaring class

On the other hand using temporary variable of type Double will work. Here is the complete rule which works up to the comment "// THIS IS DOESN'T WORK":

rule "calculate totalPrice per item"
salience -10
no-loop
when
    $q:Message(id=="item", answered==true,
        value instanceof DataItemPrice, $v:value
    )
then
    System.out.println("setting totalPrice on item: " + ((DataItemPrice)$v).getName());
   
    System.out.println("qty*unitPrice=" + ((DataItemPrice)$v).getQty()*((DataItemPrice)$v).getUnitPrice());
   
    Double d = ((DataItemPrice)$v).getQty()*((DataItemPrice)$v).getUnitPrice();
    ((DataItemPrice)$v).setTotalPrice(d);
    System.out.println("setting via temporary variable worked");
     
    // THIS IS DOESN'T WORK
    ((DataItemPrice)$v).setTotalPrice(((DataItemPrice)$v).getQty()*((DataItemPrice)$v).getUnitPrice());
    System.out.println("setting directly works ???");

    update($q);
end

Am I again wrongly hoping that MVEL will simplify data types casting ? Or should I fail a bug ?