Search in sources :

Example 31 with EEModuleDescription

use of org.jboss.as.ee.component.EEModuleDescription in project wildfly by wildfly.

the class BeanValidationFactoryDeployer method deploy.

@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
    final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
    final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
    if (module == null || moduleDescription == null) {
        return;
    }
    final LazyValidatorFactory factory = new LazyValidatorFactory(module.getClassLoader());
    deploymentUnit.putAttachment(BeanValidationAttachments.VALIDATOR_FACTORY, factory);
    bindFactoryToJndi(factory, deploymentUnit, phaseContext, moduleDescription);
}
Also used : EEModuleDescription(org.jboss.as.ee.component.EEModuleDescription) Module(org.jboss.modules.Module) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit)

Example 32 with EEModuleDescription

use of org.jboss.as.ee.component.EEModuleDescription in project wildfly by wildfly.

the class BatchEnvironmentProcessor method deploy.

@Override
public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
    if (deploymentUnit.hasAttachment(Attachments.MODULE)) {
        BatchLogger.LOGGER.tracef("Processing deployment '%s' for the batch environment.", deploymentUnit.getName());
        // Get the class loader
        final Module module = deploymentUnit.getAttachment(Attachments.MODULE);
        final ClassLoader moduleClassLoader = module.getClassLoader();
        final ServiceTarget serviceTarget = phaseContext.getServiceTarget();
        final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
        final CapabilityServiceSupport support = deploymentUnit.getAttachment(Attachments.CAPABILITY_SERVICE_SUPPORT);
        // Create the batch environment
        final WildFlyJobXmlResolver jobXmlResolver = WildFlyJobXmlResolver.forDeployment(deploymentUnit);
        final BatchEnvironmentService service = new BatchEnvironmentService(moduleClassLoader, jobXmlResolver, deploymentUnit.getName());
        // Set the value for the job-repository, this can't be a capability as the JDBC job repository cannot be constructed
        // until deployment time because the default JNDI data-source name is only known during DUP processing
        service.getJobRepositoryInjector().setValue(new ImmediateValue<>(JobRepositoryFactory.getInstance().getJobRepository(moduleDescription)));
        final ServiceBuilder<SecurityAwareBatchEnvironment> serviceBuilder = serviceTarget.addService(BatchServiceNames.batchEnvironmentServiceName(deploymentUnit), service);
        // Register the required services
        serviceBuilder.addDependency(support.getCapabilityServiceName(Capabilities.BATCH_CONFIGURATION_CAPABILITY.getName()), BatchConfiguration.class, service.getBatchConfigurationInjector());
        serviceBuilder.addDependency(TxnServices.JBOSS_TXN_TRANSACTION_MANAGER, TransactionManager.class, service.getTransactionManagerInjector());
        // Register the bean manager if this is a CDI deployment
        if (WeldDeploymentMarker.isPartOfWeldDeployment(deploymentUnit)) {
            BatchLogger.LOGGER.tracef("Adding BeanManager service dependency for deployment %s", deploymentUnit.getName());
            serviceBuilder.addDependency(BatchServiceNames.beanManagerServiceName(deploymentUnit), BeanManager.class, service.getBeanManagerInjector());
        }
        if (rcPresent) {
            serviceBuilder.addDependency(RequestController.SERVICE_NAME, RequestController.class, service.getRequestControllerInjector());
        }
        // Install the batch environment service
        serviceBuilder.install();
        // Create the job operator service used interact with a deployments batch job
        final JobOperatorService jobOperatorService = new JobOperatorService(Boolean.FALSE, deploymentUnit.getName(), jobXmlResolver);
        // Install the JobOperatorService
        Services.addServerExecutorDependency(serviceTarget.addService(org.wildfly.extension.batch.jberet.BatchServiceNames.jobOperatorServiceName(deploymentUnit), jobOperatorService).addDependency(support.getCapabilityServiceName(Capabilities.BATCH_CONFIGURATION_CAPABILITY.getName()), BatchConfiguration.class, jobOperatorService.getBatchConfigurationInjector()).addDependency(SuspendController.SERVICE_NAME, SuspendController.class, jobOperatorService.getSuspendControllerInjector()).addDependency(org.wildfly.extension.batch.jberet.BatchServiceNames.batchEnvironmentServiceName(deploymentUnit), SecurityAwareBatchEnvironment.class, jobOperatorService.getBatchEnvironmentInjector()), jobOperatorService.getExecutorServiceInjector(), false).install();
        // Add the JobOperatorService to the deployment unit
        deploymentUnit.putAttachment(BatchAttachments.JOB_OPERATOR, jobOperatorService);
        // Add the JobOperator to the context selector
        selector.registerContext(moduleClassLoader, JobOperatorContext.create(jobOperatorService));
    }
}
Also used : JobOperatorService(org.wildfly.extension.batch.jberet.deployment.JobOperatorService) ServiceTarget(org.jboss.msc.service.ServiceTarget) SecurityAwareBatchEnvironment(org.wildfly.extension.batch.jberet.deployment.SecurityAwareBatchEnvironment) CapabilityServiceSupport(org.jboss.as.controller.capability.CapabilityServiceSupport) EEModuleDescription(org.jboss.as.ee.component.EEModuleDescription) WildFlyJobXmlResolver(org.wildfly.extension.batch.jberet.deployment.WildFlyJobXmlResolver) BatchEnvironmentService(org.wildfly.extension.batch.jberet.deployment.BatchEnvironmentService) SuspendController(org.jboss.as.server.suspend.SuspendController) Module(org.jboss.modules.Module) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit)

Example 33 with EEModuleDescription

use of org.jboss.as.ee.component.EEModuleDescription in project wildfly by wildfly.

the class TransactionJndiBindingProcessor method deploy.

@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
    final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(Attachments.EE_MODULE_DESCRIPTION);
    if (moduleDescription == null) {
        return;
    }
    final ServiceTarget serviceTarget = phaseContext.getServiceTarget();
    //if this is a war we need to bind to the modules comp namespace
    if (DeploymentTypeMarker.isType(DeploymentType.WAR, deploymentUnit)) {
        final ServiceName moduleContextServiceName = ContextNames.contextServiceNameOfModule(moduleDescription.getApplicationName(), moduleDescription.getModuleName());
        bindServices(deploymentUnit, serviceTarget, moduleContextServiceName);
    }
    for (ComponentDescription component : moduleDescription.getComponentDescriptions()) {
        if (component.getNamingMode() == ComponentNamingMode.CREATE) {
            final ServiceName compContextServiceName = ContextNames.contextServiceNameOfComponent(moduleDescription.getApplicationName(), moduleDescription.getModuleName(), component.getComponentName());
            bindServices(deploymentUnit, serviceTarget, compContextServiceName);
        }
    }
}
Also used : ComponentDescription(org.jboss.as.ee.component.ComponentDescription) EEModuleDescription(org.jboss.as.ee.component.EEModuleDescription) ServiceName(org.jboss.msc.service.ServiceName) ServiceTarget(org.jboss.msc.service.ServiceTarget) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit)

Example 34 with EEModuleDescription

use of org.jboss.as.ee.component.EEModuleDescription in project wildfly by wildfly.

the class WarMetaDataProcessor method deploy.

@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
    if (!DeploymentTypeMarker.isType(DeploymentType.WAR, deploymentUnit)) {
        // Skip non web deployments
        return;
    }
    WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
    assert warMetaData != null;
    boolean isComplete = false;
    WebMetaData specMetaData = warMetaData.getWebMetaData();
    if (specMetaData != null) {
        if (specMetaData instanceof Web25MetaData) {
            isComplete |= ((Web25MetaData) specMetaData).isMetadataComplete();
        } else if (specMetaData instanceof Web30MetaData) {
            isComplete |= ((Web30MetaData) specMetaData).isMetadataComplete();
        } else {
            // As per Servlet 3.0 spec, metadata is not completed unless it's set to true in web.xml.
            // Hence, any web.xml 2.4 or earlier deployment is not metadata completed.
            isComplete = false;
        }
    }
    // Find all fragments that have been processed by deployers, and place
    // them in a map keyed by location
    LinkedList<String> order = new LinkedList<String>();
    List<WebOrdering> orderings = new ArrayList<WebOrdering>();
    HashSet<String> jarsSet = new HashSet<String>();
    Set<VirtualFile> overlays = new HashSet<VirtualFile>();
    Map<String, VirtualFile> scis = new HashMap<String, VirtualFile>();
    boolean fragmentFound = false;
    Map<String, WebFragmentMetaData> webFragments = warMetaData.getWebFragmentsMetaData();
    List<ResourceRoot> resourceRoots = deploymentUnit.getAttachmentList(Attachments.RESOURCE_ROOTS);
    for (ResourceRoot resourceRoot : resourceRoots) {
        if (resourceRoot.getRoot().getName().toLowerCase(Locale.ENGLISH).endsWith(".jar")) {
            jarsSet.add(resourceRoot.getRootName());
            // Find overlays
            VirtualFile overlay = resourceRoot.getRoot().getChild("META-INF/resources");
            if (overlay.exists()) {
                overlays.add(overlay);
            }
            // Find ServletContainerInitializer services
            VirtualFile sci = resourceRoot.getRoot().getChild("META-INF/services/javax.servlet.ServletContainerInitializer");
            if (sci.exists()) {
                scis.put(resourceRoot.getRootName(), sci);
            }
        }
    }
    if (!isComplete) {
        HashSet<String> jarsWithoutFragmentsSet = new HashSet<String>();
        jarsWithoutFragmentsSet.addAll(jarsSet);
        for (String jarName : webFragments.keySet()) {
            fragmentFound = true;
            WebFragmentMetaData fragmentMetaData = webFragments.get(jarName);
            webFragments.put(jarName, fragmentMetaData);
            WebOrdering webOrdering = new WebOrdering();
            webOrdering.setName(fragmentMetaData.getName());
            webOrdering.setJar(jarName);
            jarsWithoutFragmentsSet.remove(jarName);
            if (fragmentMetaData.getOrdering() != null) {
                if (fragmentMetaData.getOrdering().getAfter() != null) {
                    for (OrderingElementMetaData orderingElementMetaData : fragmentMetaData.getOrdering().getAfter().getOrdering()) {
                        if (orderingElementMetaData.isOthers()) {
                            webOrdering.setAfterOthers(true);
                        } else {
                            webOrdering.addAfter(orderingElementMetaData.getName());
                        }
                    }
                }
                if (fragmentMetaData.getOrdering().getBefore() != null) {
                    for (OrderingElementMetaData orderingElementMetaData : fragmentMetaData.getOrdering().getBefore().getOrdering()) {
                        if (orderingElementMetaData.isOthers()) {
                            webOrdering.setBeforeOthers(true);
                        } else {
                            webOrdering.addBefore(orderingElementMetaData.getName());
                        }
                    }
                }
            }
            orderings.add(webOrdering);
        }
        // fragment specifying no name and no order
        for (String jarName : jarsWithoutFragmentsSet) {
            WebOrdering ordering = new WebOrdering();
            ordering.setJar(jarName);
            orderings.add(ordering);
        }
    }
    if (!fragmentFound) {
        // Drop the order as there is no fragment in the webapp
        orderings.clear();
    }
    // Generate web fragments parsing order
    AbsoluteOrderingMetaData absoluteOrderingMetaData = null;
    if (!isComplete && specMetaData instanceof Web30MetaData) {
        absoluteOrderingMetaData = ((Web30MetaData) specMetaData).getAbsoluteOrdering();
    }
    if (absoluteOrderingMetaData != null) {
        // Absolute ordering from web.xml, any relative fragment ordering is ignored
        int otherPos = -1;
        int i = 0;
        for (OrderingElementMetaData orderingElementMetaData : absoluteOrderingMetaData.getOrdering()) {
            if (orderingElementMetaData.isOthers()) {
                if (otherPos >= 0) {
                    throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidMultipleOthers());
                }
                otherPos = i;
            } else {
                boolean found = false;
                for (WebOrdering ordering : orderings) {
                    if (orderingElementMetaData.getName().equals(ordering.getName())) {
                        order.add(ordering.getJar());
                        jarsSet.remove(ordering.getJar());
                        found = true;
                        break;
                    }
                }
                if (!found) {
                    UndertowLogger.ROOT_LOGGER.invalidAbsoluteOrdering(orderingElementMetaData.getName());
                } else {
                    i++;
                }
            }
        }
        if (otherPos >= 0) {
            order.addAll(otherPos, jarsSet);
            jarsSet.clear();
        }
    } else if (orderings.size() > 0) {
        // Resolve relative ordering
        try {
            resolveOrder(orderings, order);
        } catch (IllegalStateException e) {
            throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidRelativeOrdering(), e);
        }
        jarsSet.clear();
    } else {
        // No order specified
        order.addAll(jarsSet);
        jarsSet.clear();
        warMetaData.setNoOrder(true);
    }
    if (UndertowLogger.ROOT_LOGGER.isDebugEnabled()) {
        StringBuilder builder = new StringBuilder();
        builder.append("Resolved order: [ ");
        for (String jar : order) {
            builder.append(jar).append(' ');
        }
        builder.append(']');
        UndertowLogger.ROOT_LOGGER.debug(builder.toString());
    }
    warMetaData.setOrder(order);
    warMetaData.setOverlays(overlays);
    warMetaData.setScis(scis);
    Map<String, WebMetaData> annotationsMetaData = warMetaData.getAnnotationsMetaData();
    // The fragments and corresponding annotations will need to be merged in order
    // For each JAR in the order:
    // - Merge the annotation metadata into the fragment meta data (unless the fragment exists and is meta data complete)
    // - Merge the fragment metadata into merged fragment meta data
    WebCommonMetaData mergedFragmentMetaData = new WebCommonMetaData();
    if (specMetaData == null) {
        // If there is no web.xml, it has to be considered to be the latest version
        specMetaData = new Web31MetaData();
        specMetaData.setVersion("3.1");
    }
    // Augment with meta data from annotations in /WEB-INF/classes
    WebMetaData annotatedMetaData = annotationsMetaData.get("classes");
    if (annotatedMetaData == null && deploymentUnit.hasAttachment(Attachments.OSGI_MANIFEST)) {
        annotatedMetaData = annotationsMetaData.get(deploymentUnit.getName());
    }
    if (annotatedMetaData != null) {
        if (isComplete) {
            // Discard @WebFilter, @WebListener and @WebServlet
            annotatedMetaData.setFilters(null);
            annotatedMetaData.setFilterMappings(null);
            annotatedMetaData.setListeners(null);
            annotatedMetaData.setServlets(null);
            annotatedMetaData.setServletMappings(null);
        }
        WebCommonMetaDataMerger.augment(specMetaData, annotatedMetaData, null, true);
    }
    // Augment with meta data from fragments and annotations from the corresponding JAR
    for (String jar : order) {
        WebFragmentMetaData webFragmentMetaData = webFragments.get(jar);
        if (webFragmentMetaData == null || isComplete) {
            webFragmentMetaData = new WebFragmentMetaData();
            // Add non overriding default distributable flag
            webFragmentMetaData.setDistributable(new EmptyMetaData());
        }
        WebMetaData jarAnnotatedMetaData = annotationsMetaData.get(jar);
        if ((isComplete || webFragmentMetaData.isMetadataComplete()) && jarAnnotatedMetaData != null) {
            // Discard @WebFilter, @WebListener and @WebServlet
            jarAnnotatedMetaData.setFilters(null);
            jarAnnotatedMetaData.setFilterMappings(null);
            jarAnnotatedMetaData.setListeners(null);
            jarAnnotatedMetaData.setServlets(null);
            jarAnnotatedMetaData.setServletMappings(null);
        }
        if (jarAnnotatedMetaData != null) {
            // Merge annotations corresponding to the JAR
            WebCommonMetaDataMerger.augment(webFragmentMetaData, jarAnnotatedMetaData, null, true);
        }
        // Merge fragment meta data according to the conflict rules
        try {
            WebCommonMetaDataMerger.augment(mergedFragmentMetaData, webFragmentMetaData, specMetaData, false);
        } catch (Exception e) {
            throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidWebFragment(jar), e);
        }
    }
    // Augment with meta data from annotations from JARs excluded from the order
    for (String jar : jarsSet) {
        WebFragmentMetaData webFragmentMetaData = new WebFragmentMetaData();
        // Add non overriding default distributable flag
        webFragmentMetaData.setDistributable(new EmptyMetaData());
        WebMetaData jarAnnotatedMetaData = annotationsMetaData.get(jar);
        if (jarAnnotatedMetaData != null) {
            // Discard @WebFilter, @WebListener and @WebServlet
            jarAnnotatedMetaData.setFilters(null);
            jarAnnotatedMetaData.setFilterMappings(null);
            jarAnnotatedMetaData.setListeners(null);
            jarAnnotatedMetaData.setServlets(null);
            jarAnnotatedMetaData.setServletMappings(null);
        }
        if (jarAnnotatedMetaData != null) {
            // Merge annotations corresponding to the JAR
            WebCommonMetaDataMerger.augment(webFragmentMetaData, jarAnnotatedMetaData, null, true);
        }
        // Merge fragment meta data according to the conflict rules
        try {
            WebCommonMetaDataMerger.augment(mergedFragmentMetaData, webFragmentMetaData, specMetaData, false);
        } catch (Exception e) {
            throw new DeploymentUnitProcessingException(UndertowLogger.ROOT_LOGGER.invalidWebFragment(jar), e);
        }
    }
    WebCommonMetaDataMerger.augment(specMetaData, mergedFragmentMetaData, null, true);
    List<WebMetaData> additional = warMetaData.getAdditionalModuleAnnotationsMetadata();
    if (additional != null && !isComplete) {
        //augument with annotations from additional modules
        for (WebMetaData annotations : additional) {
            // Merge annotations corresponding to the JAR
            WebCommonMetaDataMerger.augment(specMetaData, annotations, null, true);
        }
    }
    // Override with meta data (JBossWebMetaData) Create a merged view
    JBossWebMetaData mergedMetaData = new JBossWebMetaData();
    JBossWebMetaData metaData = warMetaData.getJBossWebMetaData();
    JBossWebMetaDataMerger.merge(mergedMetaData, metaData, specMetaData);
    // FIXME: Incorporate any ear level overrides
    // Use the OSGi Web-ContextPath if not given otherwise
    String contextRoot = mergedMetaData.getContextRoot();
    Manifest manifest = deploymentUnit.getAttachment(Attachments.OSGI_MANIFEST);
    if (contextRoot == null && manifest != null) {
        contextRoot = manifest.getMainAttributes().getValue("Web-ContextPath");
        mergedMetaData.setContextRoot(contextRoot);
    }
    warMetaData.setMergedJBossWebMetaData(mergedMetaData);
    if (mergedMetaData.isMetadataComplete()) {
        MetadataCompleteMarker.setMetadataComplete(deploymentUnit, true);
    }
    //now attach any JNDI binding related information to the deployment
    if (mergedMetaData.getJndiEnvironmentRefsGroup() != null) {
        final DeploymentDescriptorEnvironment bindings = new DeploymentDescriptorEnvironment("java:module/env/", mergedMetaData.getJndiEnvironmentRefsGroup());
        deploymentUnit.putAttachment(org.jboss.as.ee.component.Attachments.MODULE_DEPLOYMENT_DESCRIPTOR_ENVIRONMENT, bindings);
    }
    //override module name if applicable
    if (mergedMetaData.getModuleName() != null && !mergedMetaData.getModuleName().isEmpty()) {
        final EEModuleDescription description = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
        description.setModuleName(mergedMetaData.getModuleName());
    }
    //WFLY-3102 EJB in WAR should inherit WAR's security domain
    if (mergedMetaData.getSecurityDomain() != null) {
        final EEModuleDescription description = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION);
        description.setDefaultSecurityDomain(mergedMetaData.getSecurityDomain());
    }
    //merge security roles from the ear
    DeploymentUnit parent = deploymentUnit.getParent();
    if (parent != null) {
        final EarMetaData earMetaData = parent.getAttachment(org.jboss.as.ee.structure.Attachments.EAR_METADATA);
        if (earMetaData != null) {
            SecurityRolesMetaData earSecurityRolesMetaData = earMetaData.getSecurityRoles();
            if (earSecurityRolesMetaData != null) {
                if (mergedMetaData.getSecurityRoles() == null) {
                    mergedMetaData.setSecurityRoles(new SecurityRolesMetaData());
                }
                SecurityRolesMetaDataMerger.merge(mergedMetaData.getSecurityRoles(), mergedMetaData.getSecurityRoles(), earSecurityRolesMetaData);
            }
        }
    }
}
Also used : Web25MetaData(org.jboss.metadata.web.spec.Web25MetaData) VirtualFile(org.jboss.vfs.VirtualFile) DeploymentUnitProcessingException(org.jboss.as.server.deployment.DeploymentUnitProcessingException) JBossWebMetaData(org.jboss.metadata.web.jboss.JBossWebMetaData) HashMap(java.util.HashMap) EmptyMetaData(org.jboss.metadata.javaee.spec.EmptyMetaData) WarMetaData(org.jboss.as.web.common.WarMetaData) ArrayList(java.util.ArrayList) SecurityRolesMetaData(org.jboss.metadata.javaee.spec.SecurityRolesMetaData) EarMetaData(org.jboss.metadata.ear.spec.EarMetaData) ResourceRoot(org.jboss.as.server.deployment.module.ResourceRoot) EEModuleDescription(org.jboss.as.ee.component.EEModuleDescription) DeploymentDescriptorEnvironment(org.jboss.as.ee.component.DeploymentDescriptorEnvironment) Web30MetaData(org.jboss.metadata.web.spec.Web30MetaData) Web31MetaData(org.jboss.metadata.web.spec.Web31MetaData) HashSet(java.util.HashSet) AbsoluteOrderingMetaData(org.jboss.metadata.web.spec.AbsoluteOrderingMetaData) Manifest(java.util.jar.Manifest) LinkedList(java.util.LinkedList) WebFragmentMetaData(org.jboss.metadata.web.spec.WebFragmentMetaData) DeploymentUnitProcessingException(org.jboss.as.server.deployment.DeploymentUnitProcessingException) OrderingElementMetaData(org.jboss.metadata.web.spec.OrderingElementMetaData) WebCommonMetaData(org.jboss.metadata.web.spec.WebCommonMetaData) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit) JBossWebMetaData(org.jboss.metadata.web.jboss.JBossWebMetaData) WebMetaData(org.jboss.metadata.web.spec.WebMetaData)

Example 35 with EEModuleDescription

use of org.jboss.as.ee.component.EEModuleDescription in project wildfly by wildfly.

the class WebComponentProcessor method deploy.

@Override
public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException {
    final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit();
    if (!DeploymentTypeMarker.isType(DeploymentType.WAR, deploymentUnit)) {
        return;
    }
    final Map<String, ComponentDescription> componentByClass = new HashMap<String, ComponentDescription>();
    final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(Attachments.EE_MODULE_DESCRIPTION);
    final EEApplicationClasses applicationClassesDescription = deploymentUnit.getAttachment(Attachments.EE_APPLICATION_CLASSES_DESCRIPTION);
    final CompositeIndex compositeIndex = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.COMPOSITE_ANNOTATION_INDEX);
    if (moduleDescription == null) {
        //not an EE deployment
        return;
    }
    for (ComponentDescription component : moduleDescription.getComponentDescriptions()) {
        componentByClass.put(component.getComponentClassName(), component);
    }
    final WarMetaData warMetaData = deploymentUnit.getAttachment(WarMetaData.ATTACHMENT_KEY);
    final TldsMetaData tldsMetaData = deploymentUnit.getAttachment(TldsMetaData.ATTACHMENT_KEY);
    final Set<String> classes = getAllComponentClasses(deploymentUnit, compositeIndex, warMetaData, tldsMetaData);
    for (String clazz : classes) {
        if (clazz == null || clazz.trim().isEmpty()) {
            continue;
        }
        ComponentDescription description = componentByClass.get(clazz);
        if (description != null) {
            //TODO: make sure the component is a managed bean
            if (!(description.getViews().size() == 1)) {
                throw UndertowLogger.ROOT_LOGGER.wrongComponentType(clazz);
            }
        } else {
            //we do not make the standard tags into components, as there is no need
            if (compositeIndex.getClassByName(DotName.createSimple(clazz)) == null) {
                boolean found = false;
                for (String pack : BUILTIN_TAGLIBS) {
                    if (clazz.startsWith(pack)) {
                        found = true;
                        break;
                    }
                }
                if (found) {
                    continue;
                }
            }
            description = new WebComponentDescription(clazz, clazz, moduleDescription, deploymentUnit.getServiceName(), applicationClassesDescription);
            moduleDescription.addComponent(description);
            deploymentUnit.addToAttachmentList(WebComponentDescription.WEB_COMPONENTS, description.getStartServiceName());
        }
    }
}
Also used : ComponentDescription(org.jboss.as.ee.component.ComponentDescription) WebComponentDescription(org.jboss.as.web.common.WebComponentDescription) HashMap(java.util.HashMap) CompositeIndex(org.jboss.as.server.deployment.annotation.CompositeIndex) WarMetaData(org.jboss.as.web.common.WarMetaData) EEModuleDescription(org.jboss.as.ee.component.EEModuleDescription) WebComponentDescription(org.jboss.as.web.common.WebComponentDescription) EEApplicationClasses(org.jboss.as.ee.component.EEApplicationClasses) DeploymentUnit(org.jboss.as.server.deployment.DeploymentUnit)

Aggregations

EEModuleDescription (org.jboss.as.ee.component.EEModuleDescription)90 DeploymentUnit (org.jboss.as.server.deployment.DeploymentUnit)77 ComponentDescription (org.jboss.as.ee.component.ComponentDescription)44 Module (org.jboss.modules.Module)27 ServiceName (org.jboss.msc.service.ServiceName)21 EEApplicationClasses (org.jboss.as.ee.component.EEApplicationClasses)18 CompositeIndex (org.jboss.as.server.deployment.annotation.CompositeIndex)17 EJBComponentDescription (org.jboss.as.ejb3.component.EJBComponentDescription)16 DeploymentUnitProcessingException (org.jboss.as.server.deployment.DeploymentUnitProcessingException)16 HashSet (java.util.HashSet)14 HashMap (java.util.HashMap)11 DeploymentReflectionIndex (org.jboss.as.server.deployment.reflect.DeploymentReflectionIndex)11 BindingConfiguration (org.jboss.as.ee.component.BindingConfiguration)10 SessionBeanComponentDescription (org.jboss.as.ejb3.component.session.SessionBeanComponentDescription)10 ServiceTarget (org.jboss.msc.service.ServiceTarget)10 AnnotationInstance (org.jboss.jandex.AnnotationInstance)9 ComponentConfiguration (org.jboss.as.ee.component.ComponentConfiguration)8 DeploymentPhaseContext (org.jboss.as.server.deployment.DeploymentPhaseContext)8 EjbJarMetaData (org.jboss.metadata.ejb.spec.EjbJarMetaData)7 Map (java.util.Map)6