[rules-users] Caching of JBoss Rules bytecode field readers

Mark Proctor mproctor at codehaus.org
Wed Jul 9 10:15:20 EDT 2008


We generate bytecode readers for performance, it would be possible to 
plugin a reflection based reader that would avoid this issue, but we 
don't have plans to this due to time - we would accept a patch. With 
regards to why the String for the key, why not? What other key would you 
imagine we should keep? I guess we could alos look into a classloader 
specific var to hold the cache.

Shows the classes we use to generate field accessors.
http://fisheye.jboss.org/browse/JBossRules/tags/4.0.7.19894.GA/drools-core/src/main/java/org/drools/util/asm

If you do an import of the project into eclipse you can see where those 
classes are used from and maybe come up with a solution - please make 
sure there are no performance loses.

Mark
Keith Bennett wrote:
> I found a link that might explain what is happening with the problem I
> described in another posting (included below):
> http://jira.jboss.com/jira/browse/JBRULES-1009
>
> Mark Proctor, if you read this posting, can you please explain in more
> detail how and why JBoss Rules generates bytecode field readers and
> caches them by string name?  I would appreciate it.  Could this
> explain the issue I'm experiencing as described below?
>
> I have scoured the documentation and have tried many different
> approaches to solving this problem, to no avail.  I absolutely can not
> get the new version of a .drl file to load with just an application
> restart in Tomcat.  I have to restart Tomcat each time.  In my mind,
> this has to be a classloader issue.  I just don't know how to get
> around it.  I would really appreciate any help!
>
> Keith
>
>
> ---------- Forwarded message ----------
> From: Keith Bennett <forthwind at gmail.com>
> Date: Wed, Jul 2, 2008 at 9:47 AM
> Subject: New rules in source file not loaded when application redeployed
> To: Rules Users List <rules-users at lists.jboss.org>
>
>
> I am packaging my rules as a drl source file in a jar that is then
> bundled in a war file that is then deployed to Tomcat. In my
> implementation, the rulebase is cached the first time it is used in my
> application, but when I add new rules to the source file and rebuild
> my application then redeploy it on Tomcat, the new version of the
> rules don't get loaded into the rulebase.
>
> Why and how is an older version of the rules being loaded into the
> rulebase when I redeploy my application in Tomcat?  As FYI, I have
> developed a business rules service that initializes the rulebase upon
> a Spring container startup by loading the drl file from the classpath.
>  Is there an internal Drools static cache that is scoped to something
> other than my application?  The only thing I can do to load the new
> rules is restart Tomcat.  When I do this, the new version of the drl
> source file is loaded and used, so I'm thinking the problem I'm having
> is somehow related to the class loaders Tomcat uses, but I can't find
> information about what Drools might be doing internally with a static
> cache or something like that.
>
> Can anyone explain what might be happening and how to configure Drools
> and/or my application to get around this problem I'm having?  I
> definitely appreciate any help you can provide!
>
> Keith
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>   




More information about the rules-users mailing list