Hope this was somewhat clear.

it was, and educative too.

thanks,
Emmanuel

On 5/1/06, Geert Bevin <[EMAIL PROTECTED]> wrote:
Hi Emmanuel,

here's a brief overview of what is happening.

RIFE does one 'nasty' trick in its classloader that doesn't respect
the standard contract for classloaders. Normally, a classloader is
supposed to first delegate the loading of classes to the parent
classloader (which is this case is the web application's servlet
classloader). However, if RIFE does this, it would not be able to
load any of the web application's classes, since the parent
classloader is able to load them all.

So what RIFE does is artificially trying to determine which classes
and jars are part of the web application alone. It does this by
looking up their resources and checking for the presence of "WEB-
INF". Sadly I wasn't able to find a standard way that allows you to
do this, but this seems to work fine. At that point, all the web app
classes can be automatically instrumented at load time for
continuations and meta data merging.

This problem arises when you have classes in your web applications
that are loaded by other frameworks or libraries (Log4J for example)
outside the scope of RIFE's filter or servlet. If these are accessed
form within the RIFE application, RIFE has to check if the parent
classloader hasn't already loaded them, since loading them twice
would result into errors. This method works fine unless you have
package-private classes that are not loaded outside the RIFE filter,
but that are accessed by classes that are already loaded from within
the RIFE filter. These package-private classes will not be loaded by
the parent classloader, but they will be loaded by RIFE's instead,
creating permission exceptions.

I've tried to find ways around this while still maintaining the ease-
of-use of RIFE's setup, but there's no strategy that I can come up
with that allows solving this problem without extensive (and
expensive) tracking of where the loaded classes belong. This would
have a profound impact on performance.

So the best solution is to move these libraries outside of WEB-INF,
into the standard library of the servlet container. As far as RIFE is
concerned, these are then outside the web application and will not be
loaded by the RIFE classloader.

The best solution now, is to wait a while for Mustang to come out and
in the meantime develop a collection of instrumentation agents and
get rid of the classloader. These agents need to be setup manually in
1.5, but in 1.6 there's a mechanism for them to be automatically and
dynamically added at runtime. The agent does exactly what the
classloader does, change the bytecode for additional functionalities.
However, this will not fully replace RIFE's classloader, since there
are some tricks in there for reloading element implementations, even
if hotswap can'.

Hope this was somewhat clear.

Best regards,

Geert

On 01 May 2006, at 03:03, Emmanuel Okyere wrote:

> not that i'm experiencing this, but yes, pls post the specifics.
>
> thanks,
> eokyere
>
> On 4/12/06, Eddy Young <[EMAIL PROTECTED]> wrote:
>> Eddy Young wrote:
>> > Hi all,
>> >
>> > Is there a known classloader-related error between RIFE and Log4J?
>>
>> Indeed, there was a classloader-related problem between RIFE and
>> Log4j,
>> as Geert managed to track down. But, it is debatable whether the
>> fault
>> can be attributed to RIFE at all. If you want to know the specifics,
>> please ask. We can then post a detailed analysis which might even be
>> useful to troubleshoot similar problems in your applications.
>>
>> In short, the solution is to move Log4J jar-files from WEB-INF/lib
>> into
>> common/lib of the servlet container *and* restart the container.
>>
>> Eddy
>> --
>> http://coding.mu
>> http://priscimon.com/blog
>> _______________________________________________
>> Rife-users mailing list
>> [email protected]
>> http://lists.uwyn.com/mailman/listinfo/rife-users
>>
>
>
> --
> Johann Wolfgang von Goethe - "Character develops itself in the
> stream of life."
> _______________________________________________
> Rife-users mailing list
> [email protected]
> http://lists.uwyn.com/mailman/listinfo/rife-users
>

--
Geert Bevin             Uwyn bvba               GTalk: [EMAIL PROTECTED]
"Use what you need"     Avenue de Scailmont 34  Skype: gbevin
http://www.uwyn.com     7170 Manage, Belgium      AIM: geertbevin
gbevin at uwyn dot com  Tel: +32 64 84 80 03   Mobile: +32 477 302 599

PGP Fingerprint : 4E21 6399 CD9E A384 6619  719A C8F4 D40D 309F D6A9
Public PGP key  : available at servers pgp.mit.edu, wwwkeys.pgp.net


_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users



--
Benjamin Disraeli - "Nurture your minds with great thoughts. To
believe in the heroic makes heroes."
_______________________________________________
Rife-users mailing list
[email protected]
http://lists.uwyn.com/mailman/listinfo/rife-users

Reply via email to