logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gary Gregory <garydgreg...@gmail.com>
Subject Fwd: [2/4] git commit: Migrate more methods from Loader to LoaderUtil.
Date Tue, 02 Sep 2014 15:32:17 GMT
WRT:


+    public static final String IGNORE_TCCL_PROPERTY = "log4j.ignoreTCL";

Should this be:


+    public static final String IGNORE_TCCL_PROPERTY = "log4j.ignoreTCCL";

?

Gary

---------- Forwarded message ----------
From: <mattsicker@apache.org>
Date: Tue, Sep 2, 2014 at 12:23 AM
Subject: [2/4] git commit: Migrate more methods from Loader to LoaderUtil.
To: commits@logging.apache.org


Migrate more methods from Loader to LoaderUtil.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit:
http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/2a962372
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/2a962372
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/2a962372

Branch: refs/heads/LOG4J2-608
Commit: 2a96237253823285c90f0c97e4ea4070c6522117
Parents: 77be263
Author: Matt Sicker <mattsicker@apache.org>
Authored: Mon Sep 1 22:40:29 2014 -0500
Committer: Matt Sicker <mattsicker@apache.org>
Committed: Mon Sep 1 22:40:29 2014 -0500

----------------------------------------------------------------------
 .../apache/logging/log4j/util/LoaderUtil.java   | 68 ++++++++++++++++++++
 .../apache/logging/log4j/core/util/Loader.java  | 37 +----------
 2 files changed, 71 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a962372/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
----------------------------------------------------------------------
diff --git
a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
index 32b23c4..0771054 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/LoaderUtil.java
@@ -16,6 +16,7 @@
  */
 package org.apache.logging.log4j.util;

+import java.lang.reflect.InvocationTargetException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;

@@ -28,6 +29,10 @@ import java.security.PrivilegedAction;
 public final class LoaderUtil {
     private LoaderUtil() {}

+    public static final String IGNORE_TCCL_PROPERTY = "log4j.ignoreTCL";
+
+    private static final boolean IGNORE_TCCL;
+
     private static final PrivilegedAction<ClassLoader> TCCL_GETTER = new
ThreadContextClassLoaderGetter();

     static {
@@ -35,6 +40,8 @@ public final class LoaderUtil {
         if (sm != null) {
             sm.checkPermission(new RuntimePermission("getClassLoader"));
         }
+        final String ignoreTccl =
PropertiesUtil.getProperties().getStringProperty(IGNORE_TCCL_PROPERTY,
null);
+        IGNORE_TCCL = ignoreTccl != null &&
!"false".equalsIgnoreCase(ignoreTccl.trim());
     }

     /**
@@ -56,4 +63,65 @@ public final class LoaderUtil {
             return cl == null ? ClassLoader.getSystemClassLoader() : cl;
         }
     }
+
+    /**
+     * Loads a class by name. This method respects the {@link
#IGNORE_TCCL_PROPERTY} Log4j property. If this property
+     * is specified and set to anything besides {@code false}, then the
default ClassLoader will be used.
+     *
+     * @param className The class name.
+     * @return the Class for the given name.
+     * @throws ClassNotFoundException if the specified class name could
not be found
+     */
+    public static Class<?> loadClass(final String className) throws
ClassNotFoundException {
+        if (IGNORE_TCCL) {
+            return Class.forName(className);
+        }
+        try {
+            return getThreadContextClassLoader().loadClass(className);
+        } catch (final Throwable e) {
+            return Class.forName(className);
+        }
+    }
+
+    /**
+     * Loads and instantiates a Class using the default constructor.
+     *
+     * @param className The class name.
+     * @return new instance of the class.
+     * @throws ClassNotFoundException    if the class isn't available to
the usual ClassLoaders
+     * @throws IllegalAccessException    if the class can't be
instantiated through a public constructor
+     * @throws InstantiationException    if there was an exception whilst
instantiating the class
+     * @throws NoSuchMethodException     if there isn't a no-args
constructor on the class
+     * @throws InvocationTargetException if there was an exception whilst
constructing the class
+     */
+    public static Object newInstanceOf(final String className)
+        throws ClassNotFoundException, IllegalAccessException,
InstantiationException, NoSuchMethodException,
+        InvocationTargetException {
+        final Class<?> clazz = loadClass(className);
+        try {
+            return clazz.getConstructor().newInstance();
+        } catch (final NoSuchMethodException e) {
+            return clazz.newInstance();
+        }
+    }
+
+    /**
+     * Loads and instantiates a derived class using its default
constructor.
+     *
+     * @param className The class name.
+     * @param clazz The class to cast it to.
+     * @param <T> The type of the class to check.
+     * @return new instance of the class cast to {@code T}
+     * @throws ClassNotFoundException if the class isn't available to the
usual ClassLoaders
+     * @throws IllegalAccessException if the class can't be instantiated
through a public constructor
+     * @throws InstantiationException if there was an exception whilst
instantiating the class
+     * @throws NoSuchMethodException if there isn't a no-args constructor
on the class
+     * @throws InvocationTargetException if there was an exception whilst
constructing the class
+     * @throws ClassCastException if the constructed object isn't type
compatible with {@code T}
+     */
+    public static <T> T newCheckedInstanceOf(final String className, final
Class<T> clazz)
+        throws ClassNotFoundException, NoSuchMethodException,
InvocationTargetException, InstantiationException,
+        IllegalAccessException {
+        return clazz.cast(newInstanceOf(className));
+    }
 }

http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/2a962372/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
----------------------------------------------------------------------
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
index 2fa70bb..9858d4e 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/Loader.java
@@ -25,24 +25,17 @@ import java.net.URL;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.status.StatusLogger;
 import org.apache.logging.log4j.util.LoaderUtil;
-import org.apache.logging.log4j.util.PropertiesUtil;

 /**
  * Load resources (or images) from various sources.
  */
 public final class Loader {

-    private static boolean ignoreTCL = false;
-
     private static final Logger LOGGER = StatusLogger.getLogger();

     private static final String TSTR = "Caught Exception while in
Loader.getResource. This may be innocuous.";

     static {
-        final String ignoreTCLProp =
PropertiesUtil.getProperties().getStringProperty("log4j.ignoreTCL", null);
-        if (ignoreTCLProp != null) {
-            ignoreTCL = OptionConverter.toBoolean(ignoreTCLProp, true);
-        }
         final SecurityManager sm = System.getSecurityManager();
         if (sm != null) {
             sm.checkPermission(new RuntimePermission("getStackTrace"));
@@ -55,7 +48,6 @@ public final class Loader {
      * @return the ClassLoader.
      */
     public static ClassLoader getClassLoader() {
-
         return getClassLoader(Loader.class, null);
     }

@@ -248,23 +240,7 @@ public final class Loader {
      * @throws ClassNotFoundException if the Class could not be found.
      */
     public static Class<?> loadClass(final String className) throws
ClassNotFoundException {
-        // Just call Class.forName(className) if we are instructed to
ignore the TCL.
-        if (ignoreTCL) {
-            LOGGER.trace("Ignoring TCCL. Trying Class.forName({}).",
className);
-            return loadClassWithDefaultClassLoader(className);
-        }
-        try {
-            LOGGER.trace("Trying TCCL for class {}.", className);
-            // using the TCCL should work the same as the default
ClassLoader (i.e., init or not)
-            return Class.forName(className, true, getTcl());
-        } catch (final Throwable e) {
-            LOGGER.trace("TCCL didn't work for class {}: {}.", className,
e.toString());
-            return loadClassWithDefaultClassLoader(className);
-        }
-    }
-
-    private static Class<?> loadClassWithDefaultClassLoader(final String
className) throws ClassNotFoundException {
-        return Class.forName(className);
+        return LoaderUtil.loadClass(className);
     }

     /**
@@ -314,14 +290,7 @@ public final class Loader {
                    InstantiationException,
                    NoSuchMethodException,
                    InvocationTargetException {
-        final Class<?> clazz = loadClass(className);
-        try {
-            return clazz.getConstructor().newInstance();
-        } catch (final NoSuchMethodException e) {
-            // try the default-default constructor
-            //noinspection ClassNewInstance
-            return clazz.newInstance();
-        }
+        return LoaderUtil.newInstanceOf(className);
     }

     /**
@@ -344,7 +313,7 @@ public final class Loader {
                    IllegalAccessException,
                    InvocationTargetException,
                    InstantiationException {
-        return clazz.cast(newInstanceOf(className));
+        return LoaderUtil.newCheckedInstanceOf(className, clazz);
     }

     /**




-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Mime
View raw message