Should I still upload the patches here, I was just going to in a few
minutes, actaully?


> -----Original Message-----
> From: Scott Sanders [mailto:[EMAIL PROTECTED]]
> Sent: May 1, 2001 10:38 PM
> To: [EMAIL PROTECTED]
> Subject: Re: Bad classloading in Digester
> 
> 
> Done in Digester in commons.  Thanks for the heads up Colin.
> 
> Scott
> 
> Craig R. McClanahan wrote:
> 
> > 
> > On Tue, 1 May 2001, Scott Sanders wrote:
> > 
> > 
> >> I can apply the patch to the code in 
> jakarta-commons-sandbox as well.
> >> 
> >> I would assume that a dependency on JDK 1.2 is not a 
> problem.  Someone 
> >> will speak up if it is not.
> >> 
> > 
> > 
> > No, it's not a problem.  Struts requires 1.2 or later.
> > 
> > 
> >> Scott
> >> 
> > 
> > 
> > Cragi
> > 
> > 
> > 
> >> Colin Sampaleanu wrote:
> >> 
> >> 
> >>> There was never any reply to this message (below) I sent 
> a few months ago
> >>> about a problem with the method used by the Digestor for 
> class loading.
> >>> 
> >>> In a number of places, it uses the old style
> >>>   class.forName(name);
> >>> instead of the proper
> >>>   Thread.getCurrentThread.getContextClassLoader.loadClass(name);
> >>> 
> >>> The second form is _much_ preferred to the first, because 
> the first will
> >>> potentially fail in any situation where there are 
> multiple classloaders (one
> >>> owning the other), and the Digester is used in code loaded by both
> >>> classloaders (please see my original message for more details).
> >>> 
> >>> This kind of situation is very common any time you have 
> something like a
> >>> server (web, etc.) with containers in it, each container 
> having its own
> >>> classloader associated with it in order to handle code 
> visibility and
> >>> versioning. Using the digester in this situation is not 
> possible without
> >>> modifying the code to use the second form.
> >>> 
> >>> I am quite willing and able to upload patches to 4 
> digester files to fix
> >>> this, assuming they will be checked in by somebody. The 
> only implication is
> >>> that the code will no longer run under JDK 1.1, but 
> Struts already needs 1.2
> >>> in any case...
> >>> 
> >>> For more details on classloading issues in Java, here are 
> a couple of
> >>> excellent white papers:
> >>> Understanclind Class.forName();
> >>> http://www.develop.com/downloads/DynLoad.zip
> >>> Exploiting the Java Virtual Machine:
> >>> http://www.develop.com/downloads/DevWPJav.pdf
> >>> 
> >>> 
> >>> 
> >>> 
> >>> 
> >>>> -----Original Message-----
> >>>> From: Colin Sampaleanu [mailto:[EMAIL PROTECTED]]
> >>>> Sent: February 22, 2001 10:06 PM
> >>>> To: '[EMAIL PROTECTED]'
> >>>> Subject: ClassLoader used in Digester
> >>>> 
> >>>> 
> >>>> We are currently using the digester in a server we build that 
> >>>> uses custom
> >>>> classloaders for some containers within it, which load 
> custom apps.
> >>>> 
> >>>> We use the Digester in the server itself, and some of the 
> >>>> apps being loaded
> >>>> in the containers also want to use the Digester. The problem 
> >>>> is that when an
> >>>> app creates a Digester instance, it is created by the 
> parent (system)
> >>>> classloader that loaded the server, since the server had 
> >>>> already used the
> >>>> Digester and that classloader knows about it. When the 
> >>>> Digester then does a
> >>>> Class.forName in one of its rules to create an object, it 
> >>>> knows nothing
> >>>> about the container's ClassLoader and the classes within it. 
> >>>> The class is
> >>>> only withing the app, and so can't be found.
> >>>> 
> >>>> Is there any downside to changing the Digester to always use:
> >>>>   Thread.getCurrentThread.getContextClassLoader.loadClass(name);
> >>>> instead of 
> >>>>   class.forName(name);
> >>>> 
> >>>> The code would no longer work in JDK 1.1, but that is already 
> >>>> the case...
> >>>> 
> >>> 
> >> 
> >> 
> 
> 

Reply via email to