logging-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mattsic...@apache.org
Subject svn commit: r1611991 - /logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
Date Sun, 20 Jul 2014 01:44:46 GMT
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;
+        }
+    }
+}



Mime
View raw message