logging-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Sicker <mattsic...@apache.org>
Subject Re: svn commit: r1585244 - /logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
Date Sun, 06 Apr 2014 05:10:05 GMT
Looks like it's due to differences between class names and canonical class
names. This is annoying lol.


On 6 April 2014 00:03, Matt Sicker <mattsicker@apache.org> wrote:

> Oh shit, I broke the build with this one. Looking into it right now.
>
>
> On 5 April 2014 23:59, <mattsicker@apache.org> wrote:
>
>> Author: mattsicker
>> Date: Sun Apr  6 04:59:50 2014
>> New Revision: 1585244
>>
>> URL: http://svn.apache.org/r1585244
>> Log:
>> Fix plugin cache bug when plugin classes are unavailable.
>>
>>   - If a particular cached plugin's class cannot be loaded, then the
>>   entire plugin cache loading would fail! This is undesired, so I've
>>   made the plugin cache loading more robust to errors.
>>   - Rearranged plugin encoding method to help silence static code
>>   analyzer complaints about closing resources properly.
>>
>> Modified:
>>
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
>>
>> Modified:
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
>> URL:
>> http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java?rev=1585244&r1=1585243&r2=1585244&view=diff
>>
>> ==============================================================================
>> ---
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
>> (original)
>> +++
>> logging/log4j/log4j2/trunk/log4j-core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
>> Sun Apr  6 04:59:50 2014
>> @@ -21,6 +21,7 @@ import java.io.BufferedOutputStream;
>>  import java.io.DataInputStream;
>>  import java.io.DataOutputStream;
>>  import java.io.File;
>> +import java.io.FileNotFoundException;
>>  import java.io.FileOutputStream;
>>  import java.io.IOException;
>>  import java.io.InputStream;
>> @@ -208,7 +209,6 @@ public class PluginManager {
>>          LOGGER.debug(sb.toString());
>>      }
>>
>> -    @SuppressWarnings({ "unchecked" })
>>      private static ConcurrentMap<String, ConcurrentMap<String,
>> PluginType<?>>> decode(final ClassLoader classLoader) {
>>          Enumeration<URL> resources;
>>          try {
>> @@ -220,13 +220,17 @@ public class PluginManager {
>>          final ConcurrentMap<String, ConcurrentMap<String,
>> PluginType<?>>> map =
>>              new ConcurrentHashMap<String, ConcurrentMap<String,
>> PluginType<?>>>();
>>          while (resources.hasMoreElements()) {
>> -            DataInputStream dis = null;
>> +            final URL url = resources.nextElement();
>> +            LOGGER.debug("Found Plugin Map at {}", url.toExternalForm());
>> +            InputStream is;
>> +            try {
>> +                is = url.openStream();
>> +            } catch (final IOException e) {
>> +                LOGGER.warn("Unable to open {}", url.toExternalForm(),
>> e);
>> +                continue;
>> +            }
>> +            final DataInputStream dis = new DataInputStream(new
>> BufferedInputStream(is));
>>              try {
>> -                final URL url = resources.nextElement();
>> -                LOGGER.debug("Found Plugin Map at {}",
>> url.toExternalForm());
>> -                final InputStream is = url.openStream();
>> -                final BufferedInputStream bis = new
>> BufferedInputStream(is);
>> -                dis = new DataInputStream(bis);
>>                  final int count = dis.readInt();
>>                  for (int j = 0; j < count; ++j) {
>>                      final String type = dis.readUTF();
>> @@ -241,47 +245,61 @@ public class PluginManager {
>>                          final String name = dis.readUTF();
>>                          final boolean printable = dis.readBoolean();
>>                          final boolean defer = dis.readBoolean();
>> -                        final Class<?> clazz = Class.forName(className);
>> -                        types.put(key, new PluginType(clazz, name,
>> printable, defer));
>> +                        try {
>> +                            final PluginType<?> pluginType =
>> loadPluginType(className, name, printable, defer);
>> +                            types.put(key, pluginType);
>> +                        } catch (final ClassNotFoundException e) {
>> +                            LOGGER.info("Plugin [{}] could not be loaded
>> due to missing classes.", className, e);
>> +                        }
>>                      }
>>                      map.putIfAbsent(type, types);
>>                  }
>> -            } catch (final Exception ex) {
>> +            } catch (final IOException ex) {
>>                  LOGGER.warn("Unable to preload plugins", ex);
>> -                return null;
>>              } finally {
>>                  Closer.closeSilent(dis);
>>              }
>>          }
>> -        return map.size() == 0 ? null : map;
>> +        return map.isEmpty() ? null : map;
>> +    }
>> +
>> +    private static PluginType<?> loadPluginType(final String className,
>> +                                                final String name,
>> +                                                final boolean printable,
>> +                                                final boolean defer)
>> throws ClassNotFoundException {
>> +        final Class<?> clazz = Loader.loadClass(className);
>> +        @SuppressWarnings("unchecked")
>> +        final PluginType<?> pluginType = new PluginType(clazz, name,
>> printable, defer);
>> +        return pluginType;
>>      }
>>
>>      private static void encode(final ConcurrentMap<String,
>> ConcurrentMap<String, PluginType<?>>> map) {
>>          final String fileName = rootDir + PATH + FILENAME;
>> -        DataOutputStream dos = null;
>> +        final File file = new File(rootDir + PATH);
>> +        file.mkdirs();
>>          try {
>> -            final File file = new File(rootDir + PATH);
>> -            file.mkdirs();
>> -            final FileOutputStream fos = new FileOutputStream(fileName);
>> -            final BufferedOutputStream bos = new
>> BufferedOutputStream(fos);
>> -            dos = new DataOutputStream(bos);
>> -            dos.writeInt(map.size());
>> -            for (final Map.Entry<String, ConcurrentMap<String,
>> PluginType<?>>> outer : map.entrySet()) {
>> -                dos.writeUTF(outer.getKey());
>> -                dos.writeInt(outer.getValue().size());
>> -                for (final Map.Entry<String, PluginType<?>> entry :
>> outer.getValue().entrySet()) {
>> -                    dos.writeUTF(entry.getKey());
>> -                    final PluginType<?> pt = entry.getValue();
>> -                    dos.writeUTF(pt.getPluginClass().getName());
>> -                    dos.writeUTF(pt.getElementName());
>> -                    dos.writeBoolean(pt.isObjectPrintable());
>> -                    dos.writeBoolean(pt.isDeferChildren());
>> +            final DataOutputStream dos = new DataOutputStream(new
>> BufferedOutputStream(new FileOutputStream(fileName)));
>> +            try {
>> +                dos.writeInt(map.size());
>> +                for (final Map.Entry<String, ConcurrentMap<String,
>> PluginType<?>>> outer : map.entrySet()) {
>> +                    dos.writeUTF(outer.getKey());
>> +                    dos.writeInt(outer.getValue().size());
>> +                    for (final Map.Entry<String, PluginType<?>> entry
:
>> outer.getValue().entrySet()) {
>> +                        dos.writeUTF(entry.getKey());
>> +                        final PluginType<?> pt = entry.getValue();
>> +                        dos.writeUTF(pt.getPluginClass().getName());
>> +                        dos.writeUTF(pt.getElementName());
>> +                        dos.writeBoolean(pt.isObjectPrintable());
>> +                        dos.writeBoolean(pt.isDeferChildren());
>> +                    }
>>                  }
>> +            } catch (IOException e) {
>> +                LOGGER.error("Can't save plugin cache.", e);
>> +            } finally {
>> +                Closer.closeSilent(dos);
>>              }
>> -        } catch (final Exception ex) {
>> -            ex.printStackTrace();
>> -        } finally {
>> -            Closer.closeSilent(dos);
>> +        } catch (FileNotFoundException e) {
>> +            LOGGER.error("Can't save plugin cache to {}", fileName, e);
>>          }
>>      }
>>
>> @@ -313,9 +331,9 @@ public class PluginManager {
>>
>>          @Override
>>          public String toString() {
>> -            final StringBuilder msg = new StringBuilder("annotated with
>> @" + Plugin.class.getSimpleName());
>> +            final StringBuilder msg = new StringBuilder("annotated with
>> @").append(Plugin.class.getSimpleName());
>>              if (isA != null) {
>> -                msg.append(" is assignable to " + isA.getSimpleName());
>> +                msg.append(" is assignable to
>> ").append(isA.getSimpleName());
>>              }
>>              return msg.toString();
>>          }
>>
>>
>>
>

Mime
View raw message