Author: bombe
Date: 2007-11-20 02:24:42 +0000 (Tue, 20 Nov 2007)
New Revision: 15873

Modified:
   trunk/freenet/src/freenet/pluginmanager/PluginManager.java
Log:
delete cached copy of plugin if loading fails (because every failure required 
at least a redownload or maybe even upstream fixing) (should ease loading of 
plugins in case of failure)

Modified: trunk/freenet/src/freenet/pluginmanager/PluginManager.java
===================================================================
--- trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-11-19 
23:41:50 UTC (rev 15872)
+++ trunk/freenet/src/freenet/pluginmanager/PluginManager.java  2007-11-20 
02:24:42 UTC (rev 15873)
@@ -539,26 +539,32 @@
                        Manifest manifest = pluginJarFile.getManifest();
                        if (manifest == null) {
                                Logger.error(this, "could not load manifest 
from plugin file");
+                               pluginFile.delete();
                                throw new PluginNotFoundException("could not 
load manifest from plugin file");
                        }
                        Attributes mainAttributes = 
manifest.getMainAttributes();
                        if (mainAttributes == null) {
                                Logger.error(this, "manifest does not contain 
attributes");
+                               pluginFile.delete();
                                throw new PluginNotFoundException("manifest 
does not contain attributes");
                        }
                        pluginMainClassName = 
mainAttributes.getValue("Plugin-Main-Class");
                        if (pluginMainClassName == null) {
                                Logger.error(this, "manifest does not contain a 
Plugin-Main-Class attribute");
+                               pluginFile.delete();
                                throw new PluginNotFoundException("manifest 
does not contain a Plugin-Main-Class attribute");
                        }
                } catch (JarException je1) {
                        Logger.error(this, "could not process jar file", je1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not process 
jar file", je1);
                } catch (ZipException ze1) {
                        Logger.error(this, "could not process jar file", ze1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not process 
jar file", ze1);
                } catch (IOException ioe1) {
                        Logger.error(this, "error processing jar file", ioe1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("error procesesing 
jar file", ioe1);
                } finally {
                        Closer.close(pluginJarFile);
@@ -570,20 +576,25 @@
                        Object object = pluginMainClass.newInstance();
                        if (!(object instanceof FredPlugin)) {
                                Logger.error(this, "plugin main class is not a 
plugin");
+                               pluginFile.delete();
                                throw new PluginNotFoundException("plugin main 
class is not a plugin");
                        }
                        return (FredPlugin) object;
                } catch (IOException ioe1) {
                        Logger.error(this, "could not load plugin", ioe1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not load 
plugin", ioe1);
                } catch (ClassNotFoundException cnfe1) {
                        Logger.error(this, "could not find plugin class", 
cnfe1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not find 
plugin class", cnfe1);
                } catch (InstantiationException ie1) {
                        Logger.error(this, "could not instantiate plugin", ie1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not 
instantiate plugin", ie1);
                } catch (IllegalAccessException iae1) {
                        Logger.error(this, "could not access plugin main 
class", iae1);
+                       pluginFile.delete();
                        throw new PluginNotFoundException("could not access 
plugin main class", iae1);
                }
        }


Reply via email to