Forgot to say that we are doing an effort to completely remove shadow
proxies in the next major version.
2008/2/19, Edson Tirelli <tirelli(a)post.com>:
Drools tries to create the ShadowProxy. The reason is that it does not
know about the implementation... it just knows it is a Map and as so, it
must be shadowed. Problem is that SingletonMap is either final or does not
have a default constructor.
My recommendation, besides opening a JIRA for this, is avoid inserting
collections/maps directly as facts. The semantic for such facts is not
clearly defined and it may cause undesired behavior.
[]s
Edson
2008/2/19, Godmar Back <godmar(a)gmail.com>:
>
> Hi,
>
> usings Drools 4.0.4 and MVEL 1.4, this simple rule:
> ---
> package test;
>
> import java.util.Collections;
>
> dialect "mvel"
>
> rule "Rule #1"
> when
> then
> insert(Collections.singletonMap("content", "hello"));
> end
> --
>
> produces:
> java.lang.IllegalAccessError: class
> org.drools.shadow.java.util.Collections$SingletonMapShadowProxy cannot
> access its superclass java.util.Collections$SingletonMap
> at java.lang.ClassLoader.defineClass1(Native Method)
> at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
> at org.drools.rule.MapBackedClassLoader.fastFindClass(
> MapBackedClassLoader.java:60)
> at org.drools.rule.MapBackedClassLoader.loadClass(
> MapBackedClassLoader.java:79)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
> at
> org.drools.reteoo.Rete$ClassObjectTypeConf.loadOrGenerateProxy(Rete.java
> :547)
> at
> org.drools.reteoo.Rete$ClassObjectTypeConf.defineShadowProxyData(
> Rete.java:494)
> at org.drools.reteoo.Rete$ClassObjectTypeConf.<init>(Rete.java
> :461)
> at org.drools.reteoo.Rete.assertObject(Rete.java:152)
> 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:909)
> at org.drools.common.AbstractWorkingMemory.insert(
> AbstractWorkingMemory.java:881)
> at org.drools.base.DefaultKnowledgeHelper.insert(
> DefaultKnowledgeHelper.java:67)
> at org.drools.base.DefaultKnowledgeHelper.insert(
> DefaultKnowledgeHelper.java:61)
>
>
> It's not clear to me why Drools creates Proxies for such classes as
> java.util.Collections, or does MVEL do it?
>
> - Godmar
> _______________________________________________
> 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
--
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