We can&#39;t start saying to people &quot;Drools only works if you remember to turn on some JVM setting&quot;. It&#39;ll smell bad, too fragile.<br><br>For now Class.forName stays, you&#39;ll need to find other work arounds.<br>
<br>Mrk<br><div class="gmail_quote">On Fri, Nov 18, 2011 at 5:27 PM, Mauricio Salatino <span dir="ltr">&lt;<a href="mailto:salaboy@gmail.com">salaboy@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
There are two workarounds mentioned there and one of them is:<br>
<br>
1. setting an environment variable when starting VM:<br>
-Dsun.lang.ClassLoader.allowArraySyntax=true.<br>
<br>
Instead of using the Class.forName() method. That looks like something<br>
that we can add in a profile right? it&#39;s just a JVM configuration<br>
issue.<br>
<br>
This looks to be a problem only in JDK 6.<br>
If we are using Class.forName() in an OSGI environment that provides<br>
hooks for Class.forName() we will end up having troubles with the<br>
CompositeClassLoader.<br>
<br>
What do you think about that? I&#39;m trying to decide and find out what<br>
are the most appropriate next steps.<br>
<br>
Cheers<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Fri, Nov 18, 2011 at 2:15 PM, Mark Proctor &lt;<a href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt; wrote:<br>
&gt; This is the jira that links to the java issue that explains why we can&#39;t use<br>
&gt; loadClass, the bug is still active, so we have to keep Class.forName<br>
&gt; <a href="https://issues.jboss.org/browse/JBRULES-1553" target="_blank">https://issues.jboss.org/browse/JBRULES-1553</a><br>
&gt; <a href="http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=2a9a78e4393c5e678a2c80f90c1?bug_id=6434149" target="_blank">http://bugs.sun.com/bugdatabase/view_bug.do;jsessionid=2a9a78e4393c5e678a2c80f90c1?bug_id=6434149</a><br>

&gt;<br>
&gt; Mark<br>
&gt; On Thu, Nov 17, 2011 at 5:53 PM, Mauricio Salatino &lt;<a href="mailto:salaboy@gmail.com">salaboy@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Just a small update:<br>
&gt;&gt; If I compile core and compiler with tests I&#39;m just getting the<br>
&gt;&gt; following failing tests in compiler:<br>
&gt;&gt; Failed tests:<br>
&gt;&gt;<br>
&gt;&gt;  testMonitorResourceChangeEvents(org.drools.agent.KnowledgeAgentDisposeTest)<br>
&gt;&gt;  testDispose(org.drools.agent.KnowledgeAgentDisposeTest)<br>
&gt;&gt;<br>
&gt;&gt; Tests in error:<br>
&gt;&gt;<br>
&gt;&gt;  testAccumulateMultipleFunctionsJava(org.drools.integrationtests.AccumulateTest)<br>
&gt;&gt;<br>
&gt;&gt;  testAccumulateMultipleFunctionsMVEL(org.drools.integrationtests.AccumulateTest)<br>
&gt;&gt;  testAccumulateMinMax(org.drools.integrationtests.AccumulateTest)<br>
&gt;&gt;  testAccumulateCE(org.drools.integrationtests.AccumulateTest)<br>
&gt;&gt;<br>
&gt;&gt; I think that the knowledge agents problem is not related with the<br>
&gt;&gt; Class.forName() change, but all the failing test inside the<br>
&gt;&gt; AccumulateTest fails because the following line inside<br>
&gt;&gt; ClassFieldAccessorCache:<br>
&gt;&gt; 124:     return this.classLoader.loadClass( className );<br>
&gt;&gt;<br>
&gt;&gt; Debugging, I didn&#39;t find the reason of the following stack trace:<br>
&gt;&gt; org.drools.RuntimeDroolsException: Unable to resolve class<br>
&gt;&gt; &#39;[Ljava.lang.Object;&#39;<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.base.ClassFieldAccessorCache.getClass(ClassFieldAccessorCache.java:126)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.base.ClassFieldAccessorCache.getClassObjectType(ClassFieldAccessorCache.java:48)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.base.ClassFieldAccessorStore.getClassObjectType(ClassFieldAccessorStore.java:285)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.base.ClassFieldAccessorStore.getClassObjectType(ClassFieldAccessorStore.java:271)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:291)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.rule.builder.PatternBuilder.build(PatternBuilder.java:130)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.rule.builder.GroupElementBuilder.build(GroupElementBuilder.java:65)<br>
&gt;&gt;        at org.drools.rule.builder.RuleBuilder.build(RuleBuilder.java:80)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2302)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:823)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:405)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.compiler.PackageBuilder.addKnowledgeResource(PackageBuilder.java:587)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.builder.impl.KnowledgeBuilderImpl.add(KnowledgeBuilderImpl.java:37)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.integrationtests.AccumulateTest.loadKnowledgeBase(AccumulateTest.java:111)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.integrationtests.AccumulateTest.execTestAccumulateMultipleFunctions(AccumulateTest.java:1656)<br>
&gt;&gt;        at<br>
&gt;&gt; org.drools.integrationtests.AccumulateTest.testAccumulateMultipleFunctionsJava(AccumulateTest.java:940)<br>
&gt;&gt;<br>
&gt;&gt; Because the community hudson is down I can&#39;t check if it&#39;s a local<br>
&gt;&gt; problem or a master one.<br>
&gt;&gt;<br>
&gt;&gt; Cheers<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Wed, Nov 16, 2011 at 5:48 PM, Mauricio Salatino &lt;<a href="mailto:salaboy@gmail.com">salaboy@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; We really need to analyze the difference and understand what is<br>
&gt;&gt; &gt; happening under the hood.. because if not strange things can happen.<br>
&gt;&gt; &gt; I will run the tests locally to see if I see something wrong.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Cheers<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Wed, Nov 16, 2011 at 5:46 PM, Mark Proctor &lt;<a href="mailto:mproctor@codehaus.org">mproctor@codehaus.org</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt; We original used classLoader.loadClass but then there was wierd bug<br>
&gt;&gt; &gt;&gt; with<br>
&gt;&gt; &gt;&gt; dynamic rules that wouldn&#39;t work, related to arrays. Switching to<br>
&gt;&gt; &gt;&gt; Class.forName avoided that bug. But I don&#39;t remember the exact details,<br>
&gt;&gt; &gt;&gt; it<br>
&gt;&gt; &gt;&gt; was several years ago now.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Mark<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Wed, Nov 16, 2011 at 5:50 PM, Mauricio Salatino &lt;<a href="mailto:salaboy@gmail.com">salaboy@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Based on more tests and reading some articles about OSGI we (Professor<br>
&gt;&gt; &gt;&gt;&gt; dotty and I) have found that<br>
&gt;&gt; &gt;&gt;&gt; the composite class loader from drools is using Class.forName that is<br>
&gt;&gt; &gt;&gt;&gt; being intercepted by the equinox OSGI container -&gt;<br>
&gt;&gt; &gt;&gt;&gt; at<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; org.eclipse.core.runtime.internal.adaptor.ContextFinder.loadClass(ContextFinder.java:124)<br>
&gt;&gt; &gt;&gt;&gt; It looks like both are trying to load the same class definition and<br>
&gt;&gt; &gt;&gt;&gt; the JVM throws the ClassCircularityError.<br>
&gt;&gt; &gt;&gt;&gt; For my very basic example changing the CompositeClassLoader<br>
&gt;&gt; &gt;&gt;&gt; implementation to use:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;                             cls = classLoader.loadClass(name);<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; instead of:<br>
&gt;&gt; &gt;&gt;&gt;                             cls = Class.forName( name,<br>
&gt;&gt; &gt;&gt;&gt;                                                  resolve,<br>
&gt;&gt; &gt;&gt;&gt;                                                  classLoader );<br>
&gt;&gt; &gt;&gt;&gt; Fix the problems. But I&#39;m not sure if that will work for all the other<br>
&gt;&gt; &gt;&gt;&gt; cases.<br>
&gt;&gt; &gt;&gt;&gt; Looking the usages of Class.forName inside compiler, core and api I<br>
&gt;&gt; &gt;&gt;&gt; found that it is being used 39 times, which worries me.<br>
&gt;&gt; &gt;&gt;&gt; I&#39;m not planning to change all of them without being sure that is the<br>
&gt;&gt; &gt;&gt;&gt; right way to go.  I will continue reading and testing to see if<br>
&gt;&gt; &gt;&gt;&gt; changing the way of loading the classes is the only alternative.<br>
&gt;&gt; &gt;&gt;&gt; Some notes about the difference between loadClass and forName:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Classloader.loadClass() caches the loaded class object and returns<br>
&gt;&gt; &gt;&gt;&gt; always the same class object<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; This is done by the defining class loader<br>
&gt;&gt; &gt;&gt;&gt; This ensures that each classloader loads the same class only once<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Class.forName() calls the normal classloader hierarchy to load the<br>
&gt;&gt; &gt;&gt;&gt; class (same happens as above)<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; But caches the class object within the initiating class loader<br>
&gt;&gt; &gt;&gt;&gt; In standard cases no problem but can be tricky in dynamic environments<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Source<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; -&gt; <a href="http://www.martinlippert.org/events/WJAX2008-ClassloadingTypeVisibilityOSGi.pdf" target="_blank">http://www.martinlippert.org/events/WJAX2008-ClassloadingTypeVisibilityOSGi.pdf</a><br>

&gt;&gt; &gt;&gt;&gt; On Tue, Nov 15, 2011 at 4:04 PM, Davide Sottara &lt;<a href="mailto:dsotty@gmail.com">dsotty@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; Lovely exception...<br>
&gt;&gt; &gt;&gt;&gt; &gt; Well, both my life and salaboy&#39;s depend on solving this issue...<br>
&gt;&gt; &gt;&gt;&gt; &gt; Mark<br>
&gt;&gt; &gt;&gt;&gt; &gt; and I<br>
&gt;&gt; &gt;&gt;&gt; &gt; were also considering to review the Composite ClassLoader at some<br>
&gt;&gt; &gt;&gt;&gt; &gt; point<br>
&gt;&gt; &gt;&gt;&gt; &gt; in<br>
&gt;&gt; &gt;&gt;&gt; &gt; the future, since it causes issues with (re)declared types in DRLs<br>
&gt;&gt; &gt;&gt;&gt; &gt; loaded at<br>
&gt;&gt; &gt;&gt;&gt; &gt; runtime. Looks like we&#39;ll have to catch two birds with one stone :)<br>
&gt;&gt; &gt;&gt;&gt; &gt; Salaboy, can you share the simple service and the WSO2 config<br>
&gt;&gt; &gt;&gt;&gt; &gt; details?<br>
&gt;&gt; &gt;&gt;&gt; &gt; (version, any custom setting, etc...)<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt;&gt; &gt; View this message in context:<br>
&gt;&gt; &gt;&gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt;&gt; &gt; <a href="http://drools.46999.n3.nabble.com/rules-users-class-loading-problems-with-5-3-0-Final-and-5-4-0-SNAPSHOT-tp3509949p3510640.html" target="_blank">http://drools.46999.n3.nabble.com/rules-users-class-loading-problems-with-5-3-0-Final-and-5-4-0-SNAPSHOT-tp3509949p3510640.html</a><br>

&gt;&gt; &gt;&gt;&gt; &gt; Sent from the Drools: User forum mailing list archive at Nabble.com.<br>
&gt;&gt; &gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; &gt; rules-users mailing list<br>
&gt;&gt; &gt;&gt;&gt; &gt; <a href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt;&gt; &gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-users</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt;  - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a><br>
&gt;&gt; &gt;&gt;&gt;  - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><br>
&gt;&gt; &gt;&gt;&gt;  - Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
&gt;&gt; &gt;&gt;&gt;  - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;  - Salatino &quot;Salaboy&quot; Mauricio -<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; --<br>
&gt;&gt; &gt;&gt;&gt;  - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a><br>
&gt;&gt; &gt;&gt;&gt;  - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><br>
&gt;&gt; &gt;&gt;&gt;  - Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
&gt;&gt; &gt;&gt;&gt;  - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;  - Salatino &quot;Salaboy&quot; Mauricio -<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt;&gt; rules-dev mailing list<br>
&gt;&gt; &gt;&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; rules-dev mailing list<br>
&gt;&gt; &gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;&gt; &gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; --<br>
&gt;&gt; &gt;  - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a><br>
&gt;&gt; &gt;  - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><br>
&gt;&gt; &gt;  - Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
&gt;&gt; &gt;  - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;  - Salatino &quot;Salaboy&quot; Mauricio -<br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt;  - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a><br>
&gt;&gt;  - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><br>
&gt;&gt;  - Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
&gt;&gt;  - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
&gt;&gt;<br>
&gt;&gt;  - Salatino &quot;Salaboy&quot; Mauricio -<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; rules-dev mailing list<br>
&gt;&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-dev mailing list<br>
&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
&gt;<br>
<br>
<br>
<br>
--<br>
 - CTO @ <a href="http://www.plugtree.com" target="_blank">http://www.plugtree.com</a><br>
 - MyJourney @ <a href="http://salaboy.wordpress.com" target="_blank">http://salaboy.wordpress.com</a><br>
 - Co-Founder @ <a href="http://www.jugargentina.org" target="_blank">http://www.jugargentina.org</a><br>
 - Co-Founder @ <a href="http://www.jbug.com.ar" target="_blank">http://www.jbug.com.ar</a><br>
<br>
 - Salatino &quot;Salaboy&quot; Mauricio -<br>
<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div></div></blockquote></div><br>