Because we could change the value of "Thread.currentThread(). getContextClassLoader()" by "Thread.currentThread().setContextClassLoader( classLoader)". But we couldn't change the value of "this.getClass().getClassLoader()". Maybe a little confused, TCCL is more flexible than the class's CL.
On Thu, Mar 20, 2014 at 2:43 PM, Amit Sela <[email protected]> wrote: > I understand that. But why ? Why prefer the TCCL over the class's CL ? > On Mar 20, 2014 3:00 AM, "haosdent" <[email protected]> wrote: > > > Sometimes we would use "Thread.currentThread().setContextClassLoader( > > classLoader);" to specify classloader. So > > "Thread.currentThread().getContextClassLoader();" > > should be the first choice. > > > > > > On Thu, Mar 20, 2014 at 1:53 AM, Amit Sela <[email protected]> wrote: > > > > > Hi all, > > > I'm running with Hadoop 1.0.4 and HBase 0.94.12 bundled (OSGi) > versions I > > > built. > > > Most issues I encountered are related to class loaders. > > > > > > One of the patterns I noticed in both projects is: > > > > > > ClassLoader cl = Thread.currentThread().getContextClassLoader(); > > > if(cl == null) { > > > cl = Clazz.class.getClassLoader(); > > > } > > > > > > Where Clazz is the Class containing this code. > > > > > > I was wondering about this choice... Why not go the other way around: > > > > > > ClassLoader cl = Clazz.class.getClassLoader(); > > > if(cl == null) { > > > cl = Thread.currentThread().getContextClassLoader(); > > > } > > > > > > And in a more general note, why not always use Configuration (and let > > it's > > > cl be this.getClass().getClassLoader()) to load classes ? > > > > > > That would surely help in integration with modularity frameworks. > > > > > > Thanks, > > > Amit. > > > > > > > > > > > -- > > Best Regards, > > Haosdent Huang > > > -- Best Regards, Haosdent Huang
