geronimo-scm mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From djen...@apache.org
Subject svn commit: r109571 - /geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
Date Thu, 02 Dec 2004 22:19:24 GMT
Author: djencks
Date: Thu Dec  2 14:19:23 2004
New Revision: 109571

URL: http://svn.apache.org/viewcvs?view=rev&rev=109571
Log:
Loaded may not be the same as started.  Keep track of what we load and start separately
Modified:
   geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
Url: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java?view=diff&rev=109571&p1=geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java&r1=109570&p2=geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java&r2=109571
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
(original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/DeploymentContext.java
Thu Dec  2 14:19:23 2004
@@ -39,6 +39,7 @@
 import java.util.Set;
 import java.util.ArrayList;
 import java.util.StringTokenizer;
+import java.util.LinkedList;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 import java.util.jar.Attributes;
@@ -51,6 +52,7 @@
 import org.apache.geronimo.gbean.jmx.GBeanMBean;
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
 import org.apache.geronimo.kernel.management.State;
 import org.apache.geronimo.kernel.repository.Repository;
 import org.apache.geronimo.kernel.config.Configuration;
@@ -74,7 +76,8 @@
     private final File baseDir;
     private final URI baseUri;
     private final byte[] buffer = new byte[4096];
-    private final List ancestors;
+    private final List loadedAncestors;
+    private final LinkedList startedAncestors;
     private final ClassLoader parentCL;
 
     public DeploymentContext(File baseDir, URI configID, ConfigurationModuleType type, URI
parentID, Kernel kernel) throws MalformedObjectNameException, DeploymentException {
@@ -111,38 +114,45 @@
             ObjectName parentName = Configuration.getConfigurationObjectName(parentID);
             config.setReferencePatterns("Parent", Collections.singleton(parentName));
             try {
-                ancestors = configurationManager.loadRecursive(parentID);
+                loadedAncestors = configurationManager.loadRecursive(parentID);
             } catch (Exception e) {
                 throw new DeploymentException("Unable to load parents", e);
             }
 
             try {
-                // starting with the current config start all parents until
-                // there are either no more parents or a parent is already running
-                for (Iterator iterator = ancestors.iterator(); iterator.hasNext();) {
-                    ObjectName name = (ObjectName) iterator.next();
-                    if (isRunning(kernel, name) ) {
-                        // configuration is already running... we can stop now
+                startedAncestors = new LinkedList();
+                ObjectName ancestorName = parentName;
+                while (ancestorName != null && !isRunning(kernel, ancestorName))
{
+                    startedAncestors.addFirst(ancestorName);
+                    Set patterns = kernel.getGBeanData(ancestorName).getReferencePatterns("Parent");
+                    if (patterns.isEmpty()) {
                         break;
                     }
-                    kernel.startGBean(name);
-                    if (!isRunning(kernel, name) ) {
-                        throw new DeploymentException("Failed to start parent configuration:
" + name);
+                    ancestorName = (ObjectName) patterns.iterator().next();
+                }
+                //we've found what we need to start, now start them.
+                for (Iterator iterator = startedAncestors.iterator(); iterator.hasNext();)
{
+                    ObjectName objectName = (ObjectName) iterator.next();
+                    kernel.startGBean(objectName);
+                    if (!isRunning(kernel, objectName)) {
+                        throw new DeploymentException("Failed to start parent configuration:
" + objectName);
                     }
+
                 }
             } catch (DeploymentException e) {
                 throw e;
             } catch (Exception e) {
                 throw new DeploymentException(e);
             }
-                
+
             try {
                 parentCL = (ClassLoader) kernel.getAttribute(parentName, "configurationClassLoader");
             } catch (Exception e) {
                 throw new DeploymentException(e);
             }
         } else {
-            ancestors = null;
+            loadedAncestors = null;
+            startedAncestors = null;
             // no explicit parent set, so use the class loader of this class as
             // the parent... this class should be in the root geronimo classloader,
             // which is normally the system class loader but not always, so be safe
@@ -403,11 +413,33 @@
     public void close() throws IOException, DeploymentException {
         saveConfiguration();
 
-        if (kernel != null && ancestors != null && ancestors.size() >
0) {
-            try {
-                kernel.stopGBean((ObjectName) ancestors.get(0));
-            } catch (Exception e) {
-                throw new DeploymentException(e);
+        if (kernel != null) {
+            if (startedAncestors != null) {
+                //stopping one stops all it's children.
+                //doesn't work though.
+                Collections.reverse(startedAncestors);
+                for (Iterator iterator = startedAncestors.iterator(); iterator.hasNext();)
{
+                    ObjectName objectName = (ObjectName) iterator.next();
+
+                    try {
+                        kernel.stopGBean(objectName);
+                    } catch (GBeanNotFoundException e) {
+                        throw new DeploymentException("Could not find a configuration we
previously started! " + objectName, e);
+                    }
+                }
+                startedAncestors.clear();
+            }
+            if (loadedAncestors != null) {
+                Collections.reverse(loadedAncestors);
+                for (Iterator iterator = loadedAncestors.iterator(); iterator.hasNext();)
{
+                    ObjectName objectName = (ObjectName) iterator.next();
+                    try {
+                        kernel.unloadGBean(objectName);
+                    } catch (GBeanNotFoundException e) {
+                        throw new DeploymentException("Could not find a configuration we
previously loaded! " + objectName, e);
+                    }
+                }
+                loadedAncestors.clear();
             }
         }
     }
@@ -443,5 +475,13 @@
             DeploymentUtil.flush(out);
             DeploymentUtil.close(out);
         }
+    }
+
+    /**
+     * @deprecated Currently used only in some tests, and may not be appropriate as a public
method.
+     * @return a copy of the configurations GBeanData
+     */
+    public GBeanData getConfigurationGBeanData() {
+        return new GBeanData(config);
     }
 }

Mime
View raw message