private BeanDeploymentArchiveImpl createBeanDeploymentArchive( final Index index, BeanArchiveMetadata beanArchiveMetadata, Module module, String beanArchivePrefix) throws DeploymentUnitProcessingException { Set<String> classNames = new HashSet<String>(); // index may be null if a war has a beans.xml but no WEB-INF/classes if (index != null) { for (ClassInfo classInfo : index.getKnownClasses()) { classNames.add(classInfo.name().toString()); } } return new BeanDeploymentArchiveImpl( classNames, beanArchiveMetadata.getBeansXml(), module, beanArchivePrefix + beanArchiveMetadata.getResourceRoot().getRoot().getPathName()); }
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); final DeploymentUnit topLevelDeployment = deploymentUnit.getParent() == null ? deploymentUnit : deploymentUnit.getParent(); final WeldDeploymentMetadata cdiDeploymentMetadata = deploymentUnit.getAttachment(WeldDeploymentMetadata.ATTACHMENT_KEY); if (!WeldDeploymentMarker.isWeldDeployment(deploymentUnit)) { return; } // create a CDI injection factory EEModuleDescription eeModuleDescription = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION); final Module topLevelModule = topLevelDeployment.getAttachment(Attachments.MODULE); if (eeModuleDescription != null) { eeModuleDescription.addInjectionFactory( new WeldInjectionFactory( phaseContext.getServiceTarget(), deploymentUnit, topLevelModule.getClassLoader())); } final String beanArchiveIdPrefix; if (deploymentUnit.getParent() == null) { beanArchiveIdPrefix = deploymentUnit.getName(); } else { beanArchiveIdPrefix = deploymentUnit.getParent().getName() + "." + deploymentUnit.getName(); } final Set<BeanDeploymentArchiveImpl> beanDeploymentArchives = new HashSet<BeanDeploymentArchiveImpl>(); log.info("Processing CDI deployment: " + phaseContext.getDeploymentUnit().getName()); final Map<ResourceRoot, Index> indexes = AnnotationIndexUtils.getAnnotationIndexes(deploymentUnit); final Module module = phaseContext.getDeploymentUnit().getAttachment(Attachments.MODULE); boolean rootArchiveFound = false; if (cdiDeploymentMetadata != null) { // this can be null for ear deployments // however we still want to create a module level bean manager for (BeanArchiveMetadata beanArchiveMetadata : cdiDeploymentMetadata.getBeanArchiveMetadata()) { BeanDeploymentArchiveImpl bda = createBeanDeploymentArchive( indexes.get(beanArchiveMetadata.getResourceRoot()), beanArchiveMetadata, module, beanArchiveIdPrefix); beanDeploymentArchives.add(bda); if (beanArchiveMetadata.isDeploymentRoot()) { rootArchiveFound = true; deploymentUnit.putAttachment( WeldAttachments.DEPLOYMENT_ROOT_BEAN_DEPLOYMENT_ARCHIVE, bda); } } } if (!rootArchiveFound) { BeanDeploymentArchiveImpl bda = new BeanDeploymentArchiveImpl( Collections.<String>emptySet(), BeansXml.EMPTY_BEANS_XML, module, beanArchiveIdPrefix); beanDeploymentArchives.add(bda); deploymentUnit.putAttachment(WeldAttachments.DEPLOYMENT_ROOT_BEAN_DEPLOYMENT_ARCHIVE, bda); } deploymentUnit.putAttachment( WeldAttachments.BEAN_DEPLOYMENT_MODULE, new BeanDeploymentModule(beanDeploymentArchives)); }