]
Edson Tirelli reassigned JBRULES-1315:
--------------------------------------
Assignee: Edson Tirelli
Rule that uses a 'collect' and 'from' clause together
causes problem
--------------------------------------------------------------------
Key: JBRULES-1315
URL:
http://jira.jboss.com/jira/browse/JBRULES-1315
Project: JBoss Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Components: Reteoo
Affects Versions: 4.0.3
Reporter: Igor Bolic
Assigned To: Edson Tirelli
Attachments: testRemovePackage.rar
Test case:
Write a Rule that uses a 'collect' and 'from' clause together, example:
package com.sample.mypackage
rule "Apply discount"
when
$order: Order();
$items : ArrayList() from collect (OrderItem() from $order.items)
then
#apply discount
end
first i add the package to RuleBase object, everthing works fine. When i try to
'refresh' my rules, i.e. first remove the package and again
add the same (modified) package to the RuleBase object, following error occurs:
java.lang.IllegalArgumentException: Cannot remove a sink, when the list of sinks is null
at org.drools.reteoo.ObjectSource.removeObjectSink(ObjectSource.java:116)
at org.drools.reteoo.AlphaNode.remove(AlphaNode.java:181)
at org.drools.reteoo.LeftInputAdapterNode.remove(LeftInputAdapterNode.java:204)
at org.drools.reteoo.FromNode.remove(FromNode.java:153)
at
org.drools.reteoo.RightInputAdapterNode.remove(RightInputAdapterNode.java:167)
at org.drools.reteoo.BetaNode.remove(BetaNode.java:186)
at org.drools.reteoo.RuleTerminalNode.remove(RuleTerminalNode.java:461)
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:224)
at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:272)
at org.drools.common.AbstractRuleBase.removePackage(AbstractRuleBase.java:460)
...
I've found a workaround for this error by writing my .drl code as following:
package com.sample.mypackage
rule "Explode Cart"
salience 11
dialect "java"
when
$order: Order()
$item : OrderItem() from $order.items
then
insert( $item );
end
rule "Apply discount"
no-loop true
when
$order : Order();
$items : ArrayList() from collect (OrderItem())
then
#apply discount
end
Now, my rules are 'refreshed' without any error.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: