You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by da...@apache.org on 2004/09/28 20:46:40 UTC

svn commit: rev 47413 - in geronimo/trunk/modules: client-builder/src/java/org/apache/geronimo/client/builder client-builder/src/test/org/apache/geronimo/client/builder connector/src/java/org/apache/geronimo/connector/deployment connector/src/test/org/apache/geronimo/connector/deployment deployment/src/java/org/apache/geronimo/deployment deployment/src/java/org/apache/geronimo/deployment/plugin deployment/src/java/org/apache/geronimo/deployment/plugin/local deployment/src/java/org/apache/geronimo/deployment/service j2ee/src/java/org/apache/geronimo/j2ee/deployment j2ee/src/test/org/apache/geronimo/j2ee/deployment jetty/src/java/org/apache/geronimo/jetty/deployment jetty/src/test/org/apache/geronimo/jetty/deployment

Author: dain
Date: Tue Sep 28 11:46:39 2004
New Revision: 47413

Modified:
   geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
   geronimo/trunk/modules/client-builder/src/test/org/apache/geronimo/client/builder/PlanParsingTest.java
   geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
   geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_0ConfigBuilderTest.java
   geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_5ConfigBuilderTest.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/deployment/src/java/org/apache/geronimo/deployment/plugin/TargetModuleIDImpl.java
   geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java
   geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/AppClientModule.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ConnectorModule.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EJBModule.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/Module.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
   geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/WebModule.java
   geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTest.java
   geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java
   geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
   geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java
   geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
   geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java
Log:
Modified module builders to return the object name of the module j2ee management object
ObjectNames are used as the basis of the TargetModuleID to create a hierarchy or deployed modules
Split createModule method of module builder into a version for stand alone modules and a version for modules contained in an ear


Modified: geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
==============================================================================
--- geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java	(original)
+++ geronimo/trunk/modules/client-builder/src/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java	Tue Sep 28 11:46:39 2004
@@ -95,17 +95,31 @@
         this.connectorModuleBuilder = connectorModuleBuilder;
     }
 
-    public Module createModule(String name, Object plan, JarFile moduleFile, URL appClientXmlUrl, String targetPath) throws DeploymentException {
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return createModule(plan, moduleFile, "app-client", null, true);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return createModule(plan, moduleFile, targetPath, specDDUrl, false);
+    }
+
+    private Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl, boolean standAlone) throws DeploymentException {
+        assert moduleFile != null: "moduleFile is null";
+        assert targetPath != null: "targetPath is null";
+        assert !targetPath.endsWith("/"): "targetPath must not end with a '/'";
+
         String specDD;
         ApplicationClientType appClient;
         try {
-            if (appClientXmlUrl == null) {
-                appClientXmlUrl = JarUtil.createJarURL(moduleFile, "META-INF/application-client.xml");
+            if (specDDUrl == null) {
+                specDDUrl = JarUtil.createJarURL(moduleFile, "META-INF/application-client.xml");
             }
 
-            specDD = IOUtil.readAll(appClientXmlUrl);
+            // read in the entire specDD as a string, we need this for getDeploymentDescriptor
+            // on the J2ee management object
+            specDD = IOUtil.readAll(specDDUrl);
 
-            // check if we have an alt spec dd
+            // parse it
             XmlObject xmlObject = SchemaConversionUtils.parse(specDD);
             ApplicationClientDocument appClientDoc = SchemaConversionUtils.convertToApplicationClientSchema(xmlObject);
             appClient = appClientDoc.getApplicationClient();
@@ -115,8 +129,8 @@
             return null;
         }
 
-        GerApplicationClientType gerAppClient = null;
-        gerAppClient = getApplicationClientType(plan, moduleFile, name, appClient);
+        // parse vendor dd
+        GerApplicationClientType gerAppClient = getGeronimoAppClient(plan, moduleFile, standAlone, targetPath, appClient);
 
         // get the ids from either the application plan or for a stand alone module from the specific deployer
         URI configId = null;
@@ -135,21 +149,10 @@
             }
         }
 
-        URI moduleURI;
-        if (targetPath != null) {
-            moduleURI = URI.create(targetPath);
-            if (targetPath.endsWith("/")) {
-                throw new DeploymentException("targetPath must not end with a '/'");
-            }
-        } else {
-            targetPath = "app-client";
-            moduleURI = URI.create("");
-        }
-
-        return new AppClientModule(name, configId, parentId, moduleURI, moduleFile, targetPath, appClient, gerAppClient, specDD);
+        return new AppClientModule(standAlone, configId, parentId, moduleFile, targetPath, appClient, gerAppClient, specDD);
     }
 
-    GerApplicationClientType getApplicationClientType(Object plan, JarFile moduleFile, String name, ApplicationClientType appClient) throws DeploymentException {
+    GerApplicationClientType getGeronimoAppClient(Object plan, JarFile moduleFile, boolean standAlone, String targetPath, ApplicationClientType appClient) throws DeploymentException {
         GerApplicationClientType gerAppClient = null;
         try {
             // load the geronimo-application-client.xml from either the supplied plan or from the earFile
@@ -179,7 +182,15 @@
                 gerAppClient = (GerApplicationClientType) SchemaConversionUtils.convertToGeronimoNamingSchema(gerAppClient);
                 SchemaConversionUtils.validateDD(gerAppClient);
             } else {
-                gerAppClient = createDefaultPlan(name, appClient);
+                String path;
+                if (standAlone) {
+                    // default configId is based on the moduleFile name
+                    path = new File(moduleFile.getName()).getName();
+                } else {
+                    // default configId is based on the module uri from the application.xml
+                    path = targetPath;
+                }
+                gerAppClient = createDefaultPlan(path, appClient);
             }
         } catch (XmlException e) {
             throw new DeploymentException(e);
@@ -225,7 +236,7 @@
         // application clients do not add anything to the shared context
     }
 
-    public void addGBeans(EARContext earContext, Module module, ClassLoader earClassLoader) throws DeploymentException {
+    public String addGBeans(EARContext earContext, Module module, ClassLoader earClassLoader) throws DeploymentException {
         AppClientModule appClientModule = (AppClientModule) module;
 
         ApplicationClientType appClient = (ApplicationClientType) appClientModule.getSpecDD();
@@ -365,7 +376,7 @@
                       connectorFile = new NestedJarFile(appClientModule.getEarFile(), path);
                     }
                     XmlObject connectorPlan = resource.getConnector();
-                    Module connectorModule = connectorModuleBuilder.createModule(path, connectorPlan, connectorFile, null, path);
+                    Module connectorModule = connectorModuleBuilder.createModule(connectorPlan, connectorFile, path, null);
                     resourceModules.add(connectorModule);
                     connectorModuleBuilder.installModule(connectorFile, appClientDeploymentContext, connectorModule);
                 }
@@ -409,6 +420,7 @@
         } catch (Exception e) {
             throw new DeploymentException(e);
         }
+        return appClientModuleName.getCanonicalName();
     }
 
     private ReadOnlyContext buildComponentContext(EARContext earContext, AppClientModule appClientModule, ApplicationClientType appClient, GerApplicationClientType geronimoAppClient, ClassLoader cl) throws DeploymentException {

Modified: geronimo/trunk/modules/client-builder/src/test/org/apache/geronimo/client/builder/PlanParsingTest.java
==============================================================================
--- geronimo/trunk/modules/client-builder/src/test/org/apache/geronimo/client/builder/PlanParsingTest.java	(original)
+++ geronimo/trunk/modules/client-builder/src/test/org/apache/geronimo/client/builder/PlanParsingTest.java	Tue Sep 28 11:46:39 2004
@@ -18,7 +18,7 @@
     public void testResourceRef() throws Exception {
         File resourcePlan = new File(basedir, "src/test-resources/plans/plan1.xml");
         assertTrue(resourcePlan.exists());
-        GerApplicationClientType appClient = builder.getApplicationClientType(resourcePlan, null, null, null);
+        GerApplicationClientType appClient = builder.getGeronimoAppClient(resourcePlan, null, true, null, null);
         assertEquals(1, appClient.getResourceRefArray().length);
     }
 
@@ -38,7 +38,7 @@
     public void testConnectorInclude() throws Exception {
         File resourcePlan = new File(basedir, "src/test-resources/plans/plan2.xml");
         assertTrue(resourcePlan.exists());
-        GerApplicationClientType appClient = builder.getApplicationClientType(resourcePlan, null, null, null);
+        GerApplicationClientType appClient = builder.getGeronimoAppClient(resourcePlan, null, true, null, null);
         assertEquals(1, appClient.getResourceRefArray().length);
         assertEquals(1, appClient.getResourceArray().length);
     }

Modified: geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
==============================================================================
--- geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java	(original)
+++ geronimo/trunk/modules/connector/src/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java	Tue Sep 28 11:46:39 2004
@@ -96,16 +96,31 @@
     private static final String BASE_PASSWORD_CREDENTIAL_LOGIN_MODULE_NAME = "geronimo.security:service=Realm,type=PasswordCredential,name=";
     private static final String BASE_WORK_MANAGER_NAME = "geronimo.server:type=WorkManager,name=";
 
-    public Module createModule(String name, Object plan, JarFile moduleFile, URL appClientXmlUrl, String targetPath) throws DeploymentException {
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return createModule(plan, moduleFile, "war", null, true);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return createModule(plan, moduleFile, targetPath, specDDUrl, false);
+    }
+
+    private Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl, boolean standAlone) throws DeploymentException {
+        assert moduleFile != null: "moduleFile is null";
+        assert targetPath != null: "targetPath is null";
+        assert !targetPath.endsWith("/"): "targetPath must not end with a '/'";
+
         String specDD;
         XmlObject connector;
         try {
-            if (appClientXmlUrl == null) {
-                appClientXmlUrl = JarUtil.createJarURL(moduleFile, "META-INF/ra.xml");
+            if (specDDUrl == null) {
+                specDDUrl = JarUtil.createJarURL(moduleFile, "META-INF/ra.xml");
             }
 
-            specDD = IOUtil.readAll(appClientXmlUrl);
+            // read in the entire specDD as a string, we need this for getDeploymentDescriptor
+            // on the J2ee management object
+            specDD = IOUtil.readAll(specDDUrl);
 
+            // parse it
             try {
                 // try 1.0
                 ConnectorDocument10 connectorDoc = ConnectorDocument10.Factory.parse(specDD);
@@ -171,24 +186,12 @@
             }
         }
 
-        URI moduleURI;
-        if (targetPath != null) {
-            moduleURI = URI.create(targetPath);
-            if (targetPath.endsWith("/")) {
-                throw new DeploymentException("targetPath must not end with a '/'");
-            }
-            targetPath += "/";
-        } else {
-            targetPath = "connector/";
-            moduleURI = URI.create("");
-        }
-
-        return new ConnectorModule(name, configId, parentId, moduleURI, moduleFile, targetPath, connector, gerConnector, specDD);
+        return new ConnectorModule(standAlone, configId, parentId, moduleFile, targetPath, connector, gerConnector, specDD);
     }
 
     public void installModule(JarFile earFile, EARContext earContext, Module module) throws DeploymentException {
         try {
-            URI targetURI = URI.create(module.getTargetPath());
+            URI targetURI = URI.create(module.getTargetPath() + "/");
 
             JarFile moduleFile = module.getModuleFile();
 
@@ -226,8 +229,8 @@
         // TODO should the 1.5 ActivationSpecInfos be processed here? YES
     }
 
-    public void addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
-        addResourceAdapterModuleGBean(earContext, module, cl);
+    public String addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
+        ObjectName resourceAdapterModuleName = addResourceAdapterModuleGBean(earContext, module, cl);
 
         GerConnectorType geronimoConnector = (GerConnectorType) module.getVendorDD();
         XmlObject specDD = module.getSpecDD();
@@ -241,9 +244,11 @@
         for (int i = 0; i < gbeans.length; i++) {
             GBeanHelper.addGbean(new RARGBeanAdapter(gbeans[i]), cl, earContext);
         }
+
+        return resourceAdapterModuleName.getCanonicalName();
     }
 
-    private void addResourceAdapterModuleGBean(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
+    private ObjectName addResourceAdapterModuleGBean(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
         // build the objectName
         Properties nameProps = new Properties();
         nameProps.put("j2eeType", "ResourceAdapterModule");
@@ -251,9 +256,9 @@
         nameProps.put("J2EEServer", earContext.getJ2EEServerName());
         nameProps.put("J2EEApplication", earContext.getJ2EEApplicationName());
 
-        ObjectName resourceAdapterModuleObjectName = null;
+        ObjectName resourceAdapterModuleName = null;
         try {
-            resourceAdapterModuleObjectName = new ObjectName(earContext.getJ2EEDomainName(), nameProps);
+            resourceAdapterModuleName = new ObjectName(earContext.getJ2EEDomainName(), nameProps);
         } catch (MalformedObjectNameException e) {
             throw new DeploymentException("Unable to construct ResourceAdapterModule ObjectName", e);
         }
@@ -272,7 +277,9 @@
         }
 
         // add it
-        earContext.addGBean(resourceAdapterModuleObjectName, resourceAdapterModule);
+        earContext.addGBean(resourceAdapterModuleName, resourceAdapterModule);
+
+        return resourceAdapterModuleName;
     }
 
     private void addConnectorGBeans(EARContext context, ConnectorType10 connector, GerConnectorType geronimoConnector, ClassLoader cl) throws DeploymentException {

Modified: geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_0ConfigBuilderTest.java
==============================================================================
--- geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_0ConfigBuilderTest.java	(original)
+++ geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_0ConfigBuilderTest.java	Tue Sep 28 11:46:39 2004
@@ -40,7 +40,6 @@
 import junit.framework.TestCase;
 import org.apache.geronimo.deployment.DeploymentException;
 import org.apache.geronimo.deployment.util.JarUtil;
-import org.apache.geronimo.deployment.util.UnpackedJarFile;
 import org.apache.geronimo.gbean.GBeanInfo;
 import org.apache.geronimo.gbean.jmx.GBeanMBean;
 import org.apache.geronimo.j2ee.deployment.EARConfigBuilder;
@@ -89,22 +88,8 @@
 
     public void testBuildUnpackedModule() throws Exception {
         InstallAction action = new InstallAction() {
-            public File getVendorDD() {
-                return null;
-            }
-
-            public URL getSpecDD() {
-                return null;
-            }
-
-            private File rarFile = new File(basedir, "target/test-rar-10");
-
             public File getRARFile() {
-                return rarFile;
-            }
-
-            public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
-                moduleBuilder.installModule(new UnpackedJarFile(rarFile), earContext, module);
+                return new File(basedir, "target/test-rar-10");
             }
         };
         executeTestBuildModule(action);
@@ -120,14 +105,8 @@
                 return new File(basedir, "target/test-rar-10/dummy.xml").toURL();
             }
 
-            private File rarFile = new File(basedir, "target/test-rar-10");
-
             public File getRARFile() {
-                return rarFile;
-            }
-
-            public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
-                moduleBuilder.installModule(new UnpackedJarFile(rarFile), earContext, module);
+                return new File(basedir, "target/test-rar-10");
             }
         };
         try {
@@ -148,14 +127,8 @@
                 return new File(basedir, "target/test-rar-10/META-INF/ra.xml").toURL();
             }
 
-            private File rarFile = new File(basedir, "target/test-rar-10");
-
             public File getRARFile() {
-                return rarFile;
-            }
-
-            public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
-                moduleBuilder.installModule(new UnpackedJarFile(rarFile), earContext, module);
+                return new File(basedir, "target/test-rar-10");
             }
         };
         try {
@@ -176,37 +149,17 @@
                 return new File(basedir, "target/test-rar-10/META-INF/ra.xml").toURL();
             }
 
-            private File rarFile = new File(basedir, "target/test-rar-10");
-
             public File getRARFile() {
-                return rarFile;
-            }
-
-            public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
-                moduleBuilder.installModule(new UnpackedJarFile(rarFile), earContext, module);
+                return new File(basedir, "target/test-rar-10");
             }
-        };
+       };
         executeTestBuildModule(action);
     }
 
     public void testBuildPackedModule() throws Exception {
         InstallAction action = new InstallAction() {
-            public File getVendorDD() {
-                return null;
-            }
-
-            public URL getSpecDD() {
-                return null;
-            }
-
-            private File rarFile = new File(basedir, "target/test-rar-10.rar");
-
             public File getRARFile() {
-                return rarFile;
-            }
-
-            public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
-                moduleBuilder.installModule(JarUtil.createJarFile(rarFile), earContext, module);
+                return new File(basedir, "target/test-rar-10.rar");
             }
         };
         executeTestBuildModule(action);
@@ -215,8 +168,8 @@
     private void executeTestBuildModule(InstallAction action) throws Exception {
         String j2eeDomainName = "geronimo.server";
         String j2eeServerName = "TestGeronimoServer";
-        String j2eeApplicationName = "null";
         String j2eeModuleName = "org/apache/geronimo/j2ee/deployment/test";
+        String j2eeApplicationName = "null";
         ObjectName connectionTrackerName = new ObjectName("geronimo.connector:service=ConnectionTracker");
 
         ConnectorModuleBuilder moduleBuilder = new ConnectorModuleBuilder();
@@ -228,7 +181,7 @@
         Thread.currentThread().setContextClassLoader(cl);
 
         JarFile rarJarFile = JarUtil.createJarFile(rarFile);
-        Module module = moduleBuilder.createModule(j2eeModuleName, action.getVendorDD(), rarJarFile, action.getSpecDD(), "connector");
+        Module module = moduleBuilder.createModule(action.getVendorDD(), rarJarFile, j2eeModuleName, action.getSpecDD());
         if (module == null) {
             throw new DeploymentException("Was not a connector module");
         }
@@ -280,7 +233,6 @@
                 File planFile = new File(basedir, "src/test-data/data/external-application-plan.xml");
                 Object plan = configBuilder.getDeploymentPlan(planFile, rarFile);
                 configBuilder.buildConfiguration(outFile, null, plan, rarFile);
-
             } finally {
                 outFile.delete();
             }
@@ -449,14 +401,20 @@
         xmlOptions.setErrorListener(errors);
     }
 
-    private interface InstallAction {
-        File getRARFile();
+    private abstract class InstallAction {
+        public File getVendorDD() {
+            return null;
+        }
 
-        void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception;
+        public URL getSpecDD() throws MalformedURLException {
+            return null;
+        }
 
-        File getVendorDD() throws MalformedURLException;
+        public abstract File getRARFile();
 
-        URL getSpecDD() throws MalformedURLException;
+        public void install(ModuleBuilder moduleBuilder, EARContext earContext, Module module) throws Exception {
+            moduleBuilder.installModule(JarUtil.createJarFile(getRARFile()), earContext, module);
+        }
     }
 
 }

Modified: geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_5ConfigBuilderTest.java
==============================================================================
--- geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_5ConfigBuilderTest.java	(original)
+++ geronimo/trunk/modules/connector/src/test/org/apache/geronimo/connector/deployment/RAR_1_5ConfigBuilderTest.java	Tue Sep 28 11:46:39 2004
@@ -126,7 +126,7 @@
 
         Thread.currentThread().setContextClassLoader(cl);
 
-        Module module = moduleBuilder.createModule(j2eeModuleName, null, JarUtil.createJarFile(action.getRARFile()), null, null);
+        Module module = moduleBuilder.createModule(null, JarUtil.createJarFile(action.getRARFile()));
         assertEquals(j2eeModuleName, module.getConfigId().toString());
 
         File carFile = File.createTempFile("RARTest", ".car");

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/ConfigurationBuilder.java
==============================================================================
--- 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	Tue Sep 28 11:46:39 2004
@@ -21,6 +21,7 @@
 import java.io.IOException;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
+import java.util.List;
 
 /**
  * @version $Rev$ $Date$
@@ -46,5 +47,5 @@
      * @throws IOException if there was a problem reading or writing the files
      * @throws DeploymentException if there was a problem with the configuration
      */
-    void buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile module) throws IOException, DeploymentException;
+    List buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile module) throws IOException, DeploymentException;
 }

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/Deployer.java
==============================================================================
--- 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	Tue Sep 28 11:46:39 2004
@@ -22,6 +22,8 @@
 import java.net.URI;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Collections;
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
@@ -53,7 +55,7 @@
         this.store = store;
     }
 
-    public URI deploy(File moduleFile, File planFile) throws DeploymentException {
+    public List deploy(File moduleFile, File planFile) throws DeploymentException {
         return deploy(planFile, moduleFile, null, true, null, null);
     }
 
@@ -76,11 +78,17 @@
         String classPath = cmd.classPath;
 
 
-        URI uri = deploy(planFile, module, carfile, install, mainClass, classPath);
-        System.out.println("Deployment uri is " + uri);
+        List objectNames = deploy(planFile, module, carfile, install, mainClass, classPath);
+        if (!objectNames.isEmpty()) {
+            Iterator iterator = objectNames.iterator();
+            System.out.println("Deployed " + iterator.next());
+            while (iterator.hasNext()) {
+                System.out.println("    " + iterator.next());
+            }
+        }
     }
 
-    public URI deploy(File planFile, File moduleFile, File carfile, boolean install, String mainClass, String classPath) throws DeploymentException {
+    public List deploy(File planFile, File moduleFile, File carfile, boolean install, String mainClass, String classPath) throws DeploymentException {
         if (planFile == null && moduleFile == null) {
             throw new DeploymentException("No plan or module specified");
         }
@@ -132,13 +140,14 @@
 
 
         try {
-            builder.buildConfiguration(carfile, manifest, plan, module);
+            List objectNames = builder.buildConfiguration(carfile, manifest, plan, module);
 
             try {
                 if (install) {
-                    return store.install(carfile.toURL());
+                    store.install(carfile.toURL());
+                    return objectNames;
                 }
-                return null;
+                return Collections.EMPTY_LIST;
             } catch (InvalidConfigException e) {
                 // unlikely as we just built this
                 throw new DeploymentException(e);

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/TargetModuleIDImpl.java
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/TargetModuleIDImpl.java	(original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/TargetModuleIDImpl.java	Tue Sep 28 11:46:39 2004
@@ -28,10 +28,32 @@
 public class TargetModuleIDImpl implements TargetModuleID {
     private final Target target;
     private final String moduleID;
+    private final TargetModuleID parentTargetModuleID;
+    private final TargetModuleID[] childTargetModuleID;
 
     public TargetModuleIDImpl(Target target, String moduleID) {
         this.target = target;
         this.moduleID = moduleID;
+        parentTargetModuleID = null;
+        childTargetModuleID = null;
+    }
+
+    public TargetModuleIDImpl(Target target, String moduleID, String[] childIDs) {
+        this.target = target;
+        this.moduleID = moduleID;
+        parentTargetModuleID = null;
+        childTargetModuleID = new TargetModuleID[childIDs.length];
+        for (int i = 0; i < childIDs.length; i++) {
+            String childID = childIDs[i];
+            childTargetModuleID[i] = new TargetModuleIDImpl(target, childID, this);
+        }
+    }
+
+    private TargetModuleIDImpl(Target target, String moduleID, TargetModuleID parent) {
+        this.target = target;
+        this.moduleID = moduleID;
+        this.parentTargetModuleID = parent;
+        childTargetModuleID = null;
     }
 
     public Target getTarget() {
@@ -43,11 +65,11 @@
     }
 
     public TargetModuleID getParentTargetModuleID() {
-        return null;
+        return parentTargetModuleID;
     }
 
     public TargetModuleID[] getChildTargetModuleID() {
-        return null;
+        return childTargetModuleID;
     }
 
     public String getWebURL() {

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java	(original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/plugin/local/DistributeCommand.java	Tue Sep 28 11:46:39 2004
@@ -22,8 +22,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.URI;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Set;
 import javax.enterprise.deploy.shared.CommandType;
 import javax.enterprise.deploy.spi.Target;
@@ -91,9 +91,16 @@
             }
 
             Object[] args = {moduleArchive, deploymentPlan};
-            URI configId = (URI) kernel.invoke(deployer, "deploy", args, DEPLOY_SIG);
-            TargetModuleID moduleID = new TargetModuleIDImpl(targetList[0], configId.toString());
-            addModule(moduleID);
+            List objectNames = (List) kernel.invoke(deployer, "deploy", args, DEPLOY_SIG);
+            if (objectNames != null && !objectNames.isEmpty()) {
+                String parentName = (String) objectNames.get(0);
+
+                List childNames = objectNames.subList(1, objectNames.size());
+                String[] childIDs = (String[]) childNames.toArray(new String[childNames.size()]);
+
+                TargetModuleID moduleID = new TargetModuleIDImpl(targetList[0], parentName.toString(), childIDs);
+                addModule(moduleID);
+            }
             complete("Completed");
         } catch (Exception e) {
             doFail(e);

Modified: geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java
==============================================================================
--- geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java	(original)
+++ geronimo/trunk/modules/deployment/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java	Tue Sep 28 11:46:39 2004
@@ -32,6 +32,8 @@
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
 import java.util.zip.ZipEntry;
+import java.util.List;
+import java.util.Collections;
 import javax.management.MalformedObjectNameException;
 
 import org.apache.geronimo.deployment.ConfigurationBuilder;
@@ -82,7 +84,7 @@
         }
     }
 
-    public void buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile unused) throws IOException, DeploymentException {
+    public List buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile unused) throws IOException, DeploymentException {
         FileOutputStream fos = new FileOutputStream(outfile);
         try {
             JarOutputStream os = new JarOutputStream(new BufferedOutputStream(fos), manifest);
@@ -94,7 +96,7 @@
             }
 
             buildConfiguration(os, (XmlObject) plan);
-
+            return Collections.EMPTY_LIST;
         } finally {
             fos.close();
         }

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/AppClientModule.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/AppClientModule.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/AppClientModule.java	Tue Sep 28 11:46:39 2004
@@ -16,14 +16,13 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
-import java.util.jar.JarFile;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Collection;
 import java.net.URI;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.jar.JarFile;
 
-import org.apache.xmlbeans.XmlObject;
 import org.apache.geronimo.kernel.config.ConfigurationModuleType;
+import org.apache.xmlbeans.XmlObject;
 
 /**
  * @version $Rev: 46019 $ $Date: 2004-09-14 02:56:06 -0700 (Tue, 14 Sep 2004) $
@@ -34,8 +33,8 @@
 
     private JarFile earFile;
 
-    public AppClientModule(String name, URI configId, URI parentId, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
-        super(name, configId, parentId, moduleURI, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
+    public AppClientModule(boolean standAlone, URI configId, URI parentId, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+        super(standAlone, configId, parentId, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
     }
 
     public ConfigurationModuleType getType() {

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ConnectorModule.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ConnectorModule.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ConnectorModule.java	Tue Sep 28 11:46:39 2004
@@ -26,8 +26,8 @@
  * @version $Rev$ $Date$
  */
 public class ConnectorModule extends Module {
-    public ConnectorModule(String name, URI configId, URI parentId, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
-        super(name, configId, parentId, moduleURI, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
+    public ConnectorModule(boolean standAlone, URI configId, URI parentId, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+        super(standAlone, configId, parentId, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
     }
 
     public ConfigurationModuleType getType() {

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java	Tue Sep 28 11:46:39 2004
@@ -29,8 +29,10 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.Set;
+import java.util.List;
 import java.util.jar.JarFile;
 import java.util.jar.JarOutputStream;
 import java.util.jar.Manifest;
@@ -113,31 +115,24 @@
             return plan;
         }
 
-        // give the module the default name of the module file
-        String name = new File(jarFile.getName()).getName();
-
         // get the modules either the application plan or for a stand alone module from the specific deployer
         Module module = null;
         if (webConfigBuilder != null) {
-            module = webConfigBuilder.createModule(name, planFile, jarFile, null, null);
+            module = webConfigBuilder.createModule(planFile, jarFile);
         }
         if (module == null && ejbConfigBuilder != null) {
-            module = ejbConfigBuilder.createModule(name, planFile, jarFile, null, null);
+            module = ejbConfigBuilder.createModule(planFile, jarFile);
         }
         if (module == null && connectorConfigBuilder != null) {
-            module = connectorConfigBuilder.createModule(name, planFile, jarFile, null, null);
+            module = connectorConfigBuilder.createModule(planFile, jarFile);
         }
         if (module == null && appClientConfigBuilder != null) {
-            module = appClientConfigBuilder.createModule(name, planFile, jarFile, null, null);
+            module = appClientConfigBuilder.createModule(planFile, jarFile);
         }
         if (module == null) {
             return null;
         }
 
-        // in the case of a stand alone module we actually want the name to be the
-        // config id, which may be derived from the module file name set above
-        module.setName(module.getConfigId().toString());
-
         return new ApplicationInfo(module.getType(),
                 module.getConfigId(),
                 module.getParentId(),
@@ -248,10 +243,12 @@
         return gerApplication;
     }
 
-    public void buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile earFile) throws IOException, DeploymentException {
+    public List buildConfiguration(File outfile, Manifest manifest, Object plan, JarFile earFile) throws IOException, DeploymentException {
         ApplicationInfo applicationInfo = (ApplicationInfo) plan;
         FileOutputStream fos = new FileOutputStream(outfile);
         try {
+            List moduleIDs = new LinkedList();
+
             // Create the output ear context
             JarOutputStream os = new JarOutputStream(new BufferedOutputStream(fos));
             EARContext earContext = null;
@@ -324,17 +321,21 @@
                     throw new DeploymentException("Error initializing J2EEApplication managed object");
                 }
                 gbean.setReferencePatterns("j2eeServer", Collections.singleton(j2eeServer));
-                earContext.addGBean(earContext.getApplicationObjectName(), gbean);
+                ObjectName applicationName = earContext.getApplicationObjectName();
+                earContext.addGBean(applicationName, gbean);
+                moduleIDs.add(applicationName.getCanonicalName());
             }
 
             // each module can now add it's GBeans
             for (Iterator iterator = modules.iterator(); iterator.hasNext();) {
                 Module module = (Module) iterator.next();
-                getBuilder(module).addGBeans(earContext, module, cl);
+                String moduleID = getBuilder(module).addGBeans(earContext, module, cl);
+                moduleIDs.add(moduleID);
             }
 
             earContext.close();
             os.flush();
+            return moduleIDs;
         } finally {
             fos.close();
         }
@@ -424,11 +425,10 @@
                 altSpecDD = JarUtil.createJarURL(earFile, moduleXml.getAltDd().getStringValue());
             }
 
-            Module module = builder.createModule(modulePath,
-                    altVendorDDs.get(modulePath),
+            Module module = builder.createModule(altVendorDDs.get(modulePath),
                     new NestedJarFile(earFile, modulePath),
-                    altSpecDD,
-                    modulePath);
+                    modulePath,
+                    altSpecDD);
 
             if (module == null) {
                 throw new DeploymentException("Module was not " + moduleTypeName + ": " + modulePath);

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EJBModule.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EJBModule.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/EJBModule.java	Tue Sep 28 11:46:39 2004
@@ -26,8 +26,8 @@
  * @version $Rev$ $Date$
  */
 public class EJBModule extends Module {
-    public EJBModule(String name, URI configId, URI parentId, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
-        super(name, configId, parentId, moduleURI, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
+    public EJBModule(boolean standAlone, URI configId, URI parentId, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+        super(standAlone, configId, parentId, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
     }
 
     public ConfigurationModuleType getType() {

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/Module.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/Module.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/Module.java	Tue Sep 28 11:46:39 2004
@@ -26,7 +26,8 @@
  * @version $Rev$ $Date$
  */
 public abstract class Module {
-    private String name;
+    private final boolean standAlone;
+    private final String name;
     private final URI configId;
     private final URI parentId;
     private final URI moduleURI;
@@ -36,16 +37,23 @@
     private final XmlObject vendorDD;
     private final String originalSpecDD;
 
-    public Module(String name, URI configId, URI parentId, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
-        this.name = name;
+    protected Module(boolean standAlone, URI configId, URI parentId, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+        this.standAlone = standAlone;
         this.configId = configId;
         this.parentId = parentId;
-        this.moduleURI = moduleURI;
         this.moduleFile = moduleFile;
         this.targetPath = targetPath;
         this.specDD = specDD;
         this.vendorDD = vendorDD;
         this.originalSpecDD = originalSpecDD;
+
+        if (standAlone) {
+            name = configId.toString();
+            moduleURI = URI.create("");
+        } else {
+            name = targetPath;
+            moduleURI = URI.create(targetPath);
+        }
     }
 
     public abstract ConfigurationModuleType  getType();
@@ -54,8 +62,8 @@
         return name;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    public boolean isStandAlone() {
+        return standAlone;
     }
 
     public URI getConfigId() {

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java	Tue Sep 28 11:46:39 2004
@@ -16,6 +16,7 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
+import java.io.File;
 import java.net.URL;
 import java.util.jar.JarFile;
 
@@ -25,12 +26,13 @@
  * @version $Rev$ $Date$
  */
 public interface ModuleBuilder {
-    Module createModule(String name, Object planFile, JarFile moduleFile, URL specDDUrl, String targetPath) throws DeploymentException;
+    Module createModule(File plan, JarFile moduleFile) throws DeploymentException;
+
+    Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException;
 
     void installModule(JarFile earFile, EARContext earContext, Module module) throws DeploymentException;
 
     void initContext(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException;
 
-    void addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException;
-
+    String addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException;
 }

Modified: geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/WebModule.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/WebModule.java	(original)
+++ geronimo/trunk/modules/j2ee/src/java/org/apache/geronimo/j2ee/deployment/WebModule.java	Tue Sep 28 11:46:39 2004
@@ -28,8 +28,8 @@
 public class WebModule extends Module {
     private String contextRoot;
 
-    public WebModule(String name, URI configId, URI parentId, URI moduleURI, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
-        super(name, configId, parentId, moduleURI, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
+    public WebModule(boolean standAlone, URI configId, URI parentId, JarFile moduleFile, String targetPath, XmlObject specDD, XmlObject vendorDD, String originalSpecDD) {
+        super(standAlone, configId, parentId, moduleFile, targetPath, specDD, vendorDD, originalSpecDD);
     }
 
     public String getContextRoot() {

Modified: geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTest.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTest.java	(original)
+++ geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTest.java	Tue Sep 28 11:46:39 2004
@@ -18,7 +18,6 @@
 package org.apache.geronimo.j2ee.deployment;
 
 import java.io.File;
-import java.net.URI;
 import java.util.jar.JarFile;
 import javax.management.ObjectName;
 
@@ -54,11 +53,11 @@
         TestSetup setup14 = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-ear14/test-ear.ear"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar", null, null, URI.create("test-ejb-jar.jar"), null, "test-ejb-jar.jar", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war", null, null, URI.create("test-war.war"), null, "test-war.war", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -67,11 +66,11 @@
         TestSetup setupNaked14 = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-ear14/test-naked-ear.ear"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar", null, null, URI.create("test-ejb-jar.jar"), null, "test-ejb-jar.jar", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war", null, null, URI.create("test-war.war"), null, "test-war.war", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -80,11 +79,11 @@
         TestSetup setup13 = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-ear13/test-ear.ear"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar", null, null, URI.create("test-ejb-jar.jar"), null, "test-ejb-jar.jar", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war", null, null, URI.create("test-war.war"), null, "test-war.war", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -93,11 +92,11 @@
         TestSetup setupNaked13 = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir, "target/test-ear13/test-naked-ear.ear"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar", null, null, URI.create("test-ejb-jar.jar"), null, "test-ejb-jar.jar", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war", null, null, URI.create("test-war.war"), null, "test-war.war", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -106,11 +105,11 @@
         TestSetup setupUnpacked = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-unpacked-ear/full/"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar/", null, null, URI.create("test-ejb-jar.jar/"), null, "test-ejb-jar.jar/", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar/", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war/", null, null, URI.create("test-war.war/"), null, "test-war.war/", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war/", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -119,11 +118,11 @@
         TestSetup setupUnpackedNaked = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-unpacked-ear/naked/"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar/", null, null, URI.create("test-ejb-jar.jar/"), null, "test-ejb-jar.jar/", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar/", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war/", null, null, URI.create("test-war.war/"), null, "test-war.war", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -132,11 +131,11 @@
         TestSetup setupUnpackedAltDD = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-unpacked-ear/alt-dd/"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar/", null, null, URI.create("test-ejb-jar.jar/"), null, "test-ejb-jar.jar/", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar/", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war/", null, null, URI.create("test-war.war/"), null, "test-war.war/", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war/", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {
@@ -145,11 +144,11 @@
         TestSetup setupPackedAltDD = new TestSetup(inner) {
             protected void setUp() throws Exception {
                 earFile = JarUtil.createJarFile(new File(basedir,  "target/test-unpacked-ear/alt-dd.ear"));
-                ejbConfigBuilder.ejbModule = new EJBModule("test-ejb-jar.jar/", null, null, URI.create("test-ejb-jar.jar/"), null, "test-ejb-jar.jar/", null, null, null);
+                ejbConfigBuilder.ejbModule = new EJBModule(false, null, null, null, "test-ejb-jar.jar/", null, null, null);
                 webConfigBuilder.contextRoot = "test";
-                webConfigBuilder.webModule = new WebModule("test-war.war/", null, null, URI.create("test-war.war/"), null, "test-war.war/", null, null, null);
+                webConfigBuilder.webModule = new WebModule(false, null, null, null, "test-war.war/", null, null, null);
                 webConfigBuilder.webModule.setContextRoot("test");
-                connectorConfigBuilder.connectorModule = new ConnectorModule("test-rar.rar", null, null, URI.create("test-rar.rar"), null, "test-rar.rar", null, null, null);
+                connectorConfigBuilder.connectorModule = new ConnectorModule(false, null, null, null, "test-rar.rar", null, null, null);
             }
 
             protected void tearDown() {

Modified: geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java	(original)
+++ geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java	Tue Sep 28 11:46:39 2004
@@ -16,8 +16,8 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
+import java.io.File;
 import java.net.URL;
-import java.net.URI;
 import java.util.jar.JarFile;
 
 import junit.framework.Assert;
@@ -31,8 +31,12 @@
     public Module connectorModule;
     public ClassLoader cl;
 
-    public Module createModule(String name, Object planFile, JarFile moduleFile, URL specDDUrl, String targetPath) throws DeploymentException {
-        return new ConnectorModule(name, null, null, URI.create(targetPath), moduleFile, targetPath, null, null, null);
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return new ConnectorModule(true, null, null, moduleFile, "connector", null, null, null);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return new ConnectorModule(false, null, null, moduleFile, targetPath, null, null, null);
     }
 
     public void installModule(JarFile earFile, EARContext earContext, Module connectorModule) {
@@ -55,10 +59,11 @@
         this.cl = cl;
     }
 
-    public void addGBeans(EARContext earContext, Module connectorModule, ClassLoader cl) {
+    public String addGBeans(EARContext earContext, Module connectorModule, ClassLoader cl) {
         assertEquals(this.earContext, earContext);
 //        assertEquals(this.connectorModule, connectorModule);
         assertEquals(this.cl, cl);
+        return null;
     }
 
 }

Modified: geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java	(original)
+++ geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java	Tue Sep 28 11:46:39 2004
@@ -16,8 +16,8 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
+import java.io.File;
 import java.net.URL;
-import java.net.URI;
 import java.util.jar.JarFile;
 
 import junit.framework.Assert;
@@ -31,8 +31,12 @@
     public EJBModule ejbModule;
     public ClassLoader cl;
 
-    public Module createModule(String name, Object planFile, JarFile moduleFile, URL specDDUrl, String targetPath) throws DeploymentException {
-        return new EJBModule(name, null, null, URI.create(targetPath), moduleFile, targetPath, null, null, null);
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return new EJBModule(true, null, null, moduleFile, "ejb.jar", null, null, null);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return new EJBModule(false, null, null, moduleFile, targetPath, null, null, null);
     }
 
     public void installModule(JarFile earFile, EARContext earContext, Module ejbModule) {
@@ -55,10 +59,11 @@
         this.cl = cl;
     }
 
-    public void addGBeans(EARContext earContext, Module ejbModule, ClassLoader cl) {
+    public String addGBeans(EARContext earContext, Module ejbModule, ClassLoader cl) {
         assertEquals(this.earContext, earContext);
 //        assertEquals(this.ejbModule, ejbModule);
         assertEquals(this.cl, cl);
+        return null;
     }
 
 }

Modified: geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java
==============================================================================
--- geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java	(original)
+++ geronimo/trunk/modules/j2ee/src/test/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java	Tue Sep 28 11:46:39 2004
@@ -16,10 +16,12 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
+import java.io.File;
 import java.net.URL;
-import java.net.URI;
 import java.util.jar.JarFile;
 
+import javax.management.ObjectName;
+
 import junit.framework.Assert;
 import org.apache.geronimo.deployment.DeploymentException;
 
@@ -32,8 +34,12 @@
     public ClassLoader cl;
     public String contextRoot;
 
-    public Module createModule(String name, Object planFile, JarFile moduleFile, URL specDDUrl, String targetPath) throws DeploymentException {
-        return new WebModule(name, null, null, URI.create(targetPath), moduleFile, targetPath, null, null, null);
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return new WebModule(true, null, null, moduleFile, "war", null, null, null);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return new WebModule(false, null, null, moduleFile, targetPath, null, null, null);
     }
 
     public void installModule(JarFile earFile, EARContext earContext, Module webModule) throws DeploymentException {
@@ -56,12 +62,13 @@
         this.cl = cl;
     }
 
-    public void addGBeans(EARContext earContext, Module webModule, ClassLoader cl) throws DeploymentException {
+    public String addGBeans(EARContext earContext, Module webModule, ClassLoader cl) throws DeploymentException {
         assertEquals(this.earContext, earContext);
 //        assertEquals(this.webModule, webModule);
         assertEquals(this.cl, cl);
         assertNotNull(contextRoot);
         this.contextRoot = ((WebModule) webModule).getContextRoot();
+        return null;
     }
 
 }

Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java
==============================================================================
--- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java	(original)
+++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/deployment/JettyModuleBuilder.java	Tue Sep 28 11:46:39 2004
@@ -85,17 +85,32 @@
 public class JettyModuleBuilder implements ModuleBuilder {
     private static final String PARENT_ID = "org/apache/geronimo/Server";
 
-    public Module createModule(String name, Object plan, JarFile moduleFile, URL webXmlUrl, String targetPath) throws DeploymentException {
+    public Module createModule(File plan, JarFile moduleFile) throws DeploymentException {
+        return createModule(plan, moduleFile, "war", null, true);
+    }
+
+    public Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl) throws DeploymentException {
+        return createModule(plan, moduleFile, targetPath, specDDUrl, false);
+    }
+
+    private Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl, boolean standAlone) throws DeploymentException {
+        assert moduleFile != null: "moduleFile is null";
+        assert targetPath != null: "targetPath is null";
+        assert !targetPath.endsWith("/"): "targetPath must not end with a '/'";
+
+        // parse the spec dd
         String specDD;
         WebAppType webApp;
         try {
-            if (webXmlUrl == null) {
-                webXmlUrl = JarUtil.createJarURL(moduleFile, "WEB-INF/web.xml");
+            if (specDDUrl == null) {
+                specDDUrl = JarUtil.createJarURL(moduleFile, "WEB-INF/web.xml");
             }
 
-            specDD = IOUtil.readAll(webXmlUrl);
+            // read in the entire specDD as a string, we need this for getDeploymentDescriptor
+            // on the J2ee management object
+            specDD = IOUtil.readAll(specDDUrl);
 
-            // check if we have an alt spec dd
+            // parse it
             WebAppDocument webAppDoc = SchemaConversionUtils.convertToServletSchema(SchemaConversionUtils.parse(specDD));
             webApp = webAppDoc.getWebApp();
         } catch (Exception e) {
@@ -103,7 +118,8 @@
         }
 
 
-        JettyWebAppType jettyWebApp = getJettyWebApp(plan, moduleFile, name, webApp);
+        // parse vendor dd
+        JettyWebAppType jettyWebApp = getJettyWebApp(plan, moduleFile, standAlone, targetPath, webApp);
 
         // get the ids from either the application plan or for a stand alone module from the specific deployer
         URI configId = null;
@@ -122,24 +138,12 @@
             }
         }
 
-        URI moduleURI;
-        if (targetPath != null) {
-            moduleURI = URI.create(targetPath);
-            if (targetPath.endsWith("/")) {
-                throw new DeploymentException("targetPath must not end with a '/'");
-            }
-            targetPath += "/";
-        } else {
-            targetPath = "war/";
-            moduleURI = URI.create("");
-        }
-
-        WebModule module = new WebModule(name, configId, parentId, moduleURI, moduleFile, targetPath, webApp, jettyWebApp, specDD);
+        WebModule module = new WebModule(standAlone, configId, parentId, moduleFile, targetPath, webApp, jettyWebApp, specDD);
         module.setContextRoot(jettyWebApp.getContextRoot());
         return module;
     }
 
-    JettyWebAppType getJettyWebApp(Object plan, JarFile moduleFile, String name, WebAppType webApp) throws DeploymentException {
+    JettyWebAppType getJettyWebApp(Object plan, JarFile moduleFile, boolean standAlone, String targetPath, WebAppType webApp) throws DeploymentException {
         JettyWebAppType jettyWebApp = null;
         try {
             // load the geronimo-jetty.xml from either the supplied plan or from the earFile
@@ -164,12 +168,20 @@
             } catch (IOException e) {
             }
 
-            // if we got one extract the validate it otherwise create a default one
+            // if we got one extract and validate it otherwise create a default one
             if (jettyWebApp != null) {
                 jettyWebApp = (JettyWebAppType) SchemaConversionUtils.convertToGeronimoNamingSchema(jettyWebApp);
                 SchemaConversionUtils.validateDD(jettyWebApp);
             } else {
-                jettyWebApp = createDefaultPlan(name, webApp);
+                String path;
+                if (standAlone) {
+                    // default configId is based on the moduleFile name
+                    path = new File(moduleFile.getName()).getName();
+                } else {
+                    // default configId is based on the module uri from the application.xml
+                    path = targetPath;
+                }
+                jettyWebApp = createDefaultPlan(path, webApp);
             }
         } catch (XmlException e) {
             throw new DeploymentException(e);
@@ -177,10 +189,10 @@
         return jettyWebApp;
     }
 
-    private JettyWebAppType createDefaultPlan(String name, WebAppType webApp) {
+    private JettyWebAppType createDefaultPlan(String path, WebAppType webApp) {
         String id = webApp.getId();
         if (id == null) {
-            id = name;
+            id = path;
             if (id.endsWith(".war")) {
                 id = id.substring(0, id.length() - 4);
             }
@@ -203,7 +215,7 @@
 
     public void installModule(JarFile earFile, EARContext earContext, Module module) throws DeploymentException {
         try {
-            URI targetURI = URI.create(module.getTargetPath());
+            URI targetURI = URI.create(module.getTargetPath() + "/");
 
             // add the warfile's content to the configuration
             JarFile warFile = module.getModuleFile();
@@ -239,7 +251,7 @@
         // web application do not add anything to the shared context
     }
 
-    public void addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
+    public String addGBeans(EARContext earContext, Module module, ClassLoader cl) throws DeploymentException {
         WebModule webModule = (WebModule) module;
 
         WebAppType webApp = (WebAppType) webModule.getSpecDD();
@@ -259,9 +271,9 @@
         nameProps.put("J2EEApplication", earContext.getJ2EEApplicationName());
         nameProps.put("j2eeType", "WebModule");
         nameProps.put("name", webModule.getName());
-        ObjectName name;
+        ObjectName webModuleName;
         try {
-            name = new ObjectName(earContext.getJ2EEDomainName(), nameProps);
+            webModuleName = new ObjectName(earContext.getJ2EEDomainName(), nameProps);
         } catch (MalformedObjectNameException e) {
             throw new DeploymentException("Unable to construct ObjectName", e);
         }
@@ -279,7 +291,7 @@
                 gbean = new GBeanMBean(JettyWebAppJACCContext.GBEAN_INFO, cl);
             }
 
-            gbean.setAttribute("uri", URI.create(module.getTargetPath()));
+            gbean.setAttribute("uri", URI.create(module.getTargetPath() + "/"));
             gbean.setAttribute("contextPath", webModule.getContextRoot());
             gbean.setAttribute("contextPriorityClassLoader", Boolean.valueOf(jettyWebApp.getContextPriorityClassloader()));
             if (security != null) {
@@ -303,7 +315,8 @@
         } catch (Exception e) {
             throw new DeploymentException("Unable to initialize webapp GBean", e);
         }
-        earContext.addGBean(name, gbean);
+        earContext.addGBean(webModuleName, gbean);
+        return webModuleName.getCanonicalName();
     }
 
     private ReadOnlyContext buildComponentContext(EARContext earContext, WebModule webModule, WebAppType webApp, JettyWebAppType jettyWebApp, UserTransaction userTransaction, ClassLoader cl) throws DeploymentException {

Modified: geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java
==============================================================================
--- geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java	(original)
+++ geronimo/trunk/modules/jetty/src/test/org/apache/geronimo/jetty/deployment/PlanParsingTest.java	Tue Sep 28 11:46:39 2004
@@ -11,14 +11,13 @@
 /**
  */
 public class PlanParsingTest extends TestCase {
-
     private JettyModuleBuilder builder = new JettyModuleBuilder();
-    File basedir = new File(System.getProperty("basedir", "."));
+    private File basedir = new File(System.getProperty("basedir", "."));
 
     public void testResourceRef() throws Exception {
         File resourcePlan = new File(basedir, "src/test-resources/plans/plan1.xml");
         assertTrue(resourcePlan.exists());
-        JettyWebAppType jettyWebApp = builder.getJettyWebApp(resourcePlan, null, null, null);
+        JettyWebAppType jettyWebApp = builder.getJettyWebApp(resourcePlan, null, true, null, null);
         assertEquals(1, jettyWebApp.getResourceRefArray().length);
     }