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/08/27 07:06:59 UTC

svn commit: r240391 - in /geronimo/trunk/modules: deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/ deployment/src/java/org/apache/geronimo/deployment/ j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/ service-builder/src/java...

Author: ammulder
Date: Fri Aug 26 22:06:47 2005
New Revision: 240391

URL: http://svn.apache.org/viewcvs?rev=240391&view=rev
Log:
When starting a module, give a message if it's already started
When distributing (or deploying) a module, throw an error if it's
  already available in the server environment
GERONIMO-480

Modified:
    geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java
    geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java
    geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java
    geronimo/trunk/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
    geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
    geronimo/trunk/modules/servicemix-builder/src/java/org/apache/geronimo/servicemix/deployment/ServiceMixConfigBuilder.java
    geronimo/trunk/modules/spring-builder/src/java/org/apache/geronimo/spring/deployment/SPRConfigBuilder.java

Modified: geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java (original)
+++ geronimo/trunk/modules/deploy-jsr88/src/java/org/apache/geronimo/deployment/plugin/local/StartCommand.java Fri Aug 26 22:06:47 2005
@@ -22,10 +22,14 @@
 import javax.enterprise.deploy.shared.CommandType;
 import javax.enterprise.deploy.spi.TargetModuleID;
 import javax.management.ObjectName;
+import javax.management.MalformedObjectNameException;
 
 import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
+import org.apache.geronimo.kernel.management.State;
 import org.apache.geronimo.kernel.config.ConfigurationManager;
 import org.apache.geronimo.kernel.config.ConfigurationUtil;
+import org.apache.geronimo.kernel.config.Configuration;
 import org.apache.geronimo.deployment.plugin.TargetModuleIDImpl;
 
 /**
@@ -50,7 +54,20 @@
                 for (int i = 0; i < modules.length; i++) {
                     TargetModuleID module = modules[i];
 
+                    // Check to see whether the module is already started
                     URI moduleID = URI.create(module.getModuleID());
+                    try {
+                        if(kernel.getGBeanState(Configuration.getConfigurationObjectName(moduleID)) == State.RUNNING_INDEX) {
+                            updateStatus("Module "+moduleID+" is already running");
+                            Thread.sleep(100);
+                            continue;
+                        }
+                    } catch (GBeanNotFoundException e) {
+                        // That means that the configuration may have been distributed but has not yet been loaded.
+                        // That's fine, we'll load it next.
+                    }
+                    
+                    // Load and start the module
                     List list = configurationManager.loadRecursive(moduleID);
                     for (int j = 0; j < list.size(); j++) {
                         ObjectName name = (ObjectName) list.get(j);

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java (original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java Fri Aug 26 22:06:47 2005
@@ -20,6 +20,8 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.jar.JarFile;
+import java.net.URI;
+
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.kernel.config.ConfigurationData;
 
@@ -36,6 +38,16 @@
      * @throws org.apache.geronimo.common.DeploymentException if there was a problem with the configuration
      */
     Object getDeploymentPlan(File planFile, JarFile module) throws DeploymentException;
+
+    /**
+     * Checks what configuration URL will be used for the provided module.
+     * @param plan the deployment plan
+     * @param module the module to build
+     * @return the ID that will be used for the Configuration
+     * @throws IOException if there was a problem reading or writing the files
+     * @throws org.apache.geronimo.common.DeploymentException if there was a problem with the configuration
+     */
+    URI getConfigurationID(Object plan, JarFile module) throws IOException, DeploymentException;
 
     /**
      * Build a configuration from a local file

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java (original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java Fri Aug 26 22:06:47 2005
@@ -27,6 +27,7 @@
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
+import java.net.URI;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -37,9 +38,14 @@
 import org.apache.geronimo.kernel.config.ConfigurationData;
 import org.apache.geronimo.kernel.config.ConfigurationStore;
 import org.apache.geronimo.kernel.config.InvalidConfigException;
+import org.apache.geronimo.kernel.config.Configuration;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.GBeanNotFoundException;
 import org.apache.geronimo.system.main.CommandLineManifest;
 import org.apache.geronimo.system.configuration.ExecutableConfigurationUtil;
 
+import javax.management.MalformedObjectNameException;
+
 /**
  * GBean that knows how to deploy modules (by consulting available module builders)
  *
@@ -49,10 +55,12 @@
     private static final Log log = LogFactory.getLog(Deployer.class);
     private final Collection builders;
     private final ConfigurationStore store;
+    private final Kernel kernel;
 
-    public Deployer(Collection builders, ConfigurationStore store) {
+    public Deployer(Collection builders, ConfigurationStore store, Kernel kernel) {
         this.builders = builders;
         this.store = store;
+        this.kernel = kernel;
     }
 
     public List deploy(File moduleFile, File planFile) throws DeploymentException {
@@ -141,6 +149,15 @@
                         (moduleFile == null ? "" : ", moduleFile" + moduleFile.getAbsolutePath()));
             }
 
+            // Make sure this configuration doesn't already exist
+            URI configID = builder.getConfigurationID(plan, module);
+            try {
+                kernel.getGBeanState(Configuration.getConfigurationObjectName(configID));
+                throw new DeploymentException("Module "+configID+" already exists in the server.  Try to undeploy it first or use the redeploy command.");
+            } catch (GBeanNotFoundException e) {
+                // this is good
+            }
+
             // create a configuration dir to write the configuration during the building proces
             configurationDir = store.createNewConfigurationDir();
 
@@ -214,13 +231,14 @@
     static {
         GBeanInfoBuilder infoFactory = new GBeanInfoBuilder(Deployer.class, DEPLOYER);
 
+        infoFactory.addAttribute("kernel", Kernel.class, false);
         infoFactory.addOperation("deploy", new Class[]{File.class, File.class});
         infoFactory.addOperation("deploy", new Class[]{File.class, File.class, File.class, boolean.class, String.class, String.class, String.class});
 
         infoFactory.addReference("Builders", ConfigurationBuilder.class, "ConfigBuilder");
         infoFactory.addReference("Store", ConfigurationStore.class, "ConfigurationStore");
 
-        infoFactory.setConstructor(new String[]{"Builders", "Store"});
+        infoFactory.setConstructor(new String[]{"Builders", "Store", "kernel"});
 
         GBEAN_INFO = infoFactory.getBeanInfo();
     }

Modified: geronimo/trunk/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java (original)
+++ geronimo/trunk/modules/j2ee-builder/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java Fri Aug 26 22:06:47 2005
@@ -291,6 +291,11 @@
         return gerApplication;
     }
 
+    public URI getConfigurationID(Object plan, JarFile module) throws IOException, DeploymentException {
+        ApplicationInfo applicationInfo = (ApplicationInfo) plan;
+        return applicationInfo.getConfigId();
+    }
+
     public ConfigurationData buildConfiguration(Object plan, JarFile earFile, File outfile) throws IOException, DeploymentException {
         assert plan != null;
         ApplicationInfo applicationInfo = (ApplicationInfo) plan;

Modified: geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java (original)
+++ geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java Fri Aug 26 22:06:47 2005
@@ -144,6 +144,15 @@
         }
     }
 
+    public URI getConfigurationID(Object plan, JarFile module) throws IOException, DeploymentException {
+        ConfigurationType configType = (ConfigurationType) plan;
+        try {
+            return new URI(configType.getConfigId());
+        } catch (URISyntaxException e) {
+            throw new DeploymentException("Invalid configId " + configType.getConfigId(), e);
+        }
+    }
+
     public ConfigurationData buildConfiguration(Object plan, JarFile unused, File outfile) throws IOException, DeploymentException {
         ConfigurationType configType = (ConfigurationType) plan;
         String domain = null;

Modified: geronimo/trunk/modules/servicemix-builder/src/java/org/apache/geronimo/servicemix/deployment/ServiceMixConfigBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/servicemix-builder/src/java/org/apache/geronimo/servicemix/deployment/ServiceMixConfigBuilder.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/servicemix-builder/src/java/org/apache/geronimo/servicemix/deployment/ServiceMixConfigBuilder.java (original)
+++ geronimo/trunk/modules/servicemix-builder/src/java/org/apache/geronimo/servicemix/deployment/ServiceMixConfigBuilder.java Fri Aug 26 22:06:47 2005
@@ -110,6 +110,15 @@
         }   
     }
 
+    public URI getConfigurationID(Object plan, JarFile module) throws IOException, DeploymentException {
+        Properties properties = (Properties)plan;
+        try {
+            return new URI(properties.getProperty("configID"));
+        } catch (URISyntaxException e1) {
+            throw new DeploymentException("Invalid configuration URI", e1);
+        }
+    }
+
     public ConfigurationData buildConfiguration(Object plan, JarFile module, File outfile) throws IOException, DeploymentException {
         log.debug("Installing ServiceMix deployment.");
         Properties properties = (Properties)plan;        

Modified: geronimo/trunk/modules/spring-builder/src/java/org/apache/geronimo/spring/deployment/SPRConfigBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/spring-builder/src/java/org/apache/geronimo/spring/deployment/SPRConfigBuilder.java?rev=240391&r1=240390&r2=240391&view=diff
==============================================================================
--- geronimo/trunk/modules/spring-builder/src/java/org/apache/geronimo/spring/deployment/SPRConfigBuilder.java (original)
+++ geronimo/trunk/modules/spring-builder/src/java/org/apache/geronimo/spring/deployment/SPRConfigBuilder.java Fri Aug 26 22:06:47 2005
@@ -19,6 +19,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.Hashtable;
@@ -99,6 +100,15 @@
 
     return this;		// token passed to buildConfiguration()...
   }
+
+    public URI getConfigurationID(Object plan, JarFile sprFile) throws IOException, DeploymentException {
+        String uid=sprFile.getName();
+        try {
+            return new URI(uid);
+        } catch (URISyntaxException e) {
+            throw new DeploymentException("Unable to construct configuration ID "+sprFile.getName());
+        }
+    }
 
   public ConfigurationData
     buildConfiguration(Object plan, JarFile sprFile, File outfile)