You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2008/05/29 21:29:08 UTC

svn commit: r661442 - in /geronimo/server/trunk/framework/modules: geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java

Author: djencks
Date: Thu May 29 12:29:08 2008
New Revision: 661442

URL: http://svn.apache.org/viewvc?rev=661442&view=rev
Log:
GERONIMO-3993 Only load/start the available plugins, and repeat till no progress occurs

Modified:
    geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java
    geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java

Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java?rev=661442&r1=661441&r2=661442&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/config/SimpleConfigurationManager.java Thu May 29 12:29:08 2008
@@ -443,20 +443,33 @@
         }
     }
 
+    // Return ids that can be loaded in sorted order.  Remove loadable ids from source set.
     public LinkedHashSet<Artifact> sort(List<Artifact> ids, LifecycleMonitor monitor) throws InvalidConfigException, IOException, NoSuchConfigException, MissingDependencyException {
         LinkedHashSet<Artifact> sorted = new LinkedHashSet<Artifact>();
         sort(ids, sorted, monitor);
         sorted.retainAll(ids);
+        ids.removeAll(sorted);
         return sorted;
     }
 
     private void sort(Collection<Artifact> ids, LinkedHashSet<Artifact> sorted, LifecycleMonitor monitor) throws InvalidConfigException, IOException, NoSuchConfigException, MissingDependencyException {
         for (Artifact id : ids) {
             if (!sorted.contains(id)) {
-                ConfigurationData data = loadConfigurationData(id, monitor);
-                LinkedHashSet<Artifact> parents = resolveParentIds(data);
-                sort(parents, sorted, monitor);
-                sorted.add(id);
+                try {
+                    //configuration may not be loadable yet, the config-store may not be available to load from
+                    ConfigurationData data = loadConfigurationData(id, monitor);
+                    LinkedHashSet<Artifact> parents = resolveParentIds(data);
+                    sort(parents, sorted, monitor);
+                    sorted.add(id);
+                } catch (NoSuchConfigException e) {
+                    //ignore
+                } catch (IOException e) {
+                    //ignore
+                } catch (InvalidConfigException e) {
+                    //ignore
+                } catch (MissingDependencyException e) {
+                    //ignore
+                }
             }
         }
     }

Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java?rev=661442&r1=661441&r2=661442&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/main/EmbeddedDaemon.java Thu May 29 12:29:08 2008
@@ -20,13 +20,10 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Iterator;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
-import java.util.LinkedHashSet;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.geronimo.cli.daemon.DaemonCLParser;
 import org.apache.geronimo.common.GeronimoEnvironment;
 import org.apache.geronimo.gbean.AbstractName;
@@ -37,11 +34,14 @@
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
 import org.apache.geronimo.kernel.config.DebugLoggingLifecycleMonitor;
+import org.apache.geronimo.kernel.config.InvalidConfigException;
 import org.apache.geronimo.kernel.config.LifecycleMonitor;
 import org.apache.geronimo.kernel.config.PersistentConfigurationList;
 import org.apache.geronimo.kernel.repository.Artifact;
 import org.apache.geronimo.kernel.util.Main;
 import org.apache.geronimo.system.serverinfo.DirectoryUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * @version $Rev:385659 $ $Date: 2007-03-07 14:40:07 +1100 (Wed, 07 Mar 2007) $
@@ -57,9 +57,9 @@
     public EmbeddedDaemon(Kernel kernel) {
         this.kernel = kernel;
     }
-    
+
     public int execute(Object opaque) {
-        if (! (opaque instanceof DaemonCLParser)) {
+        if (!(opaque instanceof DaemonCLParser)) {
             throw new IllegalArgumentException("Argument type is [" + opaque.getClass() + "]; expected [" + DaemonCLParser.class + "]");
         }
         DaemonCLParser parser = (DaemonCLParser) opaque;
@@ -70,10 +70,10 @@
 
         System.out.println("Booting Geronimo Kernel (in Java " + System.getProperty("java.version") + ")...");
         System.out.flush();
-        
+
         // Perform initialization tasks common with the various Geronimo environments
         GeronimoEnvironment.init();
-        
+
         monitor.systemStarting(start);
         return doStartup();
     }
@@ -99,7 +99,7 @@
         }
         lifecycleMonitor = new DebugLoggingLifecycleMonitor(log);
     }
-    
+
     protected int doStartup() {
         try {
             // Check that the tmpdir exists - if not give friendly msg and exit
@@ -107,7 +107,7 @@
             // (since 1.0 release) the same way Tomcat allows it to be configured.
             String tmpDir = System.getProperty("java.io.tmpdir");
             if (tmpDir == null || (!(new File(tmpDir)).exists()) || (!(new File(tmpDir)).isDirectory())) {
-                System.err.println("The java.io.tmpdir system property specifies a non-existent directory: "  + tmpDir);
+                System.err.println("The java.io.tmpdir system property specifies a non-existent directory: " + tmpDir);
                 return 1;
             }
 
@@ -148,22 +148,29 @@
             try {
                 ConfigurationManager configurationManager = ConfigurationUtil.getConfigurationManager(kernel);
                 try {
-                    LinkedHashSet<Artifact> sorted = configurationManager.sort(configs, lifecycleMonitor);
-                    for (Artifact configID : sorted) {
-                        monitor.moduleLoading(configID);
-                        configurationManager.loadConfiguration(configID, lifecycleMonitor);
-                        monitor.moduleLoaded(configID);
-                        monitor.moduleStarting(configID);
-                        configurationManager.startConfiguration(configID, lifecycleMonitor);
-                        monitor.moduleStarted(configID);
+                    List<Artifact> unloadedConfigs = new ArrayList(configs);
+                    int unloadedConfigsCount;
+                    do {
+                        unloadedConfigsCount = unloadedConfigs.size();
+                        LinkedHashSet<Artifact> sorted = configurationManager.sort(unloadedConfigs, lifecycleMonitor);
+                        for (Artifact configID : sorted) {
+                            monitor.moduleLoading(configID);
+                            configurationManager.loadConfiguration(configID, lifecycleMonitor);
+                            monitor.moduleLoaded(configID);
+                            monitor.moduleStarting(configID);
+                            configurationManager.startConfiguration(configID, lifecycleMonitor);
+                            monitor.moduleStarted(configID);
+                        }
+                    } while (unloadedConfigsCount > unloadedConfigs.size());
+                    if (!unloadedConfigs.isEmpty()) {
+                        throw new InvalidConfigException("Could not locate configs to start: " + unloadedConfigs);
                     }
                     // the server has finished loading the persistent configuration so inform the gbean
                     AbstractNameQuery startedQuery = new AbstractNameQuery(ServerStatus.class.getName());
-                    Set statusBeans = kernel.listGBeans(startedQuery);
-                    for(Iterator itr = statusBeans.iterator();itr.hasNext();) {
-                        AbstractName statusName = (AbstractName)itr.next();
-                        ServerStatus status = (ServerStatus)kernel.getGBean(statusName);
-                        if(status != null) {
+                    Set<AbstractName> statusBeans = kernel.listGBeans(startedQuery);
+                    for (AbstractName statusName : statusBeans) {
+                        ServerStatus status = (ServerStatus) kernel.getGBean(statusName);
+                        if (status != null) {
                             status.setServerStarted(true);
                         }
                     }
@@ -232,5 +239,5 @@
     public static GBeanInfo getGBeanInfo() {
         return GBEAN_INFO;
     }
-    
+
 }