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
>
_______________________________________________
rules-dev mailing list
rules-dev(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-dev