<br>&nbsp;&nbsp; Henry,<br><br>&nbsp;&nbsp; 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>&nbsp;&nbsp; Meanwhile, the workaround is: instead of inheriting from a collection class, can you wrap it instead?
<br><br>public class NamedCollection&lt;T&gt; {<br>&nbsp;&nbsp; private String name;<br>&nbsp;&nbsp; private LinkedList&lt;T&gt; list;<br><br>&nbsp;&nbsp; // constructor, getters, setters<br>}<br><br>&nbsp;&nbsp; This change will make it work for you.<br><br>&nbsp;&nbsp;&nbsp; []s
<br>&nbsp;&nbsp;&nbsp; Edson<br><br><div><span class="gmail_quote">2008/1/15, Henry Canterburry &lt;<a href="mailto:canterburry@gmail.com">canterburry@gmail.com</a>&gt;:</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&lt;T&gt; extends LinkedList&lt;T&gt;{<br><br>
&nbsp;&nbsp; public NamedCollection(String name){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;super();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://this.name">this.name</a> = name;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;public String getName(){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return name;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;/**<br>&nbsp;&nbsp;&nbsp;&nbsp; *
<br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp;&nbsp;private static final long serialVersionUID = -457439174592908333L;<br>&nbsp;&nbsp;&nbsp;&nbsp;private String name;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;&nbsp;&nbsp;public int hashCode() {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final int prime = 31;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int result = 
super.hashCode();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result = prime * result + ((name == null) ? 0 : name.hashCode());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return result;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;@Override<br>&nbsp;&nbsp;&nbsp;&nbsp;public boolean equals(Object obj) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (this == obj)
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!super.equals(obj))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (getClass() != obj.getClass())<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;final NamedCollection other = (NamedCollection) obj;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (name == null) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (<a href="http://other.name">other.name</a> != null)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else if (!name.equals(<a href="http://other.name">other.name</a>))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return false;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return true;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<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>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow
(Rete.java:628)<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete.assertObject(Rete.java:166)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.reteoo.ReteooWorkingMemory.doInsert(
ReteooWorkingMemory.java:71)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:886)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)<br>&nbsp;&nbsp;&nbsp;&nbsp;at
<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:60)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:54)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0.consequence
(Rule_Explode_Globals_0.java:15)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0ConsequenceInvoker.evaluate(Rule_Explode_Globals_0ConsequenceInvoker.java:22)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.DefaultAgenda.fireActivation
(DefaultAgenda.java:550)<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.fireAllRules
(AbstractWorkingMemory.java:424)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br>&nbsp;&nbsp;&nbsp;&nbsp;at
<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:56)<br>&nbsp;&nbsp;&nbsp;&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.reflect.Method.invoke(Method.java:597)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestCase.runTest
(TestCase.java:168)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestCase.runBare(TestCase.java:134)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestResult$1.protect(TestResult.java:110)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestResult.runProtected(TestResult.java:128)<br>
&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestResult.run(TestResult.java:113)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestCase.run(TestCase.java:124)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestSuite.runTest(TestSuite.java:232)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.framework.TestSuite.run(
TestSuite.java:227)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.textui.TestRunner.doRun(TestRunner.java:116)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.textui.TestRunner.doRun(TestRunner.java:109)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.textui.TestRunner.run(TestRunner.java:77)<br>&nbsp;&nbsp;&nbsp;&nbsp;at junit.textui.TestRunner.run
(TestRunner.java:62)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java:64)<br>Caused by: java.lang.NullPointerException<br>&nbsp;&nbsp;&nbsp;&nbsp;at java.util.LinkedList.clear(LinkedList.java
:292)E<br><br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.updateProxy(Unknown<br>Source)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.setShadowedObject(Unknown<br>Source)<br>
&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:626)<br>&nbsp;&nbsp;&nbsp;&nbsp;... 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>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:14)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.DefaultAgenda.fireActivation
(DefaultAgenda.java:553)<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.fireAllRules
(AbstractWorkingMemory.java:424)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br>&nbsp;&nbsp;&nbsp;&nbsp;at
<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:56)<br>&nbsp;&nbsp;&nbsp;&nbsp;at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java
:64)<br>Caused by: org.drools.RuntimeDroolsException: Error creating shadow fact<br>for object: []<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:628)<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete.assertObject
(Rete.java:166)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.insert
(AbstractWorkingMemory.java:886)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:858)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:60)<br>&nbsp;&nbsp;&nbsp;&nbsp;at
<br>org.drools.base.DefaultKnowledgeHelper.insert(DefaultKnowledgeHelper.java:54)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0.consequence(Rule_Explode_Globals_0.java:15)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.ruleflow.Rule_Explode_Globals_0ConsequenceInvoker.evaluate
(Rule_Explode_Globals_0ConsequenceInvoker.java:22)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)<br>&nbsp;&nbsp;&nbsp;&nbsp;... 23 more<br>Caused by: java.lang.NullPointerException<br>&nbsp;&nbsp;&nbsp;&nbsp;at java.util.LinkedList.clear
(LinkedList.java:292)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.updateProxy(Unknown<br>Source)<br>&nbsp;&nbsp;&nbsp;&nbsp;at<br>sequitem.quanteq.rules.engine.NamedCollectionShadowProxy.setShadowedObject(Unknown<br>
Source)<br>&nbsp;&nbsp;&nbsp;&nbsp;at org.drools.reteoo.Rete$ClassObjectTypeConf.getShadow(Rete.java:626)<br>&nbsp;&nbsp;&nbsp;&nbsp;... 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>&nbsp;&nbsp;Edson Tirelli
<br>&nbsp;&nbsp;JBoss Drools Core Development<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>