Stop logging when starting the plugin failed.
[Sone.git] / src / main / java / net / pterodactylus / sone / main / SonePlugin.java
index 7ac2c83..810fef1 100644 (file)
@@ -41,6 +41,7 @@ import freenet.pluginmanager.FredPluginL10n;
 import freenet.pluginmanager.FredPluginThreadless;
 import freenet.pluginmanager.FredPluginVersioned;
 import freenet.pluginmanager.PluginRespirator;
+import freenet.pluginmanager.PluginStore;
 
 /**
  * This class interfaces with Freenet. It is the class that is loaded by the
@@ -73,6 +74,9 @@ public class SonePlugin implements FredPlugin, FredPluginL10n, FredPluginBaseL10
        /** The l10n helper. */
        private PluginL10n l10n;
 
+       /** The plugin store. */
+       private PluginStore pluginStore;
+
        //
        // ACCESSORS
        //
@@ -118,7 +122,7 @@ public class SonePlugin implements FredPlugin, FredPluginL10n, FredPluginBaseL10
                /* create a configuration. */
                Configuration configuration;
                try {
-                       configuration = new Configuration(new PluginStoreConfigurationBackend(pluginRespirator.getStore()));
+                       configuration = new Configuration(new PluginStoreConfigurationBackend(pluginStore = pluginRespirator.getStore()));
                } catch (DatabaseDisabledException dde1) {
                        logger.log(Level.WARNING, "Could not load plugin store, using XML files.");
                        try {
@@ -141,8 +145,21 @@ public class SonePlugin implements FredPlugin, FredPluginL10n, FredPluginBaseL10
                core.freenetInterface(freenetInterface);
 
                /* start core! */
-               core.start();
-               webInterface.start();
+               boolean startupFailed = true;
+               try {
+                       core.start();
+                       webInterface.start();
+                       startupFailed = false;
+               } finally {
+                       if (startupFailed) {
+                               /*
+                                * we let the exception bubble up but shut the logging down so
+                                * that the logfile is not swamped by the installed logging
+                                * handlers of the failed instances.
+                                */
+                               Logging.shutdown();
+                       }
+               }
        }
 
        /**
@@ -157,6 +174,11 @@ public class SonePlugin implements FredPlugin, FredPluginL10n, FredPluginBaseL10
                core.stop();
 
                /* TODO wait for core to stop? */
+               try {
+                       pluginRespirator.putStore(pluginStore);
+               } catch (DatabaseDisabledException dde1) {
+                       logger.log(Level.WARNING, "Could not store plugin store, database is disabled.", dde1);
+               }
 
                /* shutdown logger. */
                Logging.shutdown();