<br> Henry,<br><br> This is tricky. Can you please open a JIRA for it? I will take a look as soon as I can on how to fix that.<br><br> Meanwhile, the workaround is: instead of inheriting from a collection class, can you wrap it instead?
<br><br>public class NamedCollection<T> {<br> private String name;<br> private LinkedList<T> list;<br><br> // constructor, getters, setters<br>}<br><br> This change will make it work for you.<br><br> []s
<br> Edson<br><br><div><span class="gmail_quote">2008/1/15, Henry Canterburry <<a href="mailto:canterburry@gmail.com">canterburry@gmail.com</a>>:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I am having the same problem as described in this post:<br><a href="http://www.nabble.com/The-effect-of-not-using-shadow-facts-tp11652637p11708600.html">http://www.nabble.com/The-effect-of-not-using-shadow-facts-tp11652637p11708600.html
</a><br><br>The problem is, there really was no solution mentioned. Here is my<br>collections class that I am asserting into working memory:<br><br>public class NamedCollection<T> extends LinkedList<T>{<br><br>
public NamedCollection(String name){<br> super();<br> <a href="http://this.name">this.name</a> = name;<br> }<br><br> public String getName(){<br> return name;<br> }<br><br> /**<br> *
<br> */<br> private static final long serialVersionUID = -457439174592908333L;<br> private String name;<br><br> @Override<br> public int hashCode() {<br> final int prime = 31;<br> int result =
super.hashCode();<br> result = prime * result + ((name == null) ? 0 : name.hashCode());<br> return result;<br> }<br><br> @Override<br> public boolean equals(Object obj) {<br> if (this == obj)
<br> return true;<br> if (!super.equals(obj))<br> return false;<br> if (getClass() != obj.getClass())<br> return false;<br> final NamedCollection other = (NamedCollection) obj;
<br> if (name == null) {<br> if (<a href="http://other.name">other.name</a> != null)<br> return false;<br> } else if (!name.equals(<a href="http://other.name">other.name</a>))<br> return false;
<br> return true;<br> }<br>}<br><br>I get the following error when inserting this fact into memory:<br>org.drools.RuntimeDroolsException: Error creating shadow fact for object: []<br> at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow
(Rete.java:628)<br> at org.drools.reteoo.Rete.assertObject(Rete.java:166)<br> at<br>org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br> at<br>org.drools.reteoo.ReteooWorkingMemory.doInsert(
ReteooWorkingMemory.java:71)<br> at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:886)<br> at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)<br> at
<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:60)<br> at<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:54)<br> at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0.consequence
(Rule_Explode_Globals_0.java:15)<br> at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0ConsequenceInvoker.evaluate(Rule_Explode_Globals_0ConsequenceInvoker.java:22)<br> at<br>org.drools.common.DefaultAgenda.fireActivation
(DefaultAgenda.java:550)<br> at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br> at<br>org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br> at<br>org.drools.common.AbstractWorkingMemory.fireAllRules
(AbstractWorkingMemory.java:424)<br> at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br> at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br> at
<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:56)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at<br>sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)<br> at<br>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br> at java.lang.reflect.Method.invoke(Method.java:597)<br> at junit.framework.TestCase.runTest
(TestCase.java:168)<br> at junit.framework.TestCase.runBare(TestCase.java:134)<br> at junit.framework.TestResult$1.protect(TestResult.java:110)<br> at junit.framework.TestResult.runProtected(TestResult.java:128)<br>
at junit.framework.TestResult.run(TestResult.java:113)<br> at junit.framework.TestCase.run(TestCase.java:124)<br> at junit.framework.TestSuite.runTest(TestSuite.java:232)<br> at junit.framework.TestSuite.run(
TestSuite.java:227)<br> at junit.textui.TestRunner.doRun(TestRunner.java:116)<br> at junit.textui.TestRunner.doRun(TestRunner.java:109)<br> at junit.textui.TestRunner.run(TestRunner.java:77)<br> at junit.textui.TestRunner.run
(TestRunner.java:62)<br> at<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java:64)<br>Caused by: java.lang.NullPointerException<br> at java.util.LinkedList.clear(LinkedList.java
:292)E<br><br> at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.updateProxy(Unknown<br>Source)<br> at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.setShadowedObject(Unknown<br>Source)<br>
at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:626)<br> ... 33 more<br>Time: 67.75<br>There was 1 error:<br>1)<br>testRandomMarketEntryRules(sequitem.quanteq.rules.RandomMarketEntryRulesTest)org.drools.spi.ConsequenceException:
<br>org.drools.RuntimeDroolsException: Error creating shadow fact for object: []<br> at<br>org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:14)<br> at<br>org.drools.common.DefaultAgenda.fireActivation
(DefaultAgenda.java:553)<br> at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br> at<br>org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br> at<br>org.drools.common.AbstractWorkingMemory.fireAllRules
(AbstractWorkingMemory.java:424)<br> at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br> at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br> at
<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:56)<br> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br> at<br>sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)<br> at<br>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br> at<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java
:64)<br>Caused by: org.drools.RuntimeDroolsException: Error creating shadow fact<br>for object: []<br> at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:628)<br> at org.drools.reteoo.Rete.assertObject
(Rete.java:166)<br> at<br>org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br> at<br>org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)<br> at<br>org.drools.common.AbstractWorkingMemory.insert
(AbstractWorkingMemory.java:886)<br> at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)<br> at<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:60)<br> at
<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:54)<br> at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0.consequence(Rule_Explode_Globals_0.java:15)<br> at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0ConsequenceInvoker.evaluate
(Rule_Explode_Globals_0ConsequenceInvoker.java:22)<br> at<br>org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)<br> ... 23 more<br>Caused by: java.lang.NullPointerException<br> at java.util.LinkedList.clear
(LinkedList.java:292)<br> at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.updateProxy(Unknown<br>Source)<br> at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.setShadowedObject(Unknown<br>
Source)<br> at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:626)<br> ... 33 more<br>_______________________________________________<br>rules-users mailing list<br><a href="mailto:rules-users@lists.jboss.org">
rules-users@lists.jboss.org</a><br><a href="https://lists.jboss.org/mailman/listinfo/rules-users">https://lists.jboss.org/mailman/listinfo/rules-users</a><br></blockquote></div><br><br clear="all"><br>-- <br> Edson Tirelli
<br> JBoss Drools Core Development<br> Office: +55 11 3529-6000<br> Mobile: +55 11 9287-5646<br> JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>