[
http://jira.jboss.com/jira/browse/JBRULES-1588?page=all ]
Edson Tirelli resolved JBRULES-1588.
------------------------------------
Fix Version/s: (was: 5.0.0-M1)
(was: 4.0.7)
Resolution: Rejected
This problem is cause by the wrong implementation in the fact class of the
"Comparable" interface.
A simple test shows you the problem with your implementation. If you look at your
Message.compareTo() method, you have this:
public int compareTo(Object o) {
return -1;
}
That is clearly wrong. Simply doing this will show you the problem:
TreeSet set = new TreeSet();
set.add( message1 );
set.add( message2 );
System.out.println(set);
System.out.println( set.remove( message2 ) );
System.out.println( set );
Console output:
[[Hello World1], [Hello World]]
false
[[Hello World1], [Hello World]]
Implementing the compare to method correctly makes everything work:
public int compareTo(Object o) {
return getMessage().compareTo( ((Message)o).getMessage() );
}
Please note that the compareTo() method is using getXXX() methods to access the
attributes, since shadow proxies will required and they are proxies.
A slight change in your rule:
rule "Retract From TreeSet"
when
$tree: TreeSet( size > 0 ) from collect (Message() )
then
System.out.println($tree);
retract($tree.first());
end
And the run result is:
[[Hello World], [Hello World1]]
[[Hello World1]]
collect fails when using treeset
--------------------------------
Key: JBRULES-1588
URL:
http://jira.jboss.com/jira/browse/JBRULES-1588
Project: JBoss Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Affects Versions: 4.0.6
Reporter: pchar
Assigned To: Edson Tirelli
Attachments: treemap.zip
Hi All,
i've a simple rules that retract objects form the WM
rule "Retract From TreeSet"
when
$tree: TreeSet() from collect (Message() )
then
System.out.println($tree.first());
retract($tree.first());
end
after the firts run the following exception is thrown
org.drools.FactException: Retract error: handle not found for object: [Hello World]. Is
it in the working memory?
[Hello World]
at org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:120)
at
com.sample.Rule_Retract_From_TreeSet_0.consequence(Rule_Retract_From_TreeSet_0.java:9)
at
com.sample.Rule_Retract_From_TreeSet_0ConsequenceInvoker.evaluate(Rule_Retract_From_TreeSet_0ConsequenceInvoker.java:22)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:471)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:433)
at com.sample.DroolsTest.main(DroolsTest.java:36)
org.drools.spi.ConsequenceException: org.drools.FactException: Retract error: handle not
found for object: [Hello World]. Is it in the working memory?
at
org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:14)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:554)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:471)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:433)
at com.sample.DroolsTest.main(DroolsTest.java:36)
Caused by: org.drools.FactException: Retract error: handle not found for object: [Hello
World]. Is it in the working memory?
at org.drools.base.DefaultKnowledgeHelper.retract(DefaultKnowledgeHelper.java:120)
at
com.sample.Rule_Retract_From_TreeSet_0.consequence(Rule_Retract_From_TreeSet_0.java:9)
at
com.sample.Rule_Retract_From_TreeSet_0ConsequenceInvoker.evaluate(Rule_Retract_From_TreeSet_0ConsequenceInvoker.java:22)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)
... 4 more
--
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