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, [email protected] 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>();





Reply via email to