we have jira, create one there.
The idea with the cache is to avoid duplicating getter generation, in
normal environments this is fine and preferred - with class code
generation for facts this is a problem. After 4.0 we can look into
having the cache scoped depending on your use case.
Mark
Aaron Dixon wrote:
This is exactly right. My only question is why the internal Drools
cache isn't scoped to the RuleBase or the session -- why is it scoped
to the VM...is it a static cache? If time permits I can try to look
into this, not sure how soon I could get to it , though. Is there an
issue in your bug tracking system for this?
On 7/14/07, Mark Proctor <mproctor(a)codehaus.org> wrote:
>
> I think this is related to this:
> FooClassLoader loader1 = new FooClassLoader(original);
> Class instance1 = loader1.loadClass(
> "test.drools.classloader.Foo"
> );
> FooClassLoader loader2 = new FooClassLoader(original);
> Class instance2 = loader2.loadClass(
> "test.drools.classloader.Foo"
> );
> System.out.println( instance1.isAssignableFrom( instance2 ) );
>
> 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 :)
>
> Mark
>
> Aaron Dixon wrote:
> Here you go. It's an eclipse project. Only dependencies are the Drools
> 4 deps. You'll see clearly in .classpath -- Run "Driver". Let me know
> if you have problems.
>
> On 7/13/07, Mark Proctor <mproctor(a)codehaus.org> wrote:
>
> can you make an integration test for us? As we'll need to be easily able
> to reproduce this. We'll add it to our code base and fix. We'll
> probably
> add it as aprt of the MiscTest class:
>
http://anonsvn.labs.jboss.com/labs/jbossrules/trunk/drools-compiler/src/t...
>
>
>
> Aaron Dixon wrote:
> > I am trying to sequentially perform two rules executions using two
> > different classloaders in the same VM. I create completely new state
> > for each execution, yet I still fail on the second execution. I
> > believe this has to do with some internal static cached state that
> > JBossRules is maintaining. A snippet of the code and exeception are
> > shown in this email.
> >
> > public void demo() throws Exception {
> > // Save original classloader
> > ClassLoader original =
> > Thread.currentThread().getContextClassLoader();
> >
> > // Create Classloader 1 with parent of original
> > FooClassLoader loader1 = new FooClassLoader(original);
> >
> Thread.currentThread().setContextClassLoader(loader1);
> > testRules();
> >
> > // Success so far...
> >
> > // Create Classloader 2 with parent of original
> > FooClassLoader loader2 = new FooClassLoader(original);
> >
> Thread.currentThread().setContextClassLoader(loader2);
> > testRules();
> >
> > // Never make it to here.
> >
> > // Restore
> >
> Thread.currentThread().setContextClassLoader(original);
> > }
> >
> > private void testRules() throws Exception {
> > PackageBuilder builder = new PackageBuilder();
> > Package pkg = buildPackage(new String[] { "Foo.drl" },
> builder);
> > RuleBase base = RuleBaseFactory.newRuleBase();
> > base.addPackage(pkg);
> > StatelessSession session = base.newStatelessSession();
> > final ClassLoader loader =
> > Thread.currentThread().getContextClassLoader();
> > Object inst = loader.loadClass("com.foo.Foo").newInstance();
> > session.execute(new Object[] { inst });
> > }
> >
> >
> >
> > Exception in thread "main" java.lang.ClassCastException:
> >
> adixon.prototype.rules.classloader.demo.copy.FooShadowProxy
> > at
> >
>
org.drools.base.adixon.prototype.rules.classloader.demo.copy.Foo$getName.getValue(Unknown
>
> >
> > Source)
> > at
> >
> org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:94)
>
> > at
> >
>
org.drools.base.evaluators.StringFactory$StringEqualEvaluator.evaluate(StringFactory.java:85)
>
> >
> > at
> >
> org.drools.rule.LiteralRestriction.isAllowed(LiteralRestriction.java:61)
> > at
> >
> org.drools.rule.LiteralConstraint.isAllowed(LiteralConstraint.java:82)
> > at
> org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:121)
> > at
> >
>
org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:20)
>
> >
> > at
> >
> org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:159)
> > at
> org.drools.reteoo.Rete.assertObject(Rete.java:175)
> > at
> >
> org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:190)
> > at
> >
> org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:70)
>
> >
> > at
> >
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:772)
>
> >
> > at
> >
> org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:584)
>
> >
> > at
> >
> org.drools.reteoo.ReteooStatelessSession.execute(ReteooStatelessSession.java:63)
>
> >
> > at
> >
> adixon.prototype.rules.classloader.demo.copy.Driver.testRules(Driver.java:47)
>
> >
> > at
> >
> adixon.prototype.rules.classloader.demo.copy.Driver.go(Driver.java:33)
> > at
> >
> adixon.prototype.rules.classloader.demo.copy.Driver.main(Driver.java:17)
> > _______________________________________________
> > rules-dev mailing list
> > rules-dev(a)lists.jboss.org
> >
https://lists.jboss.org/mailman/listinfo/rules-dev
> >
>
> _______________________________________________
> rules-dev mailing list
> rules-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-dev
>
> ________________________________
>
> _______________________________________________
> rules-dev mailing list
> rules-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
>
> _______________________________________________
> rules-dev mailing list
> rules-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-dev
>
>
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev