[rules-users] Error creating shadow fact for object: [] when inserting Collection into working memory

Henry Canterburry canterburry at gmail.com
Tue Jan 15 02:19:31 EST 2008


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



More information about the rules-users mailing list