Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!eternal-september.org!feeder.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Eric Sosman Newsgroups: comp.lang.java.programmer Subject: Re: dealing with ClassLoaders... Date: Fri, 01 Aug 2014 17:32:40 -0400 Organization: A noiseless patient Spider Lines: 46 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Fri, 1 Aug 2014 21:32:44 +0000 (UTC) Injection-Info: mx05.eternal-september.org; posting-host="bd4e1cba8d8592bec5d5ed9e4537fbfd"; logging-data="15194"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX194wTaFANb3/v/MSZ1CasvX" User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.0 In-Reply-To: Cancel-Lock: sha1:Sdi2gWhtOidAKpx7ke1iDR4s/oA= Xref: csiph.com comp.lang.java.programmer:29498 On 8/1/2014 5:10 PM, Andreas Leitgeb wrote: > Andreas Leitgeb wrote: >> Martin Gregorie wrote: >>> public class MAClassLoader extends ClassLoader >>> { >> [ no snip ] >>> } >>> I hope this is useful info. > > On further examination, I think it isn't as simple as that. > Essentially, this "empty" ClassLoader-subclass would pass > everything through to the parent classloader (or the pre- > mordial one, absent a parent) and thus not be associated to > any of the classes loaded through it, thus provide no > isolation at all. That conclusion may be worth re-examining. Just because MAClassLoader is a subclass of ClassLoader and uses methods of the latter to do all its dirty work, it doesn't mean the classes aren't loaded by MAClassLoader. I'd suggest a quick experiment: Load a class with MAClassLoader, instantiate an instance thereof, and see what inst.getClass().getClassLoader() says. It must be admitted, though, that ClassLoader is a bit weird. An abstract class all of whose methods are concrete? Bizarre ... FWIW, I have successfully used private static class Loader extends ClassLoader { private Class load(byte[] classFile) { Class clown = defineClass( null, classFile, 0, classFile.length); resolveClass(clown); return clown; } } ... to load many distinct classes with identical package and class names, which suggests there's at least some degree of isolation present even though all the actual work is done by ClassLoader itself. -- esosman@comcast-dot-net.invalid