<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
I think this is related to&nbsp; this:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FooClassLoader loader1 = new FooClassLoader(original);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class instance1 = loader1.loadClass(
"test.drools.classloader.Foo" );<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FooClassLoader loader2 = new FooClassLoader(original);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Class instance2 = loader2.loadClass(
"test.drools.classloader.Foo" );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println( instance1.isAssignableFrom( instance2 ) );<br>
<br>
Notice the instances are not assignable. We generate bytecode field
readers, and cache them by string name. Now I imagine the second
instance is using that same cache with the code generated off the first
classloader, and thus providing the error. I'm not sure how to fix
this.... expect it's a point release fix now - patch welcome :)<br>
<br>
Mark<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>
Aaron Dixon wrote:
<blockquote
 cite="mid:5b1018900707131525v1948db90id5ad152231e79469@mail.gmail.com"
 type="cite">Here you go. It's an eclipse project. Only dependencies
are the Drools
  <br>
4 deps. You'll see clearly in .classpath -- Run "Driver". Let me know
  <br>
if you have problems.
  <br>
  <br>
On 7/13/07, Mark Proctor <a class="moz-txt-link-rfc2396E" href="mailto:mproctor@codehaus.org">&lt;mproctor@codehaus.org&gt;</a> wrote:
  <br>
  <blockquote type="cite">can you make an integration test for us? As
we'll need to be easily able
    <br>
to reproduce this. We'll add it to our code base and fix. We'll
probably
    <br>
add it as aprt of the MiscTest class:
    <br>
<a class="moz-txt-link-freetext" href="http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java">http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java</a>
    <br>
    <br>
    <br>
Aaron Dixon wrote:
    <br>
&gt; I am trying to sequentially perform two rules executions using two
    <br>
&gt; different classloaders in the same VM. I create completely new
state
    <br>
&gt; for each execution, yet I still fail on the second execution. I
    <br>
&gt; believe this has to do with some internal static cached state that
    <br>
&gt; JBossRules is maintaining. A snippet of the code and exeception
are
    <br>
&gt; shown in this email.
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp; public void demo() throws Exception {
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Save original classloader
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ClassLoader original =
    <br>
&gt; Thread.currentThread().getContextClassLoader();
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create Classloader 1 with parent of original
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FooClassLoader loader1 = new FooClassLoader(original);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.currentThread().setContextClassLoader(loader1);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testRules();
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Success so far...
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create Classloader 2 with parent of original
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FooClassLoader loader2 = new FooClassLoader(original);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.currentThread().setContextClassLoader(loader2);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testRules();
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Never make it to here.
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Restore
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Thread.currentThread().setContextClassLoader(original);
    <br>
&gt;&nbsp;&nbsp;&nbsp; }
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp; private void testRules() throws Exception {
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PackageBuilder builder = new PackageBuilder();
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Package pkg = buildPackage(new String[] { "Foo.drl" },
builder);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RuleBase base = RuleBaseFactory.newRuleBase();
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; base.addPackage(pkg);
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; StatelessSession session = base.newStatelessSession();
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final ClassLoader loader =
    <br>
&gt; Thread.currentThread().getContextClassLoader();
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object inst =
loader.loadClass("com.foo.Foo").newInstance();
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; session.execute(new Object[] { inst });
    <br>
&gt;&nbsp;&nbsp;&nbsp; }
    <br>
&gt;
    <br>
&gt;
    <br>
&gt;
    <br>
&gt; Exception in thread "main" java.lang.ClassCastException:
    <br>
&gt; adixon.prototype.rules.classloader.demo.copy.FooShadowProxy
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.base.adixon.prototype.rules.classloader.demo.copy.Foo$getName.getValue(Unknown
    <br>
&gt;
    <br>
&gt; Source)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:94)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.base.evaluators.StringFactory$StringEqualEvaluator.evaluate(StringFactory.java:85)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:61)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:82)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:121)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:20)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:159)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at org.drools.reteoo.Rete.assertObject(Rete.java:175)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:190)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:70)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:772)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:584)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:63)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
adixon.prototype.rules.classloader.demo.copy.Driver.testRules(Driver.java:47)
    <br>
&gt;
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
adixon.prototype.rules.classloader.demo.copy.Driver.go(Driver.java:33)
    <br>
&gt;&nbsp;&nbsp;&nbsp;&nbsp; at
    <br>
&gt;
adixon.prototype.rules.classloader.demo.copy.Driver.main(Driver.java:17)
    <br>
&gt; _______________________________________________
    <br>
&gt; rules-dev mailing list
    <br>
&gt; <a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
    <br>
&gt; <a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
    <br>
&gt;
    <br>
    <br>
_______________________________________________
    <br>
rules-dev mailing list
    <br>
<a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
    <br>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
    <br>
    <br>
  </blockquote>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
rules-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a>
<a class="moz-txt-link-freetext" href="https://lists.jboss.org/mailman/listinfo/rules-dev">https://lists.jboss.org/mailman/listinfo/rules-dev</a>
  </pre>
</blockquote>
<br>
</body>
</html>