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