logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <boa...@gmail.com>
Subject Re: svn commit: r1611991 - /logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
Date Sun, 20 Jul 2014 02:18:00 GMT
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 <remko.popma@gmail.com> 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, <mattsicker@apache.org> 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 <boards@gmail.com>

Mime
View raw message