From 3f9cbf4b0906e2f6a1d63c87e25a82cb06d12757 Mon Sep 17 00:00:00 2001 From: Thomas Diesler Date: Mon, 12 Nov 2012 17:22:28 +0100 Subject: [PATCH] [AS7-5927] Minimal AS7 build pulls in many unecessary dependencies --- arquillian/container-embedded/pom.xml | 38 ++++++----------- build-modular/build-modular-config.xml | 9 +--- .../javax/activation/api/main/module.xml | 6 +-- .../modules/org/jboss/as/ee/main/module.xml | 4 +- .../org/jboss/as/embedded/main/module.xml | 4 ++ .../org/jboss/as/logging/main/module.xml | 2 +- .../modules/org/jboss/as/osgi/main/module.xml | 5 ++- .../org/jboss/as/server/main/module.xml | 3 +- .../org/jboss/metadata/main/module.xml | 18 ++++---- .../assembly/GenerateModulesDefinition.java | 39 ++++++++++-------- embedded/pom.xml | 4 ++ .../as/embedded/EmbeddedServerFactory.java | 24 +---------- .../EmbeddedStandAloneServerFactory.java | 24 ++++++----- ...mbeddedServerFactorySetupUnitTestCase.java | 10 +++-- server/pom.xml | 4 -- .../module/ServerDependenciesProcessor.java | 41 +++++++++++-------- 16 files changed, 107 insertions(+), 128 deletions(-) rename {server/src/main/java/org/jboss/as/server => embedded/src/main/java/org/jboss/as/embedded}/EmbeddedStandAloneServerFactory.java (98%) rename {server/src/test/java/org/jboss/as/server => embedded/src/test/java/org/jboss/as/embedded}/EmbeddedServerFactorySetupUnitTestCase.java (99%) diff --git a/arquillian/container-embedded/pom.xml b/arquillian/container-embedded/pom.xml index 24e859821e9..d337c0ed85e 100644 --- a/arquillian/container-embedded/pom.xml +++ b/arquillian/container-embedded/pom.xml @@ -101,31 +101,19 @@ - - org.apache.maven.plugins - maven-surefire-plugin - - - - java.util.logging.manager - org.jboss.logmanager.LogManager - - - jboss.home - ${basedir}/target/jbossas - - - module.path - ${jboss.home}/modules - - - bundle.path - ${jboss.home}/bundles - - - true - - + + org.apache.maven.plugins + maven-surefire-plugin + + + org.jboss.logmanager.LogManager + ${basedir}/target/jbossas + ${jboss.home}/modules + ${jboss.home}/modules + + true + + diff --git a/build-modular/build-modular-config.xml b/build-modular/build-modular-config.xml index 64402d1027b..cd28649242f 100644 --- a/build-modular/build-modular-config.xml +++ b/build-modular/build-modular-config.xml @@ -44,16 +44,11 @@ + org.jboss.logging.jul-to-slf4j-stub" + /> diff --git a/build/src/main/resources/modules/javax/activation/api/main/module.xml b/build/src/main/resources/modules/javax/activation/api/main/module.xml index 7b73e1f644c..b2285d6a61e 100644 --- a/build/src/main/resources/modules/javax/activation/api/main/module.xml +++ b/build/src/main/resources/modules/javax/activation/api/main/module.xml @@ -25,11 +25,11 @@ - + - - + + diff --git a/build/src/main/resources/modules/org/jboss/as/ee/main/module.xml b/build/src/main/resources/modules/org/jboss/as/ee/main/module.xml index 483dcfd22e5..e8bb56e777c 100644 --- a/build/src/main/resources/modules/org/jboss/as/ee/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/as/ee/main/module.xml @@ -37,10 +37,10 @@ - + - + diff --git a/build/src/main/resources/modules/org/jboss/as/embedded/main/module.xml b/build/src/main/resources/modules/org/jboss/as/embedded/main/module.xml index ba03c61c1f2..22156858d86 100644 --- a/build/src/main/resources/modules/org/jboss/as/embedded/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/as/embedded/main/module.xml @@ -33,9 +33,13 @@ + + + + diff --git a/build/src/main/resources/modules/org/jboss/as/logging/main/module.xml b/build/src/main/resources/modules/org/jboss/as/logging/main/module.xml index 49487ea1e1f..c310cf17e04 100644 --- a/build/src/main/resources/modules/org/jboss/as/logging/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/as/logging/main/module.xml @@ -33,7 +33,7 @@ - + diff --git a/build/src/main/resources/modules/org/jboss/as/osgi/main/module.xml b/build/src/main/resources/modules/org/jboss/as/osgi/main/module.xml index fd4cc0a4662..f86ea33734e 100644 --- a/build/src/main/resources/modules/org/jboss/as/osgi/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/as/osgi/main/module.xml @@ -34,12 +34,13 @@ + - - + + diff --git a/build/src/main/resources/modules/org/jboss/as/server/main/module.xml b/build/src/main/resources/modules/org/jboss/as/server/main/module.xml index 728d87566d8..ac276ced3c3 100644 --- a/build/src/main/resources/modules/org/jboss/as/server/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/as/server/main/module.xml @@ -36,7 +36,7 @@ - + @@ -56,7 +56,6 @@ - diff --git a/build/src/main/resources/modules/org/jboss/metadata/main/module.xml b/build/src/main/resources/modules/org/jboss/metadata/main/module.xml index 4d41ac8f176..40855d15b1b 100644 --- a/build/src/main/resources/modules/org/jboss/metadata/main/module.xml +++ b/build/src/main/resources/modules/org/jboss/metadata/main/module.xml @@ -34,15 +34,15 @@ - - - - - - - - - + + + + + + + + + diff --git a/config-assembly/src/main/java/org/jboss/as/config/assembly/GenerateModulesDefinition.java b/config-assembly/src/main/java/org/jboss/as/config/assembly/GenerateModulesDefinition.java index 2287f13bac7..9cdd75789ab 100644 --- a/config-assembly/src/main/java/org/jboss/as/config/assembly/GenerateModulesDefinition.java +++ b/config-assembly/src/main/java/org/jboss/as/config/assembly/GenerateModulesDefinition.java @@ -37,6 +37,7 @@ import javax.xml.stream.XMLStreamWriter; import org.jboss.as.config.assembly.ModuleParser.ModuleDependency; +import org.jboss.logging.Logger; import org.jboss.modules.ModuleIdentifier; /** @@ -48,6 +49,8 @@ */ public class GenerateModulesDefinition { + static Logger log = Logger.getLogger(GenerateModulesDefinition.class); + static final String SPLIT_PATTERN = ",(\\s*)"; static final String SKIP_SUBSYSTEMS = "skip-subsystems"; static final String NO_MODULE_DEPENENCIES = "no-module-dependencies"; @@ -171,30 +174,30 @@ public int compare(ModuleIdentifier o1, ModuleIdentifier o2) { private void processModuleDependency(List dependencies, ElementNode parentNode, ModuleDependency dep) throws IOException, XMLStreamException { ModuleIdentifier moduleId = dep.getModuleId(); + if (dependencies.contains(moduleId)) { + log.debugf("Already defined: %s", moduleId); + return; + } + ElementNode moduleNode = new ElementNode(parentNode, "module"); moduleNode.addAttribute("name", new AttributeValue(moduleId.toString())); - if (dep.isOptional()) { - moduleNode.addAttribute("optional", new AttributeValue("true")); - } - if (dependencies.contains(moduleId)) { - moduleNode.addAttribute("defined", new AttributeValue("true")); - parentNode.addChild(moduleNode); - } else { - parentNode.addChild(moduleNode); - if (!dep.isOptional()) { - dependencies.add(moduleId); + parentNode.addChild(moduleNode); - String path = moduleId.getName().replace('.', '/') + '/' + moduleId.getSlot(); - File moduleFile = new File(resourcesDir + File.separator + "modules" + File.separator + path + File.separator + "module.xml"); + if (!dep.isOptional()) { + dependencies.add(moduleId); - ModuleParser moduleParser = new ModuleParser(moduleFile); - moduleParser.parse(); + String path = moduleId.getName().replace('.', '/') + '/' + moduleId.getSlot(); + File moduleFile = new File(resourcesDir + File.separator + "modules" + File.separator + path + File.separator + "module.xml"); - List moduledeps = moduleParser.getDependencies(); - for (ModuleDependency aux : moduledeps) { - processModuleDependency(dependencies, moduleNode, aux); - } + ModuleParser moduleParser = new ModuleParser(moduleFile); + moduleParser.parse(); + + List moduledeps = moduleParser.getDependencies(); + for (ModuleDependency aux : moduledeps) { + processModuleDependency(dependencies, moduleNode, aux); } + } else { + moduleNode.addAttribute("optional", new AttributeValue("true")); } } } diff --git a/embedded/pom.xml b/embedded/pom.xml index 424cd5a54a6..332e5ab7615 100644 --- a/embedded/pom.xml +++ b/embedded/pom.xml @@ -63,6 +63,10 @@ org.jboss.as jboss-as-controller-client + + org.jboss.as + jboss-as-server + org.jboss jandex diff --git a/embedded/src/main/java/org/jboss/as/embedded/EmbeddedServerFactory.java b/embedded/src/main/java/org/jboss/as/embedded/EmbeddedServerFactory.java index 07744e4c1c5..9cd746ad5e6 100644 --- a/embedded/src/main/java/org/jboss/as/embedded/EmbeddedServerFactory.java +++ b/embedded/src/main/java/org/jboss/as/embedded/EmbeddedServerFactory.java @@ -32,8 +32,6 @@ import org.jboss.modules.log.JDKModuleLogger; import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.Map; import java.util.Properties; import java.util.logging.LogManager; @@ -65,27 +63,7 @@ private EmbeddedServerFactory() { } public static StandaloneServer create(final ModuleLoader moduleLoader, final File jbossHomeDir, final Properties systemProps, final Map systemEnv) { - try { - // Load the server Module and get its ClassLoader - final ModuleIdentifier serverModuleId = ModuleIdentifier.create("org.jboss.as.server"); - final Module serverModule = moduleLoader.loadModule(serverModuleId); - final ModuleClassLoader serverModuleClassLoader = serverModule.getClassLoader(); - - Class embeddedStandAloneServerFactoryClass = serverModuleClassLoader.loadClass("org.jboss.as.server.EmbeddedStandAloneServerFactory"); - Method createMethod = embeddedStandAloneServerFactoryClass.getMethod("create", File.class, ModuleLoader.class, Properties.class, Map.class); - final StandaloneServer standaloneServer = (StandaloneServer) createMethod.invoke(null, jbossHomeDir, moduleLoader, systemProps, systemEnv); - return standaloneServer; - } catch (ModuleLoadException e) { - throw MESSAGES.moduleLoaderError(e, e.getMessage(), moduleLoader); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } catch (InvocationTargetException e) { - throw new RuntimeException(e); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } + return EmbeddedStandAloneServerFactory.create(jbossHomeDir, moduleLoader, systemProps, systemEnv); } public static StandaloneServer create(final File jbossHomeDir, final Properties systemProps, final Map systemEnv, String...systemPackages) { diff --git a/server/src/main/java/org/jboss/as/server/EmbeddedStandAloneServerFactory.java b/embedded/src/main/java/org/jboss/as/embedded/EmbeddedStandAloneServerFactory.java similarity index 98% rename from server/src/main/java/org/jboss/as/server/EmbeddedStandAloneServerFactory.java rename to embedded/src/main/java/org/jboss/as/embedded/EmbeddedStandAloneServerFactory.java index 46fbad9d868..832125ab3ab 100644 --- a/server/src/main/java/org/jboss/as/server/EmbeddedStandAloneServerFactory.java +++ b/embedded/src/main/java/org/jboss/as/embedded/EmbeddedStandAloneServerFactory.java @@ -20,12 +20,8 @@ * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.jboss.as.server; +package org.jboss.as.embedded; -import javax.naming.Context; -import javax.naming.InitialContext; -import javax.naming.NamingException; -import javax.xml.namespace.QName; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; @@ -45,20 +41,28 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; -import org.jboss.as.controller.extension.ExtensionRegistry; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import javax.xml.namespace.QName; + import org.jboss.as.controller.ModelController; import org.jboss.as.controller.client.ModelControllerClient; import org.jboss.as.controller.client.helpers.standalone.DeploymentPlan; import org.jboss.as.controller.client.helpers.standalone.ServerDeploymentManager; import org.jboss.as.controller.client.helpers.standalone.ServerDeploymentPlanResult; +import org.jboss.as.controller.extension.ExtensionRegistry; import org.jboss.as.controller.parsing.Namespace; -import org.jboss.as.server.parsing.StandaloneXml; import org.jboss.as.controller.persistence.ExtensibleConfigurationPersister; import org.jboss.as.controller.persistence.TransientConfigurationPersister; -import org.jboss.as.embedded.ServerStartException; -import org.jboss.as.embedded.StandaloneServer; import org.jboss.as.protocol.StreamUtils; +import org.jboss.as.server.Bootstrap; +import org.jboss.as.server.Main; +import org.jboss.as.server.ServerEnvironment; +import org.jboss.as.server.ServerMessages; +import org.jboss.as.server.Services; import org.jboss.as.server.deployment.client.ModelControllerServerDeploymentManager; +import org.jboss.as.server.parsing.StandaloneXml; import org.jboss.modules.Module; import org.jboss.modules.ModuleLoader; import org.jboss.msc.service.ServiceActivator; @@ -225,7 +229,7 @@ public void undeploy(File file) throws ExecutionException, InterruptedException return standaloneServer; } - public static void setupCleanDirectories(Properties props) { + static void setupCleanDirectories(Properties props) { File jbossHomeDir = new File(props.getProperty(ServerEnvironment.HOME_DIR)); setupCleanDirectories(jbossHomeDir, props); } diff --git a/server/src/test/java/org/jboss/as/server/EmbeddedServerFactorySetupUnitTestCase.java b/embedded/src/test/java/org/jboss/as/embedded/EmbeddedServerFactorySetupUnitTestCase.java similarity index 99% rename from server/src/test/java/org/jboss/as/server/EmbeddedServerFactorySetupUnitTestCase.java rename to embedded/src/test/java/org/jboss/as/embedded/EmbeddedServerFactorySetupUnitTestCase.java index 1def39a5b4f..86d2ff1b1bf 100644 --- a/server/src/test/java/org/jboss/as/server/EmbeddedServerFactorySetupUnitTestCase.java +++ b/embedded/src/test/java/org/jboss/as/embedded/EmbeddedServerFactorySetupUnitTestCase.java @@ -19,16 +19,18 @@ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ -package org.jboss.as.server; +package org.jboss.as.embedded; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; +import org.jboss.as.server.ServerEnvironment; import java.io.File; import java.io.IOException; import java.util.Properties; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + /** * * @author Kabir Khan diff --git a/server/pom.xml b/server/pom.xml index 5d7f9449b3d..18cedf84f28 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -65,10 +65,6 @@ org.jboss.as jboss-as-deployment-repository - - org.jboss.as - jboss-as-embedded - org.jboss.as jboss-as-platform-mbean diff --git a/server/src/main/java/org/jboss/as/server/deployment/module/ServerDependenciesProcessor.java b/server/src/main/java/org/jboss/as/server/deployment/module/ServerDependenciesProcessor.java index aefe140906f..2a8dece9de7 100644 --- a/server/src/main/java/org/jboss/as/server/deployment/module/ServerDependenciesProcessor.java +++ b/server/src/main/java/org/jboss/as/server/deployment/module/ServerDependenciesProcessor.java @@ -21,6 +21,7 @@ */ package org.jboss.as.server.deployment.module; +import org.jboss.as.server.ServerLogger; import org.jboss.as.server.deployment.Attachments; import org.jboss.as.server.deployment.DeploymentPhaseContext; import org.jboss.as.server.deployment.DeploymentUnit; @@ -28,39 +29,43 @@ import org.jboss.as.server.deployment.DeploymentUnitProcessor; import org.jboss.modules.Module; import org.jboss.modules.ModuleIdentifier; +import org.jboss.modules.ModuleLoadException; import org.jboss.modules.ModuleLoader; /** * DUP thats adds dependencies that are availible to all deployments * * @author Stuart Douglas + * @author Thomas.Diesler@jboss.com */ public class ServerDependenciesProcessor implements DeploymentUnitProcessor { - private static ModuleIdentifier SUN_JDK = ModuleIdentifier.create("sun.jdk"); - private static ModuleIdentifier IBM_JDK = ModuleIdentifier.create("ibm.jdk"); - private static ModuleIdentifier JAVAX_API = ModuleIdentifier.create("javax.api"); - private static ModuleIdentifier JBOSS_LOGGING = ModuleIdentifier.create("org.jboss.logging"); - private static ModuleIdentifier JBOSS_VFS = ModuleIdentifier.create("org.jboss.vfs"); - private static ModuleIdentifier COMMONS_LOGGING = ModuleIdentifier.create("org.apache.commons.logging"); - private static ModuleIdentifier LOG4J = ModuleIdentifier.create("org.apache.log4j"); - private static ModuleIdentifier SLF4J = ModuleIdentifier.create("org.slf4j"); - private static ModuleIdentifier JUL_TO_SLF4J = ModuleIdentifier.create("org.jboss.logging.jul-to-slf4j-stub"); + private static ModuleIdentifier[] DEFAULT_MODULES = new ModuleIdentifier[] { + ModuleIdentifier.create("sun.jdk"), + ModuleIdentifier.create("ibm.jdk"), + ModuleIdentifier.create("javax.api"), + ModuleIdentifier.create("org.jboss.logging"), + ModuleIdentifier.create("org.jboss.vfs"), + ModuleIdentifier.create("org.apache.commons.logging"), + ModuleIdentifier.create("org.apache.log4j"), + ModuleIdentifier.create("org.slf4j"), + ModuleIdentifier.create("org.jboss.logging.jul-to-slf4j-stub") + }; @Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); final ModuleSpecification moduleSpecification = deploymentUnit.getAttachment(Attachments.MODULE_SPECIFICATION); final ModuleLoader moduleLoader = Module.getBootModuleLoader(); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, SUN_JDK, false, false, true, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, IBM_JDK, false, false, true, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JAVAX_API, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JBOSS_LOGGING, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JBOSS_VFS, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, COMMONS_LOGGING, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, LOG4J, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, SLF4J, false, false, false, false)); - moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, JUL_TO_SLF4J, false, false, false, false)); + for (ModuleIdentifier moduleId : DEFAULT_MODULES) { + try { + moduleLoader.loadModule(moduleId); + boolean importServices = moduleId.getName().endsWith("jdk"); + moduleSpecification.addSystemDependency(new ModuleDependency(moduleLoader, moduleId, false, false, importServices, false)); + } catch (ModuleLoadException ex) { + ServerLogger.ROOT_LOGGER.debugf("Module not found: %s", moduleId); + } + } } @Override