You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2005/07/10 08:19:31 UTC

svn commit: r209997 - /geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java

Author: ammulder
Date: Sat Jul  9 23:19:29 2005
New Revision: 209997

URL: http://svn.apache.org/viewcvs?rev=209997&view=rev
Log:
Save the list of running configurations every time a configuration is
  started or stopped.  GERONIMO-657

Modified:
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java?rev=209997&r1=209996&r2=209997&view=diff
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/FileConfigurationList.java Sat Jul  9 23:19:29 2005
@@ -37,10 +37,11 @@
 import org.apache.geronimo.gbean.GBeanInfoBuilder;
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.lifecycle.LifecycleListener;
+import org.apache.geronimo.kernel.lifecycle.LifecycleAdapter;
 import org.apache.geronimo.kernel.config.ConfigurationInfo;
 import org.apache.geronimo.kernel.config.NoSuchStoreException;
 import org.apache.geronimo.kernel.config.PersistentConfigurationList;
-import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.management.State;
 import org.apache.geronimo.system.serverinfo.ServerInfo;
@@ -83,22 +84,45 @@
     private boolean kernelFullyStarted = false;
 
     /**
-     * The acutal absolute file where we write the configuration list.
+     * The actual absolute file where we write the configuration list.
      */
     private File configList;
 
     /**
-     * Our hook the kernel calls before shutting down.
+     * Listener to make this GBean save every time a configuration is started
+     * or stopped.
      */
-    private Runnable hook;
+    private LifecycleListener listener;
 
     public FileConfigurationList(Kernel kernel, ServerInfo serverInfo, ConfigurationManager configurationManager, String configDir) {
         this.kernel = kernel;
         this.configurationManager = configurationManager;
         this.serverInfo = serverInfo;
         this.configFile = configDir;
+        this.listener = new LifecycleAdapter() {
+            public void stopped(ObjectName objectName) {
+                if(kernelFullyStarted && FileConfigurationList.this.kernel.isRunning()) {
+                    doSave();
+                }
+            }
+
+            public void running(ObjectName objectName) {
+                if(kernelFullyStarted && FileConfigurationList.this.kernel.isRunning()) {
+                    doSave();
+                }
+            }
+
+            private void doSave() {
+                try {
+                    save();
+                } catch (IOException e) {
+                    log.error("Unable to save list of running configurations", e);
+                }
+            }
+        };
     }
 
+
     public void doStart() throws Exception {
         configList = serverInfo.resolve(configFile);
         File parent = configList.getParentFile();
@@ -107,16 +131,7 @@
                 throw new IOException("Unable to create directory for list:" + parent);
             }
         }
-        hook = new Runnable() {
-            public void run() {
-                try {
-                    save();
-                } catch (IOException e) {
-                    log.error("Unable to save configuration on shutdown", e);
-                }
-            }
-        };
-        kernel.registerShutdownHook(hook);
+        kernel.getLifecycleMonitor().addLifecycleListener(listener, new ObjectName("geronimo.config:*"));
     }
 
     public void doStop() throws Exception {
@@ -124,8 +139,7 @@
     }
 
     public void doFail() {
-        kernel.unregisterShutdownHook(hook);
-        hook = null;
+        kernel.getLifecycleMonitor().removeLifecycleListener(listener);
         configList = null;
     }
 
@@ -139,7 +153,11 @@
 
     public synchronized void save() throws IOException {
         if (!kernelFullyStarted) {
-            log.info("Configuration list was not saved.  Kernel was never fully started.");
+            log.debug("Configuration list was not saved.  Kernel was never fully started.");
+            return;
+        }
+        if (!kernel.isRunning()) {
+            log.debug("Configuration list was not saved.  Kernel is shutting down.");
             return;
         }