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(a)gmail.com>:
I am having the same problem as described in this post:
http://www.nabble.com/The-effect-of-not-using-shadow-facts-tp11652637p117...
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(a)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