Ah, I did not see that ProviderUtil was already in log4j-api. My mistake, please ignore my message.
On Sun, Jul 20, 2014 at 11:18 AM, Matt Sicker <[email protected]> wrote: > Well, this is a pretty trivial utility class that extracts the > ProviderUtil.findClassLoader() method into a more appropriately named > method. Also, it does proper security checks. :) > > > On 19 July 2014 21:02, Remko Popma <[email protected]> wrote: > >> Matt, >> Does this have to be in log4j-api? >> Can we keep this in core until we are sure this is the way to go, and >> _then_ consider moving this class to api? >> The thing is, adding to log4j-api is easy, but taking it out might break >> other people's code (even if it turned out it did not work well for us)... >> >> >> On Sun, Jul 20, 2014 at 10:44 AM, <[email protected]> wrote: >> >>> Author: mattsicker >>> Date: Sun Jul 20 01:44:45 2014 >>> New Revision: 1611991 >>> >>> URL: http://svn.apache.org/r1611991 >>> Log: >>> Add LoaderUtil class to isolate ClassLoader utility class. >>> >>> - Code based on the Loader class in log4j-core. >>> - Provides the functionality from ProviderUtil.findClassLoader() >>> (which will delegate to this class in an upcoming revision). >>> >>> Added: >>> >>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java >>> >>> Added: >>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java >>> URL: >>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java?rev=1611991&view=auto >>> >>> ============================================================================== >>> --- >>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java >>> (added) >>> +++ >>> logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java >>> Sun Jul 20 01:44:45 2014 >>> @@ -0,0 +1,52 @@ >>> +/* >>> + * Licensed to the Apache Software Foundation (ASF) under one or more >>> + * contributor license agreements. See the NOTICE file distributed with >>> + * this work for additional information regarding copyright ownership. >>> + * The ASF licenses this file to You under the Apache license, Version >>> 2.0 >>> + * (the "License"); you may not use this file except in compliance with >>> + * the License. You may obtain a copy of the License at >>> + * >>> + * http://www.apache.org/licenses/LICENSE-2.0 >>> + * >>> + * Unless required by applicable law or agreed to in writing, software >>> + * distributed under the License is distributed on an "AS IS" BASIS, >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or >>> implied. >>> + * See the license for the specific language governing permissions and >>> + * limitations under the license. >>> + */ >>> +package org.apache.logging.log4j.util; >>> + >>> +import java.security.AccessController; >>> +import java.security.PrivilegedAction; >>> + >>> +/** >>> + * Utility class for ClassLoaders. Consider this class private. >>> + */ >>> +// TODO: migrate any other useful methods from Loader in log4j-core >>> +public final class LoaderUtil { >>> + private LoaderUtil() {} >>> + >>> + private static final PrivilegedAction<ClassLoader> TCCL_GETTER = >>> new ThreadContextClassLoaderGetter(); >>> + >>> + static { >>> + final SecurityManager sm = System.getSecurityManager(); >>> + if (sm != null) { >>> + sm.checkPermission(new RuntimePermission("getClassLoader")); >>> + } >>> + } >>> + >>> + public static ClassLoader getThreadContextClassLoader() { >>> + return System.getSecurityManager() == null >>> + ? TCCL_GETTER.run() >>> + : AccessController.doPrivileged(TCCL_GETTER); >>> + } >>> + >>> + private static class ThreadContextClassLoaderGetter implements >>> PrivilegedAction<ClassLoader> { >>> + @Override >>> + public ClassLoader run() { >>> + final ClassLoader cl = >>> Thread.currentThread().getContextClassLoader(); >>> + // if the TCCL is null, that means we're using the system CL >>> + return cl == null ? ClassLoader.getSystemClassLoader() : cl; >>> + } >>> + } >>> +} >>> >>> >>> >> > > > -- > Matt Sicker <[email protected]> >
