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:27:36 GMT
No problem! I agree completely with what you said about adding to the API,
though. :)


On 19 July 2014 21:21, Remko Popma <remko.popma@gmail.com> wrote:

> 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 <boards@gmail.com> 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 <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>
>>
>
>


-- 
Matt Sicker <boards@gmail.com>

Mime
View raw message