[
http://jira.jboss.com/jira/browse/JBRULES-1315?page=comments#action_12398508 ]
Edson Tirelli commented on JBRULES-1315:
----------------------------------------
Pavlin,
Thanks for the suggestion. We used the sharing counter a lot in the past to cache nodes.
Maybe it is time to refactor and simplify that.
Meanwhile, I implemented a solution that stops the duplicated remove() call. This only
happens in the presence of subnetworks. I'll commit it later today. I'm just
discussing with Mark a related design issue that we need to fix.
BTW, thanks for the test cases Igor. Very good.
[]s
Edson
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:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira