You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/12/05 07:24:28 UTC

svn commit: r887507 - in /geronimo/server/trunk/plugins: aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ connector-1_6/geronimo-connector-bui...

Author: gawor
Date: Sat Dec  5 06:24:26 2009
New Revision: 887507

URL: http://svn.apache.org/viewvc?rev=887507&view=rev
Log:
GERONIMO-4975: Simplify integrating new ModuleBuilders with EARConfigBuilder

Removed:
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableModuleBuilder.java
Modified:
    geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java
    geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
    geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
    geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java
    geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java
    geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
    geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java

Modified: geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -216,4 +216,11 @@
         return null;
     }
 
+    public int getPriority() {
+        return 50;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return AriesAppModule.class.isAssignableFrom(moduleType);
+    }
 }

Modified: geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -839,6 +839,14 @@
         return GERAPPCLIENT_NAMESPACE;
     }
 
+    public int getPriority() {
+        return 40;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return AppClientModule.class.isAssignableFrom(moduleType);
+    }
+    
     public void addManifestClassPath(DeploymentContext deploymentContext, JarFile earFile, JarFile jarFile, URI jarFileLocation) throws DeploymentException {
         Manifest manifest;
         try {

Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -536,6 +536,14 @@
         return GERCONNECTOR_NAMESPACE;
     }
 
+    public int getPriority() {
+        return 30;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return ConnectorModule.class.isAssignableFrom(moduleType);
+    }
+    
     private void addConnectorGBeans(EARContext earContext, AbstractName jcaResourceName, GBeanData resourceAdapterModuleData, ConnectorType connector, GerConnectorType geronimoConnector, Bundle bundle) throws DeploymentException {
         ResourceadapterType resourceadapter = connector.getResourceadapter();
 

Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java (original)
+++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java Sat Dec  5 06:24:26 2009
@@ -22,6 +22,7 @@
 import java.net.URL;
 import java.sql.Connection;
 import java.sql.Statement;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
@@ -29,7 +30,6 @@
 import java.util.HashMap;
 import java.util.jar.JarFile;
 
-import javax.naming.Reference;
 import javax.sql.DataSource;
 import org.apache.geronimo.common.DeploymentException;
 import org.apache.geronimo.deployment.DeploymentContext;
@@ -41,7 +41,6 @@
 import org.apache.geronimo.gbean.AbstractNameQuery;
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.GBeanInfo;
-import org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator;
 import org.apache.geronimo.j2ee.deployment.EARConfigBuilder;
 import org.apache.geronimo.j2ee.deployment.EARContext;
 import org.apache.geronimo.j2ee.deployment.Module;
@@ -90,22 +89,6 @@
     private Environment defaultEnvironment;
     private ConfigurationStore configurationStore = new MockConfigStore();
     private MockRepository repository;
-
-    private ActivationSpecInfoLocator activationSpecInfoLocator = new ActivationSpecInfoLocator() {
-
-        public Reference createResourceRef(AbstractNameQuery containerId, Class iface, Configuration configuration) {
-            return null;
-        }
-
-        public Reference createAdminObjectRef(AbstractNameQuery containerId, Class iface, Configuration configuration) {
-            return null;
-        }
-
-        public GBeanData locateActivationSpecInfo(AbstractNameQuery nameQuery, String messageListenerInterface, Configuration configuration) {
-            return null;
-        }
-    };
-
     private Kernel kernel;
     private ConfigurationManager configurationManager;
     private static final Naming naming = new Jsr77Naming();
@@ -122,17 +105,15 @@
             rarFile = DeploymentUtil.createJarFile(new File(BASEDIR, "target/test-ear-noger.ear"));
             GBeanBuilder serviceBuilder = new GBeanBuilder(null, null);
 //            EARConfigBuilder configBuilder = new EARConfigBuilder(defaultEnvironment, transactionContextManagerName, connectionTrackerName, null, null, null, new AbstractNameQuery(serverName, J2EEServerImpl.GBEAN_INFO.getInterfaces()), null, null, ejbReferenceBuilder, null,
+            List<ModuleBuilder> builders = new ArrayList<ModuleBuilder>();
+            builders.add(new ConnectorModuleBuilder(defaultEnvironment, defaultMaxSize, defaultMinSize, defaultBlockingTimeoutMilliseconds, defaultidleTimeoutMinutes, defaultXATransactionCaching, defaultXAThreadCaching, defaultWorkManagerName, Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)));
             EARConfigBuilder configBuilder = new EARConfigBuilder(defaultEnvironment,
                     transactionManagerName,
                     connectionTrackerName,
                     null,
                     new AbstractNameQuery(serverName, J2EEServerImpl.GBEAN_INFO.getInterfaces()),
                     Collections.singleton(repository),
-                    null,
-                    null,
-                    new ConnectorModuleBuilder(defaultEnvironment, defaultMaxSize, defaultMinSize, defaultBlockingTimeoutMilliseconds, defaultidleTimeoutMinutes, defaultXATransactionCaching, defaultXAThreadCaching, defaultWorkManagerName, Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)),
-                    activationSpecInfoLocator,
-                    null,
+                    builders, 
                     serviceBuilder,
                     null,
                     kernel.getNaming(),

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java Sat Dec  5 06:24:26 2009
@@ -24,6 +24,7 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -60,7 +61,6 @@
 import org.apache.geronimo.gbean.GBeanData;
 import org.apache.geronimo.gbean.GBeanLifecycle;
 import org.apache.geronimo.gbean.ReferencePatterns;
-import org.apache.geronimo.gbean.SingleElementCollection;
 import org.apache.geronimo.gbean.annotation.GBean;
 import org.apache.geronimo.gbean.annotation.ParamAttribute;
 import org.apache.geronimo.gbean.annotation.ParamReference;
@@ -123,11 +123,7 @@
 
     private final ConfigurationManager configurationManager;
     private final Collection<? extends Repository> repositories;
-    private final SingleElementCollection ejbConfigBuilder;
-    private final SingleElementCollection webConfigBuilder;
-    private final SingleElementCollection connectorConfigBuilder;
-    private final SingleElementCollection appClientConfigBuilder;
-    private final SingleElementCollection resourceReferenceBuilder;
+    private final Collection<ModuleBuilder> moduleBuilders;
     private final NamespaceDrivenBuilderCollection serviceBuilders;
     private final Collection<ModuleBuilderExtension> persistenceUnitBuilders;
 
@@ -154,57 +150,13 @@
         }
     };
 
-//    static {
-//        GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(EARConfigBuilder.class, NameFactory.CONFIG_BUILDER);
-//        infoBuilder.addAttribute("defaultEnvironment", Environment.class, true, true);
-//        infoBuilder.addAttribute("transactionManagerAbstractName", AbstractNameQuery.class, true);
-//        infoBuilder.addAttribute("connectionTrackerAbstractName", AbstractNameQuery.class, true);
-//        infoBuilder.addAttribute("corbaGBeanAbstractName", AbstractNameQuery.class, true);
-//        infoBuilder.addAttribute("serverName", AbstractNameQuery.class, true);
-//
-//        infoBuilder.addReference("Repositories", Repository.class, "Repository");
-//        infoBuilder.addReference("EJBConfigBuilder", ModuleBuilder.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("WebConfigBuilder", ModuleBuilder.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("ConnectorConfigBuilder", ModuleBuilder.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("ActivationSpecInfoLocator", ActivationSpecInfoLocator.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("AppClientConfigBuilder", ModuleBuilder.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("ServiceBuilders", NamespaceDrivenBuilder.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("PersistenceUnitBuilders", ModuleBuilderExtension.class, NameFactory.MODULE_BUILDER);
-//        infoBuilder.addReference("ArtifactResolvers", ArtifactResolver.class, "ArtifactResolver");
-//
-//        infoBuilder.addAttribute("kernel", Kernel.class, false);
-//
-//        infoBuilder.setConstructor(new String[]{
-//                "defaultEnvironment",
-//                "transactionManagerAbstractName",
-//                "connectionTrackerAbstractName",
-//                "corbaGBeanAbstractName",
-//                "serverName",
-//                "Repositories",
-//                "EJBConfigBuilder",
-//                "WebConfigBuilder",
-//                "ConnectorConfigBuilder",
-//                "ActivationSpecInfoLocator",
-//                "AppClientConfigBuilder",
-//                "ServiceBuilders",
-//                "PersistenceUnitBuilders",
-//                "ArtifactResolvers",
-//                "kernel"
-//        });
-//
-//    }
-
     public EARConfigBuilder(@ParamAttribute(name = "defaultEnvironment") Environment defaultEnvironment,
                             @ParamAttribute(name = "transactionManagerAbstractName") AbstractNameQuery transactionManagerAbstractName,
                             @ParamAttribute(name = "connectionTrackerAbstractName") AbstractNameQuery connectionTrackerAbstractName,
                             @ParamAttribute(name = "corbaGBeanAbstractName") AbstractNameQuery corbaGBeanAbstractName,
                             @ParamAttribute(name = "serverName") AbstractNameQuery serverName,
                             @ParamReference(name = "Repositories", namingType = "Repository")Collection<? extends Repository> repositories,
-                            @ParamReference(name = "EJBConfigBuilder", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> ejbConfigBuilder,
-                            @ParamReference(name = "WebConfigBuilder", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> webConfigBuilder,
-                            @ParamReference(name = "ConnectorConfigBuilder", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> connectorConfigBuilder,
-                            @ParamReference(name = "ActivationSpecInfoLocator", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> resourceReferenceBuilder,
-                            @ParamReference(name = "AppClientConfigBuilder", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> appClientConfigBuilder,
+                            @ParamReference(name = "ModuleBuilders", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> moduleBuilders,
                             @ParamReference(name = "ServiceBuilders", namingType = NameFactory.MODULE_BUILDER)Collection<NamespaceDrivenBuilder> serviceBuilders,
                             @ParamReference(name = "PersistenceUnitBuilders", namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilderExtension> persistenceUnitBuilders,
                             @ParamReference(name = "ArtifactResolvers", namingType = "ArtifactResolver")Collection<? extends ArtifactResolver> artifactResolvers,
@@ -217,11 +169,7 @@
                 serverName,
                 ConfigurationUtil.getConfigurationManager(kernel),
                 repositories,
-                new SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
-                new SingleElementCollection<ModuleBuilder>(webConfigBuilder),
-                new SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
-                new SingleElementCollection<ModuleBuilder>(resourceReferenceBuilder),
-                new SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
+                moduleBuilders,
                 serviceBuilders,
                 persistenceUnitBuilders,
                 kernel.getNaming(), artifactResolvers,
@@ -234,11 +182,7 @@
                             AbstractNameQuery corbaGBeanAbstractName,
                             AbstractNameQuery serverName,
                             Collection<? extends Repository> repositories,
-                            ModuleBuilder ejbConfigBuilder,
-                            ModuleBuilder webConfigBuilder,
-                            ModuleBuilder connectorConfigBuilder,
-                            ActivationSpecInfoLocator activationSpecInfoLocator,
-                            ModuleBuilder appClientConfigBuilder,
+                            Collection<ModuleBuilder> moduleBuilders,
                             NamespaceDrivenBuilder serviceBuilder,
                             ModuleBuilderExtension persistenceUnitBuilder,
                             Naming naming,
@@ -250,11 +194,7 @@
                 serverName,
                 null,
                 repositories,
-                new SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
-                new SingleElementCollection<ModuleBuilder>(webConfigBuilder),
-                new SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
-                new SingleElementCollection<ActivationSpecInfoLocator>(activationSpecInfoLocator),
-                new SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
+                moduleBuilders, 
                 serviceBuilder == null ? Collections.<NamespaceDrivenBuilder>emptySet() : Collections.singleton(serviceBuilder),
                 persistenceUnitBuilder == null ? Collections.<ModuleBuilderExtension>emptySet() : Collections.singleton(persistenceUnitBuilder),
                 naming,
@@ -269,11 +209,7 @@
                              AbstractNameQuery serverName,
                              ConfigurationManager configurationManager,
                              Collection<? extends Repository> repositories,
-                             SingleElementCollection ejbConfigBuilder,
-                             SingleElementCollection webConfigBuilder,
-                             SingleElementCollection connectorConfigBuilder,
-                             SingleElementCollection resourceReferenceBuilder,
-                             SingleElementCollection appClientConfigBuilder,
+                             Collection<ModuleBuilder> moduleBuilders, 
                              Collection<NamespaceDrivenBuilder> serviceBuilders,
                              Collection<ModuleBuilderExtension> persistenceUnitBuilders,
                              Naming naming,
@@ -283,11 +219,7 @@
         this.repositories = repositories;
         this.defaultEnvironment = defaultEnvironment;
 
-        this.ejbConfigBuilder = ejbConfigBuilder;
-        this.resourceReferenceBuilder = resourceReferenceBuilder;
-        this.webConfigBuilder = webConfigBuilder;
-        this.connectorConfigBuilder = connectorConfigBuilder;
-        this.appClientConfigBuilder = appClientConfigBuilder;
+        this.moduleBuilders = moduleBuilders;
         this.serviceBuilders = new NamespaceDrivenBuilderCollection(serviceBuilders);
         this.persistenceUnitBuilders = persistenceUnitBuilders;
 
@@ -315,21 +247,21 @@
     public AbstractNameQuery getCorbaGBeanName() {
         return corbaGBeanObjectName;
     }
-
+    
     private ModuleBuilder getEjbConfigBuilder() {
-        return (ModuleBuilder) ejbConfigBuilder.getElement();
+        return getModuleBuilder(EJBModule.class);
     }
-
+        
     private ModuleBuilder getWebConfigBuilder() {
-        return (ModuleBuilder) webConfigBuilder.getElement();
+        return getModuleBuilder(WebModule.class);
     }
-
+        
     private ModuleBuilder getConnectorConfigBuilder() {
-        return (ModuleBuilder) connectorConfigBuilder.getElement();
+        return getModuleBuilder(ConnectorModule.class);
     }
-
+        
     private ModuleBuilder getAppClientConfigBuilder() {
-        return (ModuleBuilder) appClientConfigBuilder.getElement();
+        return getModuleBuilder(AppClientModule.class);
     }
 
     public Object getDeploymentPlan(File planFile, JarFile jarFile, ModuleIDBuilder idBuilder) throws DeploymentException {
@@ -347,18 +279,13 @@
 
         // get the modules either the application plan or for a stand alone module from the specific deployer
         Module module = null;
-        if (getWebConfigBuilder() != null) {
-            module = getWebConfigBuilder().createModule(planFile, jarFile, naming, idBuilder);
-        }
-        if (module == null && getEjbConfigBuilder() != null) {
-            module = getEjbConfigBuilder().createModule(planFile, jarFile, naming, idBuilder);
-        }
-        if (module == null && getConnectorConfigBuilder() != null) {
-            module = getConnectorConfigBuilder().createModule(planFile, jarFile, naming, idBuilder);
-        }
-        if (module == null && getAppClientConfigBuilder() != null) {
-            module = getAppClientConfigBuilder().createModule(planFile, jarFile, naming, idBuilder);
+        for (ModuleBuilder moduleBuilder : getSortedModuleBuilders()) {
+            module = moduleBuilder.createModule(planFile, jarFile, naming, idBuilder);
+            if (module != null) {
+                break;
+            }
         }
+
         if (module == null) {
             return null;
         }
@@ -1136,29 +1063,45 @@
         return null;
     }
 
+    private List<ModuleBuilder> getSortedModuleBuilders() {
+        List<ModuleBuilder> list = new ArrayList<ModuleBuilder>(moduleBuilders);
+        Collections.sort(list, new ModuleBuilderComparator());
+        return list;        
+    }
+    
+    private static class ModuleBuilderComparator implements Comparator<ModuleBuilder> {
+        public int compare(ModuleBuilder o1, ModuleBuilder o2) {
+            return o1.getPriority() - o2.getPriority();
+        }
+    }
+    
+    private ModuleBuilder getModuleBuilder(Class module) {
+        for (ModuleBuilder builder : moduleBuilders) {
+            if (builder.supportsModule(module)) {
+                return builder;
+            }
+        }
+        return null;
+    }
+    
     private ModuleBuilder getBuilder(Module module) throws DeploymentException {
-        if (module instanceof EJBModule) {
-            if (getEjbConfigBuilder() == null) {
+        ModuleBuilder builder = getModuleBuilder(module.getClass());
+        
+        if (builder == null) {
+            if (module instanceof EJBModule) {
                 throw new DeploymentException("Cannot deploy ejb application; No ejb deployer defined: " + module.getModuleURI());
-            }
-            return getEjbConfigBuilder();
-        } else if (module instanceof WebModule) {
-            if (getWebConfigBuilder() == null) {
+            } else if (module instanceof WebModule) {
                 throw new DeploymentException("Cannot deploy web application; No war deployer defined: " + module.getModuleURI());
-            }
-            return getWebConfigBuilder();
-        } else if (module instanceof ConnectorModule) {
-            if (getConnectorConfigBuilder() == null) {
+            } else if (module instanceof ConnectorModule) {
                 throw new DeploymentException("Cannot deploy resource adapter; No rar deployer defined: " + module.getModuleURI());
-            }
-            return getConnectorConfigBuilder();
-        } else if (module instanceof AppClientModule) {
-            if (getAppClientConfigBuilder() == null) {
+            } else if (module instanceof AppClientModule) {
                 throw new DeploymentException("Cannot deploy app client; No app client deployer defined: " + module.getModuleURI());
+            } else {
+                throw new DeploymentException("Cannot deploy application; No deployer for module: " + module.getModuleURI());
             }
-            return getAppClientConfigBuilder();
-        }
-        throw new IllegalArgumentException("Unknown module type: " + module.getClass().getName());
+        } 
+        
+        return builder;
     }
 
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -33,6 +33,9 @@
  * @version $Rev:386276 $ $Date$
  */
 public interface ModuleBuilder {
+    
+    int NORMAL_PRIORITY = 50;
+    
     Module createModule(File plan, JarFile moduleFile, Naming naming, ModuleIDBuilder idBuilder) throws DeploymentException;
 
     Module createModule(Object plan, JarFile moduleFile, String targetPath, URL specDDUrl, Environment environment, Object moduleContextInfo, AbstractName earName, Naming naming, ModuleIDBuilder idBuilder) throws DeploymentException;
@@ -44,4 +47,15 @@
     void addGBeans(EARContext earContext, Module module, Bundle bundle, Collection repository) throws DeploymentException;
 
     String getSchemaNamespace();
+    
+    /**
+     * Returns sort order priority.  Lower numbers indicate higher priority.
+     */
+    int getPriority();
+    
+    /**
+     * Returns true if this ModuleBuilder creates and installs module of the specified type. 
+     *  
+     */
+    boolean supportsModule(Class moduleType);
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -50,9 +50,14 @@
 
     private final Map namespaceToBuilderMap = new HashMap();
 
+    private Class supportedModuleType;
+    private int priority = NORMAL_PRIORITY;
     private String defaultNamespace;
 
-    public SwitchingModuleBuilder(Collection builders) {
+    public SwitchingModuleBuilder(Collection builders, String supportedModule, int priority) throws Exception {
+        this.supportedModuleType = SwitchingModuleBuilder.class.getClassLoader().loadClass(supportedModule);
+        this.priority = priority;
+        
         ReferenceCollection buildersCollection = (ReferenceCollection) builders;
         buildersCollection.addReferenceCollectionListener(new ReferenceCollectionListener() {
             public void memberAdded(ReferenceCollectionEvent event) {
@@ -170,15 +175,25 @@
         return null;
     }
 
+    public int getPriority() {
+        return priority;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return supportedModuleType.isAssignableFrom(moduleType);
+    }
+    
     public static final GBeanInfo GBEAN_INFO;
 
     static {
         GBeanInfoBuilder infoBuilder = GBeanInfoBuilder.createStatic(SwitchingModuleBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addAttribute("defaultNamespace", String.class, true, true);
+        infoBuilder.addAttribute("supportedModule", String.class, true, true);
+        infoBuilder.addAttribute("priority", int.class, true, true);
         infoBuilder.addReference("ModuleBuilders", ModuleBuilder.class, NameFactory.MODULE_BUILDER);
         infoBuilder.addInterface(ModuleBuilder.class);
 
-        infoBuilder.setConstructor(new String[] {"ModuleBuilders"});
+        infoBuilder.setConstructor(new String[] {"ModuleBuilders", "supportedModule","priority"});
         GBEAN_INFO = infoBuilder.getBeanInfo();
     }
 

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java Sat Dec  5 06:24:26 2009
@@ -16,8 +16,10 @@
  */
 package org.apache.geronimo.j2ee.deployment;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.HashSet;
@@ -72,10 +74,6 @@
     
     protected static MockConnectorConfigBuilder connectorConfigBuilder = new MockConnectorConfigBuilder();
     
-    protected static ActivationSpecInfoLocator activationSpecInfoLocator = connectorConfigBuilder;
-    
-    protected static ModuleBuilder appClientConfigBuilder = null;
-    
     protected final static ModuleIDBuilder idBuilder = new ModuleIDBuilder();
     
     protected static final NamespaceDrivenBuilder securityBuilder = null;
@@ -106,7 +104,6 @@
     
     protected static final AbstractName raModuleName = naming.createChildName(earName, "rar", NameFactory.RESOURCE_ADAPTER_MODULE);
 
-
     protected Map<String, Artifact> locations = new HashMap<String, Artifact>();
 
     protected Environment defaultParentId;
@@ -136,6 +133,14 @@
         defaultParentId.addDependency(new Artifact("org.apache.geronimo.tests", "test", "1", "car"), ImportType.ALL);
     }
 
+    private List<ModuleBuilder> getBuilders(ModuleBuilder...builders) {
+        List<ModuleBuilder> b = new ArrayList<ModuleBuilder>();
+        for (ModuleBuilder builder : builders) {
+            b.add(builder);
+        }
+        return b;
+    }
+    
     public void testBuildConfiguration() throws Exception {
         ConfigurationData configurationData = null;
         DeploymentContext context = null;
@@ -146,11 +151,9 @@
                     corbaGBeanAbstractNameQuery,
                     null,
                     Collections.singleton(repository),
-                    ejbConfigBuilder,
-                    webConfigBuilder,
-                    connectorConfigBuilder,
-                    activationSpecInfoLocator,
-                    appClientConfigBuilder,
+                    getBuilders(ejbConfigBuilder,
+                                webConfigBuilder,
+                                connectorConfigBuilder),              
                     serviceBuilder,
                     persistenceUnitBuilder,
                     naming,
@@ -177,11 +180,9 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                webConfigBuilder,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                            webConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -212,11 +213,9 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                webConfigBuilder,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                            webConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -247,11 +246,9 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                webConfigBuilder,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                            webConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -282,11 +279,9 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                webConfigBuilder,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                            webConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -317,11 +312,8 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                null,
-                webConfigBuilder,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(webConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -353,11 +345,8 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                null,
-                connectorConfigBuilder,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                            connectorConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);
@@ -388,11 +377,8 @@
                 corbaGBeanAbstractNameQuery,
                 null,
                 null,
-                ejbConfigBuilder,
-                webConfigBuilder,
-                null,
-                activationSpecInfoLocator,
-                appClientConfigBuilder,
+                getBuilders(ejbConfigBuilder,
+                             webConfigBuilder),
                 serviceBuilder,
                 persistenceUnitBuilder,
                 naming, artifactResolvers, bundleContext);

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java Sat Dec  5 06:24:26 2009
@@ -114,4 +114,12 @@
     public GBeanData locateConnectionFactoryInfo(GBeanData resourceAdapterModuleData, String connectionFactoryInterfaceName) throws DeploymentException {
         return null;
     }
+
+    public int getPriority() {
+        return NORMAL_PRIORITY;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return ConnectorModule.class.isAssignableFrom(moduleType);
+    }
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java Sat Dec  5 06:24:26 2009
@@ -83,4 +83,12 @@
         return null;
     }
 
+    public int getPriority() {
+        return NORMAL_PRIORITY;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return EJBModule.class.isAssignableFrom(moduleType);
+    }
+
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java Sat Dec  5 06:24:26 2009
@@ -88,4 +88,12 @@
         return null;
     }
 
+    public int getPriority() {
+        return NORMAL_PRIORITY;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return WebModule.class.isAssignableFrom(moduleType);
+    }
+
 }

Modified: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -746,6 +746,14 @@
         webModuleData.setReferencePattern("TrackedConnectionAssociator", moduleContext.getConnectionTrackerName());
     }
 
+    public int getPriority() {
+        return 10;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return WebModule.class.isAssignableFrom(moduleType);
+    }
+    
     private static class InternWrapper implements XMLStreamReader {
         private final XMLStreamReader delegate;
 

Modified: geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml Sat Dec  5 06:24:26 2009
@@ -28,9 +28,6 @@
         <reference name="Repositories">
             <!--<gbean-name>*:name=Repository,*</gbean-name>-->
         </reference>
-        <reference name="WebConfigBuilder">
-            <name>WebBuilder</name>
-        </reference>
         <references name="ServiceBuilders">
             <pattern>
                 <name>GBeanBuilder</name>
@@ -44,23 +41,21 @@
                 <name>PersistenceUnitBuilder</name>
             </pattern>
         </references>
-        <references name="EJBConfigBuilder">
+        <references name="ModuleBuilders">
+            <pattern>
+                <name>WebBuilder</name>
+            </pattern>
             <pattern>
                 <name>EJBBuilder</name>
             </pattern>
             <pattern>
-                <name>UnavailableEJBBuilder</name>
+                <name>ConnectorBuilder</name>
             </pattern>
-        </references>
-        <reference name="ConnectorConfigBuilder">
-            <name>ConnectorBuilder</name>
-        </reference>
-        <references name="AppClientConfigBuilder">
             <pattern>
                 <name>AppClientBuilder</name>
             </pattern>
             <pattern>
-                <name>UnavailableAppClientBuilder</name>
+                <name>AriesAppBuilder</name>
             </pattern>
         </references>
         <reference name="ArtifactResolvers">
@@ -82,6 +77,8 @@
     <!-- web switching builder -->
     <gbean name="WebBuilder" class="org.apache.geronimo.j2ee.deployment.SwitchingModuleBuilder">
         <attribute name="defaultNamespace">http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-${geronimoSchemaVersion}</attribute>
+        <attribute name="supportedModule">org.apache.geronimo.j2ee.deployment.WebModule</attribute>
+        <attribute name="priority">10</attribute>
         <references name="ModuleBuilders">
             <pattern>
                 <name>JettyWebBuilder</name>

Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java Sat Dec  5 06:24:26 2009
@@ -898,6 +898,14 @@
         return new AbstractNameQuery(artifact, nameMap, (Set) null);
     }
 
+    public int getPriority() {
+        return 20;
+    }
+    
+    public boolean supportsModule(Class moduleType) {
+        return EjbModule.class.isAssignableFrom(moduleType);
+    }
+    
     public static class EarData {
         private final Map<String, EjbModule> ejbModules = new TreeMap<String, EjbModule>();
         private final Map<String, EjbJarInfo> ejbJars = new TreeMap<String, EjbJarInfo>();



Re: svn commit: r887507 - in /geronimo/server/trunk/plugins: aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ connector-1_6/geronimo-connector-bui...

Posted by Rick McGuire <ri...@gmail.com>.
David Jencks wrote:
> I'm not thrilled with this change.  I think the immediate reason for 
> the change was to get an AriesModuleBuilder in, but I think that 
> should be a ConfigBuilder rather than a ModuleBuilder -- AFAICT an 
> aries app would be something like an ear, not a module in an ear.

I think I agree with you.  In my mind, at least, an Aries application is 
a peer of an EAR-style application, not just another sort of module that 
can be included in an EAR. 

>
> I think the part I don't really like is the hardcoding of the ordering 
> in numbers in the module builders.  I'd prefer to just be able to have 
> an ordered list in the ear config builder configuration that specified 
> the order, but we don't support that.  How about if we set the 
> priority as a gbean attribute in the module builder configuration?
This makes a lot of sense to me.

>
> I realize this must seem a bit silly since we are going from one very 
> hardcoded ordering to another more flexiible hardcoded ordering, but 
> if we are going to be doing sorting of MBs I'd like to make it more 
> configurable.
>
> WDYT?
>
> thanks
> david jencks
>
> On Dec 4, 2009, at 10:24 PM, gawor@apache.org wrote:
>
>> Author: gawor
>> Date: Sat Dec  5 06:24:26 2009
>> New Revision: 887507
>>
>> URL: http://svn.apache.org/viewvc?rev=887507&view=rev
>> Log:
>> GERONIMO-4975: Simplify integrating new ModuleBuilders with 
>> EARConfigBuilder
>>
>> Removed:
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/UnavailableModuleBuilder.java 
>>
>> Modified:
>>    
>> geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java 
>>
>>    
>> geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
>>    
>> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java 
>>
>>
>> Modified: 
>> geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -216,4 +216,11 @@
>>         return null;
>>     }
>>
>> +    public int getPriority() {
>> +        return 50;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return AriesAppModule.class.isAssignableFrom(moduleType);
>> +    }
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -839,6 +839,14 @@
>>         return GERAPPCLIENT_NAMESPACE;
>>     }
>>
>> +    public int getPriority() {
>> +        return 40;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return AppClientModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>>     public void addManifestClassPath(DeploymentContext 
>> deploymentContext, JarFile earFile, JarFile jarFile, URI 
>> jarFileLocation) throws DeploymentException {
>>         Manifest manifest;
>>         try {
>>
>> Modified: 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -536,6 +536,14 @@
>>         return GERCONNECTOR_NAMESPACE;
>>     }
>>
>> +    public int getPriority() {
>> +        return 30;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return ConnectorModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>>     private void addConnectorGBeans(EARContext earContext, 
>> AbstractName jcaResourceName, GBeanData resourceAdapterModuleData, 
>> ConnectorType connector, GerConnectorType geronimoConnector, Bundle 
>> bundle) throws DeploymentException {
>>         ResourceadapterType resourceadapter = 
>> connector.getResourceadapter();
>>
>>
>> Modified: 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -22,6 +22,7 @@
>> import java.net.URL;
>> import java.sql.Connection;
>> import java.sql.Statement;
>> +import java.util.ArrayList;
>> import java.util.Collections;
>> import java.util.List;
>> import java.util.Map;
>> @@ -29,7 +30,6 @@
>> import java.util.HashMap;
>> import java.util.jar.JarFile;
>>
>> -import javax.naming.Reference;
>> import javax.sql.DataSource;
>> import org.apache.geronimo.common.DeploymentException;
>> import org.apache.geronimo.deployment.DeploymentContext;
>> @@ -41,7 +41,6 @@
>> import org.apache.geronimo.gbean.AbstractNameQuery;
>> import org.apache.geronimo.gbean.GBeanData;
>> import org.apache.geronimo.gbean.GBeanInfo;
>> -import org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator;
>> import org.apache.geronimo.j2ee.deployment.EARConfigBuilder;
>> import org.apache.geronimo.j2ee.deployment.EARContext;
>> import org.apache.geronimo.j2ee.deployment.Module;
>> @@ -90,22 +89,6 @@
>>     private Environment defaultEnvironment;
>>     private ConfigurationStore configurationStore = new 
>> MockConfigStore();
>>     private MockRepository repository;
>> -
>> -    private ActivationSpecInfoLocator activationSpecInfoLocator = 
>> new ActivationSpecInfoLocator() {
>> -
>> -        public Reference createResourceRef(AbstractNameQuery 
>> containerId, Class iface, Configuration configuration) {
>> -            return null;
>> -        }
>> -
>> -        public Reference createAdminObjectRef(AbstractNameQuery 
>> containerId, Class iface, Configuration configuration) {
>> -            return null;
>> -        }
>> -
>> -        public GBeanData locateActivationSpecInfo(AbstractNameQuery 
>> nameQuery, String messageListenerInterface, Configuration 
>> configuration) {
>> -            return null;
>> -        }
>> -    };
>> -
>>     private Kernel kernel;
>>     private ConfigurationManager configurationManager;
>>     private static final Naming naming = new Jsr77Naming();
>> @@ -122,17 +105,15 @@
>>             rarFile = DeploymentUtil.createJarFile(new File(BASEDIR, 
>> "target/test-ear-noger.ear"));
>>             GBeanBuilder serviceBuilder = new GBeanBuilder(null, null);
>> //            EARConfigBuilder configBuilder = new 
>> EARConfigBuilder(defaultEnvironment, transactionContextManagerName, 
>> connectionTrackerName, null, null, null, new 
>> AbstractNameQuery(serverName, 
>> J2EEServerImpl.GBEAN_INFO.getInterfaces()), null, null, 
>> ejbReferenceBuilder, null,
>> +            List<ModuleBuilder> builders = new 
>> ArrayList<ModuleBuilder>();
>> +            builders.add(new 
>> ConnectorModuleBuilder(defaultEnvironment, defaultMaxSize, 
>> defaultMinSize, defaultBlockingTimeoutMilliseconds, 
>> defaultidleTimeoutMinutes, defaultXATransactionCaching, 
>> defaultXAThreadCaching, defaultWorkManagerName, 
>> Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)));
>>             EARConfigBuilder configBuilder = new 
>> EARConfigBuilder(defaultEnvironment,
>>                     transactionManagerName,
>>                     connectionTrackerName,
>>                     null,
>>                     new AbstractNameQuery(serverName, 
>> J2EEServerImpl.GBEAN_INFO.getInterfaces()),
>>                     Collections.singleton(repository),
>> -                    null,
>> -                    null,
>> -                    new ConnectorModuleBuilder(defaultEnvironment, 
>> defaultMaxSize, defaultMinSize, defaultBlockingTimeoutMilliseconds, 
>> defaultidleTimeoutMinutes, defaultXATransactionCaching, 
>> defaultXAThreadCaching, defaultWorkManagerName, 
>> Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)),
>> -                    activationSpecInfoLocator,
>> -                    null,
>> +                    builders,
>>                     serviceBuilder,
>>                     null,
>>                     kernel.getNaming(),
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -24,6 +24,7 @@
>> import java.util.ArrayList;
>> import java.util.Collection;
>> import java.util.Collections;
>> +import java.util.Comparator;
>> import java.util.Enumeration;
>> import java.util.HashMap;
>> import java.util.HashSet;
>> @@ -60,7 +61,6 @@
>> import org.apache.geronimo.gbean.GBeanData;
>> import org.apache.geronimo.gbean.GBeanLifecycle;
>> import org.apache.geronimo.gbean.ReferencePatterns;
>> -import org.apache.geronimo.gbean.SingleElementCollection;
>> import org.apache.geronimo.gbean.annotation.GBean;
>> import org.apache.geronimo.gbean.annotation.ParamAttribute;
>> import org.apache.geronimo.gbean.annotation.ParamReference;
>> @@ -123,11 +123,7 @@
>>
>>     private final ConfigurationManager configurationManager;
>>     private final Collection<? extends Repository> repositories;
>> -    private final SingleElementCollection ejbConfigBuilder;
>> -    private final SingleElementCollection webConfigBuilder;
>> -    private final SingleElementCollection connectorConfigBuilder;
>> -    private final SingleElementCollection appClientConfigBuilder;
>> -    private final SingleElementCollection resourceReferenceBuilder;
>> +    private final Collection<ModuleBuilder> moduleBuilders;
>>     private final NamespaceDrivenBuilderCollection serviceBuilders;
>>     private final Collection<ModuleBuilderExtension> 
>> persistenceUnitBuilders;
>>
>> @@ -154,57 +150,13 @@
>>         }
>>     };
>>
>> -//    static {
>> -//        GBeanInfoBuilder infoBuilder = 
>> GBeanInfoBuilder.createStatic(EARConfigBuilder.class, 
>> NameFactory.CONFIG_BUILDER);
>> -//        infoBuilder.addAttribute("defaultEnvironment", 
>> Environment.class, true, true);
>> -//        infoBuilder.addAttribute("transactionManagerAbstractName", 
>> AbstractNameQuery.class, true);
>> -//        infoBuilder.addAttribute("connectionTrackerAbstractName", 
>> AbstractNameQuery.class, true);
>> -//        infoBuilder.addAttribute("corbaGBeanAbstractName", 
>> AbstractNameQuery.class, true);
>> -//        infoBuilder.addAttribute("serverName", 
>> AbstractNameQuery.class, true);
>> -//
>> -//        infoBuilder.addReference("Repositories", Repository.class, 
>> "Repository");
>> -//        infoBuilder.addReference("EJBConfigBuilder", 
>> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("WebConfigBuilder", 
>> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("ConnectorConfigBuilder", 
>> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("ActivationSpecInfoLocator", 
>> ActivationSpecInfoLocator.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("AppClientConfigBuilder", 
>> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("ServiceBuilders", 
>> NamespaceDrivenBuilder.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("PersistenceUnitBuilders", 
>> ModuleBuilderExtension.class, NameFactory.MODULE_BUILDER);
>> -//        infoBuilder.addReference("ArtifactResolvers", 
>> ArtifactResolver.class, "ArtifactResolver");
>> -//
>> -//        infoBuilder.addAttribute("kernel", Kernel.class, false);
>> -//
>> -//        infoBuilder.setConstructor(new String[]{
>> -//                "defaultEnvironment",
>> -//                "transactionManagerAbstractName",
>> -//                "connectionTrackerAbstractName",
>> -//                "corbaGBeanAbstractName",
>> -//                "serverName",
>> -//                "Repositories",
>> -//                "EJBConfigBuilder",
>> -//                "WebConfigBuilder",
>> -//                "ConnectorConfigBuilder",
>> -//                "ActivationSpecInfoLocator",
>> -//                "AppClientConfigBuilder",
>> -//                "ServiceBuilders",
>> -//                "PersistenceUnitBuilders",
>> -//                "ArtifactResolvers",
>> -//                "kernel"
>> -//        });
>> -//
>> -//    }
>> -
>>     public EARConfigBuilder(@ParamAttribute(name = 
>> "defaultEnvironment") Environment defaultEnvironment,
>>                             @ParamAttribute(name = 
>> "transactionManagerAbstractName") AbstractNameQuery 
>> transactionManagerAbstractName,
>>                             @ParamAttribute(name = 
>> "connectionTrackerAbstractName") AbstractNameQuery 
>> connectionTrackerAbstractName,
>>                             @ParamAttribute(name = 
>> "corbaGBeanAbstractName") AbstractNameQuery corbaGBeanAbstractName,
>>                             @ParamAttribute(name = "serverName") 
>> AbstractNameQuery serverName,
>>                             @ParamReference(name = "Repositories", 
>> namingType = "Repository")Collection<? extends Repository> repositories,
>> -                            @ParamReference(name = 
>> "EJBConfigBuilder", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> ejbConfigBuilder,
>> -                            @ParamReference(name = 
>> "WebConfigBuilder", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> webConfigBuilder,
>> -                            @ParamReference(name = 
>> "ConnectorConfigBuilder", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> 
>> connectorConfigBuilder,
>> -                            @ParamReference(name = 
>> "ActivationSpecInfoLocator", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> 
>> resourceReferenceBuilder,
>> -                            @ParamReference(name = 
>> "AppClientConfigBuilder", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> 
>> appClientConfigBuilder,
>> +                            @ParamReference(name = "ModuleBuilders", 
>> namingType = NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> 
>> moduleBuilders,
>>                             @ParamReference(name = "ServiceBuilders", 
>> namingType = 
>> NameFactory.MODULE_BUILDER)Collection<NamespaceDrivenBuilder> 
>> serviceBuilders,
>>                             @ParamReference(name = 
>> "PersistenceUnitBuilders", namingType = 
>> NameFactory.MODULE_BUILDER)Collection<ModuleBuilderExtension> 
>> persistenceUnitBuilders,
>>                             @ParamReference(name = 
>> "ArtifactResolvers", namingType = "ArtifactResolver")Collection<? 
>> extends ArtifactResolver> artifactResolvers,
>> @@ -217,11 +169,7 @@
>>                 serverName,
>>                 ConfigurationUtil.getConfigurationManager(kernel),
>>                 repositories,
>> -                new 
>> SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(webConfigBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(resourceReferenceBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
>> +                moduleBuilders,
>>                 serviceBuilders,
>>                 persistenceUnitBuilders,
>>                 kernel.getNaming(), artifactResolvers,
>> @@ -234,11 +182,7 @@
>>                             AbstractNameQuery corbaGBeanAbstractName,
>>                             AbstractNameQuery serverName,
>>                             Collection<? extends Repository> 
>> repositories,
>> -                            ModuleBuilder ejbConfigBuilder,
>> -                            ModuleBuilder webConfigBuilder,
>> -                            ModuleBuilder connectorConfigBuilder,
>> -                            ActivationSpecInfoLocator 
>> activationSpecInfoLocator,
>> -                            ModuleBuilder appClientConfigBuilder,
>> +                            Collection<ModuleBuilder> moduleBuilders,
>>                             NamespaceDrivenBuilder serviceBuilder,
>>                             ModuleBuilderExtension 
>> persistenceUnitBuilder,
>>                             Naming naming,
>> @@ -250,11 +194,7 @@
>>                 serverName,
>>                 null,
>>                 repositories,
>> -                new 
>> SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(webConfigBuilder),
>> -                new 
>> SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
>> -                new 
>> SingleElementCollection<ActivationSpecInfoLocator>(activationSpecInfoLocator), 
>>
>> -                new 
>> SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
>> +                moduleBuilders,
>>                 serviceBuilder == null ? 
>> Collections.<NamespaceDrivenBuilder>emptySet() : 
>> Collections.singleton(serviceBuilder),
>>                 persistenceUnitBuilder == null ? 
>> Collections.<ModuleBuilderExtension>emptySet() : 
>> Collections.singleton(persistenceUnitBuilder),
>>                 naming,
>> @@ -269,11 +209,7 @@
>>                              AbstractNameQuery serverName,
>>                              ConfigurationManager configurationManager,
>>                              Collection<? extends Repository> 
>> repositories,
>> -                             SingleElementCollection ejbConfigBuilder,
>> -                             SingleElementCollection webConfigBuilder,
>> -                             SingleElementCollection 
>> connectorConfigBuilder,
>> -                             SingleElementCollection 
>> resourceReferenceBuilder,
>> -                             SingleElementCollection 
>> appClientConfigBuilder,
>> +                             Collection<ModuleBuilder> moduleBuilders,
>>                              Collection<NamespaceDrivenBuilder> 
>> serviceBuilders,
>>                              Collection<ModuleBuilderExtension> 
>> persistenceUnitBuilders,
>>                              Naming naming,
>> @@ -283,11 +219,7 @@
>>         this.repositories = repositories;
>>         this.defaultEnvironment = defaultEnvironment;
>>
>> -        this.ejbConfigBuilder = ejbConfigBuilder;
>> -        this.resourceReferenceBuilder = resourceReferenceBuilder;
>> -        this.webConfigBuilder = webConfigBuilder;
>> -        this.connectorConfigBuilder = connectorConfigBuilder;
>> -        this.appClientConfigBuilder = appClientConfigBuilder;
>> +        this.moduleBuilders = moduleBuilders;
>>         this.serviceBuilders = new 
>> NamespaceDrivenBuilderCollection(serviceBuilders);
>>         this.persistenceUnitBuilders = persistenceUnitBuilders;
>>
>> @@ -315,21 +247,21 @@
>>     public AbstractNameQuery getCorbaGBeanName() {
>>         return corbaGBeanObjectName;
>>     }
>> -
>> +
>>     private ModuleBuilder getEjbConfigBuilder() {
>> -        return (ModuleBuilder) ejbConfigBuilder.getElement();
>> +        return getModuleBuilder(EJBModule.class);
>>     }
>> -
>> +
>>     private ModuleBuilder getWebConfigBuilder() {
>> -        return (ModuleBuilder) webConfigBuilder.getElement();
>> +        return getModuleBuilder(WebModule.class);
>>     }
>> -
>> +
>>     private ModuleBuilder getConnectorConfigBuilder() {
>> -        return (ModuleBuilder) connectorConfigBuilder.getElement();
>> +        return getModuleBuilder(ConnectorModule.class);
>>     }
>> -
>> +
>>     private ModuleBuilder getAppClientConfigBuilder() {
>> -        return (ModuleBuilder) appClientConfigBuilder.getElement();
>> +        return getModuleBuilder(AppClientModule.class);
>>     }
>>
>>     public Object getDeploymentPlan(File planFile, JarFile jarFile, 
>> ModuleIDBuilder idBuilder) throws DeploymentException {
>> @@ -347,18 +279,13 @@
>>
>>         // get the modules either the application plan or for a stand 
>> alone module from the specific deployer
>>         Module module = null;
>> -        if (getWebConfigBuilder() != null) {
>> -            module = getWebConfigBuilder().createModule(planFile, 
>> jarFile, naming, idBuilder);
>> -        }
>> -        if (module == null && getEjbConfigBuilder() != null) {
>> -            module = getEjbConfigBuilder().createModule(planFile, 
>> jarFile, naming, idBuilder);
>> -        }
>> -        if (module == null && getConnectorConfigBuilder() != null) {
>> -            module = 
>> getConnectorConfigBuilder().createModule(planFile, jarFile, naming, 
>> idBuilder);
>> -        }
>> -        if (module == null && getAppClientConfigBuilder() != null) {
>> -            module = 
>> getAppClientConfigBuilder().createModule(planFile, jarFile, naming, 
>> idBuilder);
>> +        for (ModuleBuilder moduleBuilder : getSortedModuleBuilders()) {
>> +            module = moduleBuilder.createModule(planFile, jarFile, 
>> naming, idBuilder);
>> +            if (module != null) {
>> +                break;
>> +            }
>>         }
>> +
>>         if (module == null) {
>>             return null;
>>         }
>> @@ -1136,29 +1063,45 @@
>>         return null;
>>     }
>>
>> +    private List<ModuleBuilder> getSortedModuleBuilders() {
>> +        List<ModuleBuilder> list = new 
>> ArrayList<ModuleBuilder>(moduleBuilders);
>> +        Collections.sort(list, new ModuleBuilderComparator());
>> +        return list;
>> +    }
>> +
>> +    private static class ModuleBuilderComparator implements 
>> Comparator<ModuleBuilder> {
>> +        public int compare(ModuleBuilder o1, ModuleBuilder o2) {
>> +            return o1.getPriority() - o2.getPriority();
>> +        }
>> +    }
>> +
>> +    private ModuleBuilder getModuleBuilder(Class module) {
>> +        for (ModuleBuilder builder : moduleBuilders) {
>> +            if (builder.supportsModule(module)) {
>> +                return builder;
>> +            }
>> +        }
>> +        return null;
>> +    }
>> +
>>     private ModuleBuilder getBuilder(Module module) throws 
>> DeploymentException {
>> -        if (module instanceof EJBModule) {
>> -            if (getEjbConfigBuilder() == null) {
>> +        ModuleBuilder builder = getModuleBuilder(module.getClass());
>> +
>> +        if (builder == null) {
>> +            if (module instanceof EJBModule) {
>>                 throw new DeploymentException("Cannot deploy ejb 
>> application; No ejb deployer defined: " + module.getModuleURI());
>> -            }
>> -            return getEjbConfigBuilder();
>> -        } else if (module instanceof WebModule) {
>> -            if (getWebConfigBuilder() == null) {
>> +            } else if (module instanceof WebModule) {
>>                 throw new DeploymentException("Cannot deploy web 
>> application; No war deployer defined: " + module.getModuleURI());
>> -            }
>> -            return getWebConfigBuilder();
>> -        } else if (module instanceof ConnectorModule) {
>> -            if (getConnectorConfigBuilder() == null) {
>> +            } else if (module instanceof ConnectorModule) {
>>                 throw new DeploymentException("Cannot deploy resource 
>> adapter; No rar deployer defined: " + module.getModuleURI());
>> -            }
>> -            return getConnectorConfigBuilder();
>> -        } else if (module instanceof AppClientModule) {
>> -            if (getAppClientConfigBuilder() == null) {
>> +            } else if (module instanceof AppClientModule) {
>>                 throw new DeploymentException("Cannot deploy app 
>> client; No app client deployer defined: " + module.getModuleURI());
>> +            } else {
>> +                throw new DeploymentException("Cannot deploy 
>> application; No deployer for module: " + module.getModuleURI());
>>             }
>> -            return getAppClientConfigBuilder();
>> -        }
>> -        throw new IllegalArgumentException("Unknown module type: " + 
>> module.getClass().getName());
>> +        }
>> +
>> +        return builder;
>>     }
>>
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -33,6 +33,9 @@
>>  * @version $Rev:386276 $ $Date$
>>  */
>> public interface ModuleBuilder {
>> +
>> +    int NORMAL_PRIORITY = 50;
>> +
>>     Module createModule(File plan, JarFile moduleFile, Naming naming, 
>> ModuleIDBuilder idBuilder) throws DeploymentException;
>>
>>     Module createModule(Object plan, JarFile moduleFile, String 
>> targetPath, URL specDDUrl, Environment environment, Object 
>> moduleContextInfo, AbstractName earName, Naming naming, 
>> ModuleIDBuilder idBuilder) throws DeploymentException;
>> @@ -44,4 +47,15 @@
>>     void addGBeans(EARContext earContext, Module module, Bundle 
>> bundle, Collection repository) throws DeploymentException;
>>
>>     String getSchemaNamespace();
>> +
>> +    /**
>> +     * Returns sort order priority.  Lower numbers indicate higher 
>> priority.
>> +     */
>> +    int getPriority();
>> +
>> +    /**
>> +     * Returns true if this ModuleBuilder creates and installs 
>> module of the specified type.
>> +     *
>> +     */
>> +    boolean supportsModule(Class moduleType);
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -50,9 +50,14 @@
>>
>>     private final Map namespaceToBuilderMap = new HashMap();
>>
>> +    private Class supportedModuleType;
>> +    private int priority = NORMAL_PRIORITY;
>>     private String defaultNamespace;
>>
>> -    public SwitchingModuleBuilder(Collection builders) {
>> +    public SwitchingModuleBuilder(Collection builders, String 
>> supportedModule, int priority) throws Exception {
>> +        this.supportedModuleType = 
>> SwitchingModuleBuilder.class.getClassLoader().loadClass(supportedModule); 
>>
>> +        this.priority = priority;
>> +
>>         ReferenceCollection buildersCollection = 
>> (ReferenceCollection) builders;
>>         buildersCollection.addReferenceCollectionListener(new 
>> ReferenceCollectionListener() {
>>             public void memberAdded(ReferenceCollectionEvent event) {
>> @@ -170,15 +175,25 @@
>>         return null;
>>     }
>>
>> +    public int getPriority() {
>> +        return priority;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return supportedModuleType.isAssignableFrom(moduleType);
>> +    }
>> +
>>     public static final GBeanInfo GBEAN_INFO;
>>
>>     static {
>>         GBeanInfoBuilder infoBuilder = 
>> GBeanInfoBuilder.createStatic(SwitchingModuleBuilder.class, 
>> NameFactory.MODULE_BUILDER);
>>         infoBuilder.addAttribute("defaultNamespace", String.class, 
>> true, true);
>> +        infoBuilder.addAttribute("supportedModule", String.class, 
>> true, true);
>> +        infoBuilder.addAttribute("priority", int.class, true, true);
>>         infoBuilder.addReference("ModuleBuilders", 
>> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>>         infoBuilder.addInterface(ModuleBuilder.class);
>>
>> -        infoBuilder.setConstructor(new String[] {"ModuleBuilders"});
>> +        infoBuilder.setConstructor(new String[] {"ModuleBuilders", 
>> "supportedModule","priority"});
>>         GBEAN_INFO = infoBuilder.getBeanInfo();
>>     }
>>
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -16,8 +16,10 @@
>>  */
>> package org.apache.geronimo.j2ee.deployment;
>>
>> +import java.util.ArrayList;
>> import java.util.Collection;
>> import java.util.Collections;
>> +import java.util.List;
>> import java.util.Map;
>> import java.util.Set;
>> import java.util.HashSet;
>> @@ -72,10 +74,6 @@
>>
>>     protected static MockConnectorConfigBuilder 
>> connectorConfigBuilder = new MockConnectorConfigBuilder();
>>
>> -    protected static ActivationSpecInfoLocator 
>> activationSpecInfoLocator = connectorConfigBuilder;
>> -
>> -    protected static ModuleBuilder appClientConfigBuilder = null;
>> -
>>     protected final static ModuleIDBuilder idBuilder = new 
>> ModuleIDBuilder();
>>
>>     protected static final NamespaceDrivenBuilder securityBuilder = 
>> null;
>> @@ -106,7 +104,6 @@
>>
>>     protected static final AbstractName raModuleName = 
>> naming.createChildName(earName, "rar", 
>> NameFactory.RESOURCE_ADAPTER_MODULE);
>>
>> -
>>     protected Map<String, Artifact> locations = new HashMap<String, 
>> Artifact>();
>>
>>     protected Environment defaultParentId;
>> @@ -136,6 +133,14 @@
>>         defaultParentId.addDependency(new 
>> Artifact("org.apache.geronimo.tests", "test", "1", "car"), 
>> ImportType.ALL);
>>     }
>>
>> +    private List<ModuleBuilder> getBuilders(ModuleBuilder...builders) {
>> +        List<ModuleBuilder> b = new ArrayList<ModuleBuilder>();
>> +        for (ModuleBuilder builder : builders) {
>> +            b.add(builder);
>> +        }
>> +        return b;
>> +    }
>> +
>>     public void testBuildConfiguration() throws Exception {
>>         ConfigurationData configurationData = null;
>>         DeploymentContext context = null;
>> @@ -146,11 +151,9 @@
>>                     corbaGBeanAbstractNameQuery,
>>                     null,
>>                     Collections.singleton(repository),
>> -                    ejbConfigBuilder,
>> -                    webConfigBuilder,
>> -                    connectorConfigBuilder,
>> -                    activationSpecInfoLocator,
>> -                    appClientConfigBuilder,
>> +                    getBuilders(ejbConfigBuilder,
>> +                                webConfigBuilder,
>> +                                connectorConfigBuilder),
>>                     serviceBuilder,
>>                     persistenceUnitBuilder,
>>                     naming,
>> @@ -177,11 +180,9 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                webConfigBuilder,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                            webConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -212,11 +213,9 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                webConfigBuilder,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                            webConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -247,11 +246,9 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                webConfigBuilder,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                            webConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -282,11 +279,9 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                webConfigBuilder,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                            webConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -317,11 +312,8 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                null,
>> -                webConfigBuilder,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(webConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -353,11 +345,8 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                null,
>> -                connectorConfigBuilder,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                            connectorConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>> @@ -388,11 +377,8 @@
>>                 corbaGBeanAbstractNameQuery,
>>                 null,
>>                 null,
>> -                ejbConfigBuilder,
>> -                webConfigBuilder,
>> -                null,
>> -                activationSpecInfoLocator,
>> -                appClientConfigBuilder,
>> +                getBuilders(ejbConfigBuilder,
>> +                             webConfigBuilder),
>>                 serviceBuilder,
>>                 persistenceUnitBuilder,
>>                 naming, artifactResolvers, bundleContext);
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -114,4 +114,12 @@
>>     public GBeanData locateConnectionFactoryInfo(GBeanData 
>> resourceAdapterModuleData, String connectionFactoryInterfaceName) 
>> throws DeploymentException {
>>         return null;
>>     }
>> +
>> +    public int getPriority() {
>> +        return NORMAL_PRIORITY;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return ConnectorModule.class.isAssignableFrom(moduleType);
>> +    }
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -83,4 +83,12 @@
>>         return null;
>>     }
>>
>> +    public int getPriority() {
>> +        return NORMAL_PRIORITY;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return EJBModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -88,4 +88,12 @@
>>         return null;
>>     }
>>
>> +    public int getPriority() {
>> +        return NORMAL_PRIORITY;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return WebModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>> }
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -746,6 +746,14 @@
>>         
>> webModuleData.setReferencePattern("TrackedConnectionAssociator", 
>> moduleContext.getConnectionTrackerName());
>>     }
>>
>> +    public int getPriority() {
>> +        return 10;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return WebModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>>     private static class InternWrapper implements XMLStreamReader {
>>         private final XMLStreamReader delegate;
>>
>>
>> Modified: 
>> geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml 
>> Sat Dec  5 06:24:26 2009
>> @@ -28,9 +28,6 @@
>>         <reference name="Repositories">
>>             <!--<gbean-name>*:name=Repository,*</gbean-name>-->
>>         </reference>
>> -        <reference name="WebConfigBuilder">
>> -            <name>WebBuilder</name>
>> -        </reference>
>>         <references name="ServiceBuilders">
>>             <pattern>
>>                 <name>GBeanBuilder</name>
>> @@ -44,23 +41,21 @@
>>                 <name>PersistenceUnitBuilder</name>
>>             </pattern>
>>         </references>
>> -        <references name="EJBConfigBuilder">
>> +        <references name="ModuleBuilders">
>> +            <pattern>
>> +                <name>WebBuilder</name>
>> +            </pattern>
>>             <pattern>
>>                 <name>EJBBuilder</name>
>>             </pattern>
>>             <pattern>
>> -                <name>UnavailableEJBBuilder</name>
>> +                <name>ConnectorBuilder</name>
>>             </pattern>
>> -        </references>
>> -        <reference name="ConnectorConfigBuilder">
>> -            <name>ConnectorBuilder</name>
>> -        </reference>
>> -        <references name="AppClientConfigBuilder">
>>             <pattern>
>>                 <name>AppClientBuilder</name>
>>             </pattern>
>>             <pattern>
>> -                <name>UnavailableAppClientBuilder</name>
>> +                <name>AriesAppBuilder</name>
>>             </pattern>
>>         </references>
>>         <reference name="ArtifactResolvers">
>> @@ -82,6 +77,8 @@
>>     <!-- web switching builder -->
>>     <gbean name="WebBuilder" 
>> class="org.apache.geronimo.j2ee.deployment.SwitchingModuleBuilder">
>>         <attribute 
>> name="defaultNamespace">http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-${geronimoSchemaVersion}</attribute> 
>>
>> +        <attribute 
>> name="supportedModule">org.apache.geronimo.j2ee.deployment.WebModule</attribute> 
>>
>> +        <attribute name="priority">10</attribute>
>>         <references name="ModuleBuilders">
>>             <pattern>
>>                 <name>JettyWebBuilder</name>
>>
>> Modified: 
>> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java 
>>
>> URL: 
>> http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff 
>>
>> ============================================================================== 
>>
>> --- 
>> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java 
>> (original)
>> +++ 
>> geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java 
>> Sat Dec  5 06:24:26 2009
>> @@ -898,6 +898,14 @@
>>         return new AbstractNameQuery(artifact, nameMap, (Set) null);
>>     }
>>
>> +    public int getPriority() {
>> +        return 20;
>> +    }
>> +
>> +    public boolean supportsModule(Class moduleType) {
>> +        return EjbModule.class.isAssignableFrom(moduleType);
>> +    }
>> +
>>     public static class EarData {
>>         private final Map<String, EjbModule> ejbModules = new 
>> TreeMap<String, EjbModule>();
>>         private final Map<String, EjbJarInfo> ejbJars = new 
>> TreeMap<String, EjbJarInfo>();
>>
>>
>
>


Re: svn commit: r887507 - in /geronimo/server/trunk/plugins: aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/ client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/ connector-1_6/geronimo-connector-bui...

Posted by David Jencks <da...@yahoo.com>.
I'm not thrilled with this change.  I think the immediate reason for  
the change was to get an AriesModuleBuilder in, but I think that  
should be a ConfigBuilder rather than a ModuleBuilder -- AFAICT an  
aries app would be something like an ear, not a module in an ear.

I think the part I don't really like is the hardcoding of the ordering  
in numbers in the module builders.  I'd prefer to just be able to have  
an ordered list in the ear config builder configuration that specified  
the order, but we don't support that.  How about if we set the  
priority as a gbean attribute in the module builder configuration?

I realize this must seem a bit silly since we are going from one very  
hardcoded ordering to another more flexiible hardcoded ordering, but  
if we are going to be doing sorting of MBs I'd like to make it more  
configurable.

WDYT?

thanks
david jencks

On Dec 4, 2009, at 10:24 PM, gawor@apache.org wrote:

> Author: gawor
> Date: Sat Dec  5 06:24:26 2009
> New Revision: 887507
>
> URL: http://svn.apache.org/viewvc?rev=887507&view=rev
> Log:
> GERONIMO-4975: Simplify integrating new ModuleBuilders with  
> EARConfigBuilder
>
> Removed:
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/ 
> java/org/apache/geronimo/j2ee/deployment/UnavailableModuleBuilder.java
> Modified:
>    geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/ 
> main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java
>    geronimo/server/trunk/plugins/client/geronimo-client-builder/src/ 
> main/java/org/apache/geronimo/client/builder/ 
> AppClientModuleBuilder.java
>    geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilder.java
>    geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilderTest.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/ 
> java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/ 
> java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/ 
> java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/ 
> java/org/apache/geronimo/j2ee/deployment/ 
> EARConfigBuilderTestSupport.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/ 
> java/org/apache/geronimo/j2ee/deployment/ 
> MockConnectorConfigBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/ 
> java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/ 
> java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java
>    geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/ 
> main/java/org/apache/geronimo/web25/deployment/ 
> AbstractWebModuleBuilder.java
>    geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/ 
> plan.xml
>    geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/ 
> src/main/java/org/apache/geronimo/openejb/deployment/ 
> EjbModuleBuilder.java
>
> Modified: geronimo/server/trunk/plugins/aries/geronimo-aries-builder/ 
> src/main/java/org/apache/geronimo/aries/builder/ 
> AriesAppModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/main/java/org/apache/geronimo/aries/builder/AriesAppModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/ 
> main/java/org/apache/geronimo/aries/builder/ 
> AriesAppModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/aries/geronimo-aries-builder/src/ 
> main/java/org/apache/geronimo/aries/builder/ 
> AriesAppModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -216,4 +216,11 @@
>         return null;
>     }
>
> +    public int getPriority() {
> +        return 50;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return AriesAppModule.class.isAssignableFrom(moduleType);
> +    }
> }
>
> Modified: geronimo/server/trunk/plugins/client/geronimo-client- 
> builder/src/main/java/org/apache/geronimo/client/builder/ 
> AppClientModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/client/geronimo-client-builder/src/main/java/org/apache/geronimo/client/builder/AppClientModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/client/geronimo-client-builder/src/ 
> main/java/org/apache/geronimo/client/builder/ 
> AppClientModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/client/geronimo-client-builder/src/ 
> main/java/org/apache/geronimo/client/builder/ 
> AppClientModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -839,6 +839,14 @@
>         return GERAPPCLIENT_NAMESPACE;
>     }
>
> +    public int getPriority() {
> +        return 40;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return AppClientModule.class.isAssignableFrom(moduleType);
> +    }
> +
>     public void addManifestClassPath(DeploymentContext  
> deploymentContext, JarFile earFile, JarFile jarFile, URI  
> jarFileLocation) throws DeploymentException {
>         Manifest manifest;
>         try {
>
> Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo- 
> connector-builder-1_6/src/main/java/org/apache/geronimo/connector/ 
> deployment/ConnectorModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/main/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -536,6 +536,14 @@
>         return GERCONNECTOR_NAMESPACE;
>     }
>
> +    public int getPriority() {
> +        return 30;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return ConnectorModule.class.isAssignableFrom(moduleType);
> +    }
> +
>     private void addConnectorGBeans(EARContext earContext,  
> AbstractName jcaResourceName, GBeanData resourceAdapterModuleData,  
> ConnectorType connector, GerConnectorType geronimoConnector, Bundle  
> bundle) throws DeploymentException {
>         ResourceadapterType resourceadapter =  
> connector.getResourceadapter();
>
>
> Modified: geronimo/server/trunk/plugins/connector-1_6/geronimo- 
> connector-builder-1_6/src/test/java/org/apache/geronimo/connector/ 
> deployment/ConnectorModuleBuilderTest.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector-1_6/geronimo-connector-builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilderTest.java (original)
> +++ geronimo/server/trunk/plugins/connector-1_6/geronimo-connector- 
> builder-1_6/src/test/java/org/apache/geronimo/connector/deployment/ 
> ConnectorModuleBuilderTest.java Sat Dec  5 06:24:26 2009
> @@ -22,6 +22,7 @@
> import java.net.URL;
> import java.sql.Connection;
> import java.sql.Statement;
> +import java.util.ArrayList;
> import java.util.Collections;
> import java.util.List;
> import java.util.Map;
> @@ -29,7 +30,6 @@
> import java.util.HashMap;
> import java.util.jar.JarFile;
>
> -import javax.naming.Reference;
> import javax.sql.DataSource;
> import org.apache.geronimo.common.DeploymentException;
> import org.apache.geronimo.deployment.DeploymentContext;
> @@ -41,7 +41,6 @@
> import org.apache.geronimo.gbean.AbstractNameQuery;
> import org.apache.geronimo.gbean.GBeanData;
> import org.apache.geronimo.gbean.GBeanInfo;
> -import org.apache.geronimo.j2ee.deployment.ActivationSpecInfoLocator;
> import org.apache.geronimo.j2ee.deployment.EARConfigBuilder;
> import org.apache.geronimo.j2ee.deployment.EARContext;
> import org.apache.geronimo.j2ee.deployment.Module;
> @@ -90,22 +89,6 @@
>     private Environment defaultEnvironment;
>     private ConfigurationStore configurationStore = new  
> MockConfigStore();
>     private MockRepository repository;
> -
> -    private ActivationSpecInfoLocator activationSpecInfoLocator =  
> new ActivationSpecInfoLocator() {
> -
> -        public Reference createResourceRef(AbstractNameQuery  
> containerId, Class iface, Configuration configuration) {
> -            return null;
> -        }
> -
> -        public Reference createAdminObjectRef(AbstractNameQuery  
> containerId, Class iface, Configuration configuration) {
> -            return null;
> -        }
> -
> -        public GBeanData locateActivationSpecInfo(AbstractNameQuery  
> nameQuery, String messageListenerInterface, Configuration  
> configuration) {
> -            return null;
> -        }
> -    };
> -
>     private Kernel kernel;
>     private ConfigurationManager configurationManager;
>     private static final Naming naming = new Jsr77Naming();
> @@ -122,17 +105,15 @@
>             rarFile = DeploymentUtil.createJarFile(new File(BASEDIR,  
> "target/test-ear-noger.ear"));
>             GBeanBuilder serviceBuilder = new GBeanBuilder(null,  
> null);
> //            EARConfigBuilder configBuilder = new  
> EARConfigBuilder(defaultEnvironment, transactionContextManagerName,  
> connectionTrackerName, null, null, null, new  
> AbstractNameQuery(serverName,  
> J2EEServerImpl.GBEAN_INFO.getInterfaces()), null, null,  
> ejbReferenceBuilder, null,
> +            List<ModuleBuilder> builders = new  
> ArrayList<ModuleBuilder>();
> +            builders.add(new  
> ConnectorModuleBuilder(defaultEnvironment, defaultMaxSize,  
> defaultMinSize, defaultBlockingTimeoutMilliseconds,  
> defaultidleTimeoutMinutes, defaultXATransactionCaching,  
> defaultXAThreadCaching, defaultWorkManagerName,  
> Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)));
>             EARConfigBuilder configBuilder = new  
> EARConfigBuilder(defaultEnvironment,
>                     transactionManagerName,
>                     connectionTrackerName,
>                     null,
>                     new AbstractNameQuery(serverName,  
> J2EEServerImpl.GBEAN_INFO.getInterfaces()),
>                     Collections.singleton(repository),
> -                    null,
> -                    null,
> -                    new ConnectorModuleBuilder(defaultEnvironment,  
> defaultMaxSize, defaultMinSize, defaultBlockingTimeoutMilliseconds,  
> defaultidleTimeoutMinutes, defaultXATransactionCaching,  
> defaultXAThreadCaching, defaultWorkManagerName,  
> Collections.<NamespaceDrivenBuilder>singleton(serviceBuilder)),
> -                    activationSpecInfoLocator,
> -                    null,
> +                    builders,
>                     serviceBuilder,
>                     null,
>                     kernel.getNaming(),
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/main/java/org/apache/geronimo/j2ee/deployment/ 
> EARConfigBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java  
> (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilder.java  
> Sat Dec  5 06:24:26 2009
> @@ -24,6 +24,7 @@
> import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Collections;
> +import java.util.Comparator;
> import java.util.Enumeration;
> import java.util.HashMap;
> import java.util.HashSet;
> @@ -60,7 +61,6 @@
> import org.apache.geronimo.gbean.GBeanData;
> import org.apache.geronimo.gbean.GBeanLifecycle;
> import org.apache.geronimo.gbean.ReferencePatterns;
> -import org.apache.geronimo.gbean.SingleElementCollection;
> import org.apache.geronimo.gbean.annotation.GBean;
> import org.apache.geronimo.gbean.annotation.ParamAttribute;
> import org.apache.geronimo.gbean.annotation.ParamReference;
> @@ -123,11 +123,7 @@
>
>     private final ConfigurationManager configurationManager;
>     private final Collection<? extends Repository> repositories;
> -    private final SingleElementCollection ejbConfigBuilder;
> -    private final SingleElementCollection webConfigBuilder;
> -    private final SingleElementCollection connectorConfigBuilder;
> -    private final SingleElementCollection appClientConfigBuilder;
> -    private final SingleElementCollection resourceReferenceBuilder;
> +    private final Collection<ModuleBuilder> moduleBuilders;
>     private final NamespaceDrivenBuilderCollection serviceBuilders;
>     private final Collection<ModuleBuilderExtension>  
> persistenceUnitBuilders;
>
> @@ -154,57 +150,13 @@
>         }
>     };
>
> -//    static {
> -//        GBeanInfoBuilder infoBuilder =  
> GBeanInfoBuilder.createStatic(EARConfigBuilder.class,  
> NameFactory.CONFIG_BUILDER);
> -//        infoBuilder.addAttribute("defaultEnvironment",  
> Environment.class, true, true);
> -//         
> infoBuilder.addAttribute("transactionManagerAbstractName",  
> AbstractNameQuery.class, true);
> -//        infoBuilder.addAttribute("connectionTrackerAbstractName",  
> AbstractNameQuery.class, true);
> -//        infoBuilder.addAttribute("corbaGBeanAbstractName",  
> AbstractNameQuery.class, true);
> -//        infoBuilder.addAttribute("serverName",  
> AbstractNameQuery.class, true);
> -//
> -//        infoBuilder.addReference("Repositories",  
> Repository.class, "Repository");
> -//        infoBuilder.addReference("EJBConfigBuilder",  
> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("WebConfigBuilder",  
> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("ConnectorConfigBuilder",  
> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("ActivationSpecInfoLocator",  
> ActivationSpecInfoLocator.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("AppClientConfigBuilder",  
> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("ServiceBuilders",  
> NamespaceDrivenBuilder.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("PersistenceUnitBuilders",  
> ModuleBuilderExtension.class, NameFactory.MODULE_BUILDER);
> -//        infoBuilder.addReference("ArtifactResolvers",  
> ArtifactResolver.class, "ArtifactResolver");
> -//
> -//        infoBuilder.addAttribute("kernel", Kernel.class, false);
> -//
> -//        infoBuilder.setConstructor(new String[]{
> -//                "defaultEnvironment",
> -//                "transactionManagerAbstractName",
> -//                "connectionTrackerAbstractName",
> -//                "corbaGBeanAbstractName",
> -//                "serverName",
> -//                "Repositories",
> -//                "EJBConfigBuilder",
> -//                "WebConfigBuilder",
> -//                "ConnectorConfigBuilder",
> -//                "ActivationSpecInfoLocator",
> -//                "AppClientConfigBuilder",
> -//                "ServiceBuilders",
> -//                "PersistenceUnitBuilders",
> -//                "ArtifactResolvers",
> -//                "kernel"
> -//        });
> -//
> -//    }
> -
>     public EARConfigBuilder(@ParamAttribute(name =  
> "defaultEnvironment") Environment defaultEnvironment,
>                             @ParamAttribute(name =  
> "transactionManagerAbstractName") AbstractNameQuery  
> transactionManagerAbstractName,
>                             @ParamAttribute(name =  
> "connectionTrackerAbstractName") AbstractNameQuery  
> connectionTrackerAbstractName,
>                             @ParamAttribute(name =  
> "corbaGBeanAbstractName") AbstractNameQuery corbaGBeanAbstractName,
>                             @ParamAttribute(name = "serverName")  
> AbstractNameQuery serverName,
>                             @ParamReference(name = "Repositories",  
> namingType = "Repository")Collection<? extends Repository>  
> repositories,
> -                            @ParamReference(name =  
> "EJBConfigBuilder", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> ejbConfigBuilder,
> -                            @ParamReference(name =  
> "WebConfigBuilder", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> webConfigBuilder,
> -                            @ParamReference(name =  
> "ConnectorConfigBuilder", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder>  
> connectorConfigBuilder,
> -                            @ParamReference(name =  
> "ActivationSpecInfoLocator", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder>  
> resourceReferenceBuilder,
> -                            @ParamReference(name =  
> "AppClientConfigBuilder", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder>  
> appClientConfigBuilder,
> +                            @ParamReference(name =  
> "ModuleBuilders", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilder> moduleBuilders,
>                             @ParamReference(name =  
> "ServiceBuilders", namingType =  
> NameFactory.MODULE_BUILDER)Collection<NamespaceDrivenBuilder>  
> serviceBuilders,
>                             @ParamReference(name =  
> "PersistenceUnitBuilders", namingType =  
> NameFactory.MODULE_BUILDER)Collection<ModuleBuilderExtension>  
> persistenceUnitBuilders,
>                             @ParamReference(name =  
> "ArtifactResolvers", namingType = "ArtifactResolver")Collection<?  
> extends ArtifactResolver> artifactResolvers,
> @@ -217,11 +169,7 @@
>                 serverName,
>                 ConfigurationUtil.getConfigurationManager(kernel),
>                 repositories,
> -                new  
> SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(webConfigBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(resourceReferenceBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
> +                moduleBuilders,
>                 serviceBuilders,
>                 persistenceUnitBuilders,
>                 kernel.getNaming(), artifactResolvers,
> @@ -234,11 +182,7 @@
>                             AbstractNameQuery corbaGBeanAbstractName,
>                             AbstractNameQuery serverName,
>                             Collection<? extends Repository>  
> repositories,
> -                            ModuleBuilder ejbConfigBuilder,
> -                            ModuleBuilder webConfigBuilder,
> -                            ModuleBuilder connectorConfigBuilder,
> -                            ActivationSpecInfoLocator  
> activationSpecInfoLocator,
> -                            ModuleBuilder appClientConfigBuilder,
> +                            Collection<ModuleBuilder> moduleBuilders,
>                             NamespaceDrivenBuilder serviceBuilder,
>                             ModuleBuilderExtension  
> persistenceUnitBuilder,
>                             Naming naming,
> @@ -250,11 +194,7 @@
>                 serverName,
>                 null,
>                 repositories,
> -                new  
> SingleElementCollection<ModuleBuilder>(ejbConfigBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(webConfigBuilder),
> -                new  
> SingleElementCollection<ModuleBuilder>(connectorConfigBuilder),
> -                new  
> SingleElementCollection 
> <ActivationSpecInfoLocator>(activationSpecInfoLocator),
> -                new  
> SingleElementCollection<ModuleBuilder>(appClientConfigBuilder),
> +                moduleBuilders,
>                 serviceBuilder == null ?  
> Collections.<NamespaceDrivenBuilder>emptySet() :  
> Collections.singleton(serviceBuilder),
>                 persistenceUnitBuilder == null ?  
> Collections.<ModuleBuilderExtension>emptySet() :  
> Collections.singleton(persistenceUnitBuilder),
>                 naming,
> @@ -269,11 +209,7 @@
>                              AbstractNameQuery serverName,
>                              ConfigurationManager  
> configurationManager,
>                              Collection<? extends Repository>  
> repositories,
> -                             SingleElementCollection  
> ejbConfigBuilder,
> -                             SingleElementCollection  
> webConfigBuilder,
> -                             SingleElementCollection  
> connectorConfigBuilder,
> -                             SingleElementCollection  
> resourceReferenceBuilder,
> -                             SingleElementCollection  
> appClientConfigBuilder,
> +                             Collection<ModuleBuilder>  
> moduleBuilders,
>                              Collection<NamespaceDrivenBuilder>  
> serviceBuilders,
>                              Collection<ModuleBuilderExtension>  
> persistenceUnitBuilders,
>                              Naming naming,
> @@ -283,11 +219,7 @@
>         this.repositories = repositories;
>         this.defaultEnvironment = defaultEnvironment;
>
> -        this.ejbConfigBuilder = ejbConfigBuilder;
> -        this.resourceReferenceBuilder = resourceReferenceBuilder;
> -        this.webConfigBuilder = webConfigBuilder;
> -        this.connectorConfigBuilder = connectorConfigBuilder;
> -        this.appClientConfigBuilder = appClientConfigBuilder;
> +        this.moduleBuilders = moduleBuilders;
>         this.serviceBuilders = new  
> NamespaceDrivenBuilderCollection(serviceBuilders);
>         this.persistenceUnitBuilders = persistenceUnitBuilders;
>
> @@ -315,21 +247,21 @@
>     public AbstractNameQuery getCorbaGBeanName() {
>         return corbaGBeanObjectName;
>     }
> -
> +
>     private ModuleBuilder getEjbConfigBuilder() {
> -        return (ModuleBuilder) ejbConfigBuilder.getElement();
> +        return getModuleBuilder(EJBModule.class);
>     }
> -
> +
>     private ModuleBuilder getWebConfigBuilder() {
> -        return (ModuleBuilder) webConfigBuilder.getElement();
> +        return getModuleBuilder(WebModule.class);
>     }
> -
> +
>     private ModuleBuilder getConnectorConfigBuilder() {
> -        return (ModuleBuilder) connectorConfigBuilder.getElement();
> +        return getModuleBuilder(ConnectorModule.class);
>     }
> -
> +
>     private ModuleBuilder getAppClientConfigBuilder() {
> -        return (ModuleBuilder) appClientConfigBuilder.getElement();
> +        return getModuleBuilder(AppClientModule.class);
>     }
>
>     public Object getDeploymentPlan(File planFile, JarFile jarFile,  
> ModuleIDBuilder idBuilder) throws DeploymentException {
> @@ -347,18 +279,13 @@
>
>         // get the modules either the application plan or for a  
> stand alone module from the specific deployer
>         Module module = null;
> -        if (getWebConfigBuilder() != null) {
> -            module = getWebConfigBuilder().createModule(planFile,  
> jarFile, naming, idBuilder);
> -        }
> -        if (module == null && getEjbConfigBuilder() != null) {
> -            module = getEjbConfigBuilder().createModule(planFile,  
> jarFile, naming, idBuilder);
> -        }
> -        if (module == null && getConnectorConfigBuilder() != null) {
> -            module =  
> getConnectorConfigBuilder().createModule(planFile, jarFile, naming,  
> idBuilder);
> -        }
> -        if (module == null && getAppClientConfigBuilder() != null) {
> -            module =  
> getAppClientConfigBuilder().createModule(planFile, jarFile, naming,  
> idBuilder);
> +        for (ModuleBuilder moduleBuilder :  
> getSortedModuleBuilders()) {
> +            module = moduleBuilder.createModule(planFile, jarFile,  
> naming, idBuilder);
> +            if (module != null) {
> +                break;
> +            }
>         }
> +
>         if (module == null) {
>             return null;
>         }
> @@ -1136,29 +1063,45 @@
>         return null;
>     }
>
> +    private List<ModuleBuilder> getSortedModuleBuilders() {
> +        List<ModuleBuilder> list = new  
> ArrayList<ModuleBuilder>(moduleBuilders);
> +        Collections.sort(list, new ModuleBuilderComparator());
> +        return list;
> +    }
> +
> +    private static class ModuleBuilderComparator implements  
> Comparator<ModuleBuilder> {
> +        public int compare(ModuleBuilder o1, ModuleBuilder o2) {
> +            return o1.getPriority() - o2.getPriority();
> +        }
> +    }
> +
> +    private ModuleBuilder getModuleBuilder(Class module) {
> +        for (ModuleBuilder builder : moduleBuilders) {
> +            if (builder.supportsModule(module)) {
> +                return builder;
> +            }
> +        }
> +        return null;
> +    }
> +
>     private ModuleBuilder getBuilder(Module module) throws  
> DeploymentException {
> -        if (module instanceof EJBModule) {
> -            if (getEjbConfigBuilder() == null) {
> +        ModuleBuilder builder = getModuleBuilder(module.getClass());
> +
> +        if (builder == null) {
> +            if (module instanceof EJBModule) {
>                 throw new DeploymentException("Cannot deploy ejb  
> application; No ejb deployer defined: " + module.getModuleURI());
> -            }
> -            return getEjbConfigBuilder();
> -        } else if (module instanceof WebModule) {
> -            if (getWebConfigBuilder() == null) {
> +            } else if (module instanceof WebModule) {
>                 throw new DeploymentException("Cannot deploy web  
> application; No war deployer defined: " + module.getModuleURI());
> -            }
> -            return getWebConfigBuilder();
> -        } else if (module instanceof ConnectorModule) {
> -            if (getConnectorConfigBuilder() == null) {
> +            } else if (module instanceof ConnectorModule) {
>                 throw new DeploymentException("Cannot deploy  
> resource adapter; No rar deployer defined: " + module.getModuleURI());
> -            }
> -            return getConnectorConfigBuilder();
> -        } else if (module instanceof AppClientModule) {
> -            if (getAppClientConfigBuilder() == null) {
> +            } else if (module instanceof AppClientModule) {
>                 throw new DeploymentException("Cannot deploy app  
> client; No app client deployer defined: " + module.getModuleURI());
> +            } else {
> +                throw new DeploymentException("Cannot deploy  
> application; No deployer for module: " + module.getModuleURI());
>             }
> -            return getAppClientConfigBuilder();
> -        }
> -        throw new IllegalArgumentException("Unknown module type: "  
> + module.getClass().getName());
> +        }
> +
> +        return builder;
>     }
>
> }
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java  
> (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/ModuleBuilder.java Sat  
> Dec  5 06:24:26 2009
> @@ -33,6 +33,9 @@
>  * @version $Rev:386276 $ $Date$
>  */
> public interface ModuleBuilder {
> +
> +    int NORMAL_PRIORITY = 50;
> +
>     Module createModule(File plan, JarFile moduleFile, Naming  
> naming, ModuleIDBuilder idBuilder) throws DeploymentException;
>
>     Module createModule(Object plan, JarFile moduleFile, String  
> targetPath, URL specDDUrl, Environment environment, Object  
> moduleContextInfo, AbstractName earName, Naming naming,  
> ModuleIDBuilder idBuilder) throws DeploymentException;
> @@ -44,4 +47,15 @@
>     void addGBeans(EARContext earContext, Module module, Bundle  
> bundle, Collection repository) throws DeploymentException;
>
>     String getSchemaNamespace();
> +
> +    /**
> +     * Returns sort order priority.  Lower numbers indicate higher  
> priority.
> +     */
> +    int getPriority();
> +
> +    /**
> +     * Returns true if this ModuleBuilder creates and installs  
> module of the specified type.
> +     *
> +     */
> +    boolean supportsModule(Class moduleType);
> }
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/main/java/org/apache/geronimo/j2ee/deployment/ 
> SwitchingModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/SwitchingModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/ 
> SwitchingModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> main/java/org/apache/geronimo/j2ee/deployment/ 
> SwitchingModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -50,9 +50,14 @@
>
>     private final Map namespaceToBuilderMap = new HashMap();
>
> +    private Class supportedModuleType;
> +    private int priority = NORMAL_PRIORITY;
>     private String defaultNamespace;
>
> -    public SwitchingModuleBuilder(Collection builders) {
> +    public SwitchingModuleBuilder(Collection builders, String  
> supportedModule, int priority) throws Exception {
> +        this.supportedModuleType =  
> SwitchingModuleBuilder 
> .class.getClassLoader().loadClass(supportedModule);
> +        this.priority = priority;
> +
>         ReferenceCollection buildersCollection =  
> (ReferenceCollection) builders;
>         buildersCollection.addReferenceCollectionListener(new  
> ReferenceCollectionListener() {
>             public void memberAdded(ReferenceCollectionEvent event) {
> @@ -170,15 +175,25 @@
>         return null;
>     }
>
> +    public int getPriority() {
> +        return priority;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return supportedModuleType.isAssignableFrom(moduleType);
> +    }
> +
>     public static final GBeanInfo GBEAN_INFO;
>
>     static {
>         GBeanInfoBuilder infoBuilder =  
> GBeanInfoBuilder.createStatic(SwitchingModuleBuilder.class,  
> NameFactory.MODULE_BUILDER);
>         infoBuilder.addAttribute("defaultNamespace", String.class,  
> true, true);
> +        infoBuilder.addAttribute("supportedModule", String.class,  
> true, true);
> +        infoBuilder.addAttribute("priority", int.class, true, true);
>         infoBuilder.addReference("ModuleBuilders",  
> ModuleBuilder.class, NameFactory.MODULE_BUILDER);
>         infoBuilder.addInterface(ModuleBuilder.class);
>
> -        infoBuilder.setConstructor(new String[] {"ModuleBuilders"});
> +        infoBuilder.setConstructor(new String[] {"ModuleBuilders",  
> "supportedModule","priority"});
>         GBEAN_INFO = infoBuilder.getBeanInfo();
>     }
>
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/test/java/org/apache/geronimo/j2ee/deployment/ 
> EARConfigBuilderTestSupport.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/EARConfigBuilderTestSupport.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> EARConfigBuilderTestSupport.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> EARConfigBuilderTestSupport.java Sat Dec  5 06:24:26 2009
> @@ -16,8 +16,10 @@
>  */
> package org.apache.geronimo.j2ee.deployment;
>
> +import java.util.ArrayList;
> import java.util.Collection;
> import java.util.Collections;
> +import java.util.List;
> import java.util.Map;
> import java.util.Set;
> import java.util.HashSet;
> @@ -72,10 +74,6 @@
>
>     protected static MockConnectorConfigBuilder  
> connectorConfigBuilder = new MockConnectorConfigBuilder();
>
> -    protected static ActivationSpecInfoLocator  
> activationSpecInfoLocator = connectorConfigBuilder;
> -
> -    protected static ModuleBuilder appClientConfigBuilder = null;
> -
>     protected final static ModuleIDBuilder idBuilder = new  
> ModuleIDBuilder();
>
>     protected static final NamespaceDrivenBuilder securityBuilder =  
> null;
> @@ -106,7 +104,6 @@
>
>     protected static final AbstractName raModuleName =  
> naming.createChildName(earName, "rar",  
> NameFactory.RESOURCE_ADAPTER_MODULE);
>
> -
>     protected Map<String, Artifact> locations = new HashMap<String,  
> Artifact>();
>
>     protected Environment defaultParentId;
> @@ -136,6 +133,14 @@
>         defaultParentId.addDependency(new  
> Artifact("org.apache.geronimo.tests", "test", "1", "car"),  
> ImportType.ALL);
>     }
>
> +    private List<ModuleBuilder>  
> getBuilders(ModuleBuilder...builders) {
> +        List<ModuleBuilder> b = new ArrayList<ModuleBuilder>();
> +        for (ModuleBuilder builder : builders) {
> +            b.add(builder);
> +        }
> +        return b;
> +    }
> +
>     public void testBuildConfiguration() throws Exception {
>         ConfigurationData configurationData = null;
>         DeploymentContext context = null;
> @@ -146,11 +151,9 @@
>                     corbaGBeanAbstractNameQuery,
>                     null,
>                     Collections.singleton(repository),
> -                    ejbConfigBuilder,
> -                    webConfigBuilder,
> -                    connectorConfigBuilder,
> -                    activationSpecInfoLocator,
> -                    appClientConfigBuilder,
> +                    getBuilders(ejbConfigBuilder,
> +                                webConfigBuilder,
> +                                connectorConfigBuilder),
>                     serviceBuilder,
>                     persistenceUnitBuilder,
>                     naming,
> @@ -177,11 +180,9 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                webConfigBuilder,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                            webConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -212,11 +213,9 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                webConfigBuilder,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                            webConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -247,11 +246,9 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                webConfigBuilder,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                            webConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -282,11 +279,9 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                webConfigBuilder,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                            webConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -317,11 +312,8 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                null,
> -                webConfigBuilder,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(webConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -353,11 +345,8 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                null,
> -                connectorConfigBuilder,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                            connectorConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
> @@ -388,11 +377,8 @@
>                 corbaGBeanAbstractNameQuery,
>                 null,
>                 null,
> -                ejbConfigBuilder,
> -                webConfigBuilder,
> -                null,
> -                activationSpecInfoLocator,
> -                appClientConfigBuilder,
> +                getBuilders(ejbConfigBuilder,
> +                             webConfigBuilder),
>                 serviceBuilder,
>                 persistenceUnitBuilder,
>                 naming, artifactResolvers, bundleContext);
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/test/java/org/apache/geronimo/j2ee/deployment/ 
> MockConnectorConfigBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockConnectorConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockConnectorConfigBuilder.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockConnectorConfigBuilder.java Sat Dec  5 06:24:26 2009
> @@ -114,4 +114,12 @@
>     public GBeanData locateConnectionFactoryInfo(GBeanData  
> resourceAdapterModuleData, String connectionFactoryInterfaceName)  
> throws DeploymentException {
>         return null;
>     }
> +
> +    public int getPriority() {
> +        return NORMAL_PRIORITY;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return ConnectorModule.class.isAssignableFrom(moduleType);
> +    }
> }
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/test/java/org/apache/geronimo/j2ee/deployment/ 
> MockEJBConfigBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockEJBConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockEJBConfigBuilder.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockEJBConfigBuilder.java Sat Dec  5 06:24:26 2009
> @@ -83,4 +83,12 @@
>         return null;
>     }
>
> +    public int getPriority() {
> +        return NORMAL_PRIORITY;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return EJBModule.class.isAssignableFrom(moduleType);
> +    }
> +
> }
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/ 
> src/test/java/org/apache/geronimo/j2ee/deployment/ 
> MockWARConfigBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/test/java/org/apache/geronimo/j2ee/deployment/MockWARConfigBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockWARConfigBuilder.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/ 
> test/java/org/apache/geronimo/j2ee/deployment/ 
> MockWARConfigBuilder.java Sat Dec  5 06:24:26 2009
> @@ -88,4 +88,12 @@
>         return null;
>     }
>
> +    public int getPriority() {
> +        return NORMAL_PRIORITY;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return WebModule.class.isAssignableFrom(moduleType);
> +    }
> +
> }
>
> Modified: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5- 
> builder/src/main/java/org/apache/geronimo/web25/deployment/ 
> AbstractWebModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/ 
> main/java/org/apache/geronimo/web25/deployment/ 
> AbstractWebModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/ 
> main/java/org/apache/geronimo/web25/deployment/ 
> AbstractWebModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -746,6 +746,14 @@
>          
> webModuleData.setReferencePattern("TrackedConnectionAssociator",  
> moduleContext.getConnectionTrackerName());
>     }
>
> +    public int getPriority() {
> +        return 10;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return WebModule.class.isAssignableFrom(moduleType);
> +    }
> +
>     private static class InternWrapper implements XMLStreamReader {
>         private final XMLStreamReader delegate;
>
>
> Modified: geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/ 
> plan/plan.xml
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/plan.xml?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/ 
> plan.xml (original)
> +++ geronimo/server/trunk/plugins/j2ee/j2ee-deployer/src/main/plan/ 
> plan.xml Sat Dec  5 06:24:26 2009
> @@ -28,9 +28,6 @@
>         <reference name="Repositories">
>             <!--<gbean-name>*:name=Repository,*</gbean-name>-->
>         </reference>
> -        <reference name="WebConfigBuilder">
> -            <name>WebBuilder</name>
> -        </reference>
>         <references name="ServiceBuilders">
>             <pattern>
>                 <name>GBeanBuilder</name>
> @@ -44,23 +41,21 @@
>                 <name>PersistenceUnitBuilder</name>
>             </pattern>
>         </references>
> -        <references name="EJBConfigBuilder">
> +        <references name="ModuleBuilders">
> +            <pattern>
> +                <name>WebBuilder</name>
> +            </pattern>
>             <pattern>
>                 <name>EJBBuilder</name>
>             </pattern>
>             <pattern>
> -                <name>UnavailableEJBBuilder</name>
> +                <name>ConnectorBuilder</name>
>             </pattern>
> -        </references>
> -        <reference name="ConnectorConfigBuilder">
> -            <name>ConnectorBuilder</name>
> -        </reference>
> -        <references name="AppClientConfigBuilder">
>             <pattern>
>                 <name>AppClientBuilder</name>
>             </pattern>
>             <pattern>
> -                <name>UnavailableAppClientBuilder</name>
> +                <name>AriesAppBuilder</name>
>             </pattern>
>         </references>
>         <reference name="ArtifactResolvers">
> @@ -82,6 +77,8 @@
>     <!-- web switching builder -->
>     <gbean name="WebBuilder"  
> class="org.apache.geronimo.j2ee.deployment.SwitchingModuleBuilder">
>         <attribute name="defaultNamespace">http://geronimo.apache.org/xml/ns/j2ee/web/tomcat-$ 
> {geronimoSchemaVersion}</attribute>
> +        <attribute  
> name 
> ="supportedModule">org.apache.geronimo.j2ee.deployment.WebModule</ 
> attribute>
> +        <attribute name="priority">10</attribute>
>         <references name="ModuleBuilders">
>             <pattern>
>                 <name>JettyWebBuilder</name>
>
> Modified: geronimo/server/trunk/plugins/openejb/geronimo-openejb- 
> builder/src/main/java/org/apache/geronimo/openejb/deployment/ 
> EjbModuleBuilder.java
> URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/src/main/java/org/apache/geronimo/openejb/deployment/EjbModuleBuilder.java?rev=887507&r1=887506&r2=887507&view=diff
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> = 
> ======================================================================
> --- geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/ 
> src/main/java/org/apache/geronimo/openejb/deployment/ 
> EjbModuleBuilder.java (original)
> +++ geronimo/server/trunk/plugins/openejb/geronimo-openejb-builder/ 
> src/main/java/org/apache/geronimo/openejb/deployment/ 
> EjbModuleBuilder.java Sat Dec  5 06:24:26 2009
> @@ -898,6 +898,14 @@
>         return new AbstractNameQuery(artifact, nameMap, (Set) null);
>     }
>
> +    public int getPriority() {
> +        return 20;
> +    }
> +
> +    public boolean supportsModule(Class moduleType) {
> +        return EjbModule.class.isAssignableFrom(moduleType);
> +    }
> +
>     public static class EarData {
>         private final Map<String, EjbModule> ejbModules = new  
> TreeMap<String, EjbModule>();
>         private final Map<String, EjbJarInfo> ejbJars = new  
> TreeMap<String, EjbJarInfo>();
>
>