id = module.getIdentifier() + ADDITIONAL_CLASSES_BDA_SUFFIX; BeanDeploymentArchiveImpl newBda = new BeanDeploymentArchiveImpl(Collections.singleton(beanClass.getName()), Collections.singleton(beanClass.getName()), BeansXml.EMPTY_BEANS_XML, module, id, BeanArchiveType.SYNTHETIC, false); WeldLogger.DEPLOYMENT_LOGGER.beanArchiveDiscovered(newBda); newBda.addBeanClass(beanClass); ServiceRegistry newBdaServices = newBda.getServices(); for (Entry<Class<? extends Service>, Service> entry : serviceRegistry.entrySet()) { newBda.getServices().add(EEModuleDescriptor.class, eeModuleDescriptors.get(module.getIdentifier())); if (newBda.isAccessible(bda)) { newBda.addBeanDeploymentArchive(bda); if (bda.isAccessible(newBda)) { bda.addBeanDeploymentArchive(newBda); newBda.addBeanDeploymentArchives(rootBeanDeploymentModule.getBeanDeploymentArchives());
/** * Adds additional edges to the accessibility graph that allow static CDI-enabled modules to inject beans from top-level deployment units */ private void makeTopLevelBdasVisibleFromStaticModules() { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { if (bda.getBeanArchiveType().equals(BeanDeploymentArchiveImpl.BeanArchiveType.EXTERNAL) || bda.getBeanArchiveType().equals(BeanDeploymentArchiveImpl.BeanArchiveType.SYNTHETIC)) { for (BeanDeploymentArchiveImpl topLevelBda : rootBeanDeploymentModule.getBeanDeploymentArchives()) { bda.addBeanDeploymentArchive(topLevelBda); } } } }
/** * {@link org.jboss.as.weld.deployment.processors.WeldDeploymentProcessor} assembles a basic accessibility graph based on * the deployment structure. Here, we complete the graph by examining classloader visibility. This allows additional * accessibility edges caused e.g. by the Class-Path declaration in the manifest file, to be recognized. * * @param beanDeploymentArchives */ private void calculateAccessibilityGraph(Iterable<BeanDeploymentArchiveImpl> beanDeploymentArchives) { for (BeanDeploymentArchiveImpl from : beanDeploymentArchives) { for (BeanDeploymentArchiveImpl target : beanDeploymentArchives) { if (from.isAccessible(target)) { from.addBeanDeploymentArchive(target); } } } }
public WeldDeployment(Set<BeanDeploymentArchiveImpl> beanDeploymentArchives, Collection<Metadata<Extension>> extensions, Module module, Set<ClassLoader> subDeploymentClassLoaders) { this.subDeploymentClassLoaders = new HashSet<ClassLoader>(subDeploymentClassLoaders); this.additionalBeanDeploymentArchive = new BeanDeploymentArchiveImpl(Collections.<String> emptySet(), BeansXml.EMPTY_BEANS_XML, module, getClass().getName() + ADDITIONAL_CLASSES_BDA_SUFFIX); this.beanDeploymentArchives = new HashSet<BeanDeploymentArchiveImpl>(beanDeploymentArchives); this.extensions = new HashSet<Metadata<Extension>>(extensions); this.serviceRegistry = new SimpleServiceRegistry(); this.beanDeploymentsByClassName = new HashMap<String, BeanDeploymentArchiveImpl>(); this.module = module; // add static services this.serviceRegistry.add(ProxyServices.class, new ProxyServicesImpl(module)); this.serviceRegistry.add(ResourceLoader.class, new WeldModuleResourceLoader(module)); // set up the additional bean archives accessibility rules // and map class names to bean deployment archives for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchive(additionalBeanDeploymentArchive); for (String className : bda.getBeanClasses()) { beanDeploymentsByClassName.put(className, bda); } } additionalBeanDeploymentArchive.addBeanDeploymentArchives(this.beanDeploymentArchives); }
final BeanDeploymentArchiveImpl bda = new BeanDeploymentArchiveImpl(new HashSet<String>(discoveredBeanClasses), new HashSet<String>(allKnownClasses), beansXml, dependency, beanArchiveIdPrefix + beansXmlUrl.toExternalForm(), BeanArchiveType.EXTERNAL); WeldLogger.DEPLOYMENT_LOGGER.beanArchiveDiscovered(bda); bda.getServices().add(moduleService.getKey(), Reflections.cast(moduleService.getValue())); for(BeanDeploymentArchiveImpl j : moduleBdas) { if(i != j) { i.addBeanDeploymentArchive(j);
@Override public void deploy(DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { DeploymentUnit depUnit = phaseContext.getDeploymentUnit(); CamelDeploymentSettings depSettings = depUnit.getAttachment(CamelDeploymentSettings.ATTACHMENT_KEY); List<DeploymentUnit> subDeployments = depUnit.getAttachmentList(Attachments.SUB_DEPLOYMENTS); // Return if camel disabled or not a CDI deployment if (!depSettings.isEnabled() || !WeldDeploymentMarker.isPartOfWeldDeployment(depUnit)) { return; } // Return if we're not an EAR deployment if (!DeploymentTypeMarker.isType(DeploymentType.EAR, depUnit)) { return; } // Make sure external bean archives from the camel-cdi module are visible to sub deployments List<BeanDeploymentArchiveImpl> deploymentArchives = depUnit.getAttachmentList(WeldAttachments.ADDITIONAL_BEAN_DEPLOYMENT_MODULES); BeanDeploymentArchiveImpl rootArchive = depUnit.getAttachment(WeldAttachments.DEPLOYMENT_ROOT_BEAN_DEPLOYMENT_ARCHIVE); for (BeanDeploymentArchiveImpl bda : deploymentArchives) { if (bda.getBeanArchiveType().equals(BeanDeploymentArchiveImpl.BeanArchiveType.EXTERNAL)) { for (BeanDeploymentArchive topLevelBda : rootArchive.getBeanDeploymentArchives()) { bda.addBeanDeploymentArchive(topLevelBda); } } for (DeploymentUnit subDepUnit : subDeployments) { BeanDeploymentArchive subBda = subDepUnit.getAttachment(WeldAttachments.DEPLOYMENT_ROOT_BEAN_DEPLOYMENT_ARCHIVE); bda.addBeanDeploymentArchive(subBda); } } }
/** * Adds a service to all bean deployment archives in the module * @param clazz The service type * @param service The service * @param <S> The service type */ public synchronized <S extends Service> void addService(Class<S> clazz, S service) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.getServices().add(clazz,service); } }
/** * Makes all {@link BeanDeploymentArchiveImpl}s in the given modules accessible to all bdas in this module * * @param modules The modules to make accessible */ public synchronized void addBeanDeploymentModules(Collection<BeanDeploymentModule> modules) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { for (BeanDeploymentModule bdm : modules) { bda.addBeanDeploymentArchives(bdm.beanDeploymentArchives); } } }
private BeanDeploymentArchiveImpl createExplicitBeanDeploymentArchive(final Index index, ExplicitBeanArchiveMetadata beanArchiveMetadata, boolean root) throws DeploymentUnitProcessingException { Set<String> classNames = getAllKnownClasses(index); return new BeanDeploymentArchiveImpl(classNames, classNames, beanArchiveMetadata.getBeansXml(), module, createBeanArchiveId(beanArchiveMetadata.getResourceRoot()), BeanArchiveType.EXPLICIT, root); }
BeanDeploymentArchiveImpl bda = new BeanDeploymentArchiveImpl(Collections.<String>emptySet(), Collections.<String>emptySet(), BeansXml.EMPTY_BEANS_XML, handler.module, getDeploymentUnitId(deploymentUnit), BeanArchiveType.SYNTHETIC, true); WeldLogger.DEPLOYMENT_LOGGER.beanArchiveDiscovered(bda); bdaMap.put(handler.deploymentResourceRoot, bda); String id = null; if (bda != null) { id = bda.getId(); } else { id = deploymentUnit.getAttachment(WeldAttachments.DEPLOYMENT_ROOT_BEAN_DEPLOYMENT_ARCHIVE).getId();
/** * Makes the {@link BeanDeploymentArchiveImpl} accessible to all bdas in the module * * @param archive The archive to make accessible */ public synchronized void addBeanDeploymentArchive(BeanDeploymentArchiveImpl archive) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchive(archive); } }
final Consumer<BeanManager> beanManagerConsumer = builder.provides(beanManagerServiceName); final Supplier<WeldBootstrapService> weldContainerSupplier = builder.requires(weldServiceName); builder.setInstance(new BeanManagerService(rootBda.getId(), beanManagerConsumer, weldContainerSupplier)); builder.install();
private void processEEComponents(DeploymentUnit deploymentUnit, Map<ResourceRoot, BeanDeploymentArchiveImpl> bdaMap, BeanDeploymentArchiveImpl rootBda, Map<ResourceRoot, Index> indexes, DeploymentReflectionIndex reflectionIndex) { final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(org.jboss.as.ee.component.Attachments.EE_MODULE_DESCRIPTION); for (ComponentDescription component : moduleDescription.getComponentDescriptions()) { BeanDeploymentArchiveImpl bda = resolveComponentBda(component.getComponentClassName(), bdaMap, rootBda, indexes); component.setBeanDeploymentArchiveId(bda.getId()); if (component instanceof EJBComponentDescription) { final EJBComponentDescription componentDescription = (EJBComponentDescription) component; //first we need to resolve the correct BDA for the bean bda.addEjbDescriptor(new EjbDescriptorImpl<Object>(componentDescription, bda, reflectionIndex)); } } }
/** {@inheritDoc} */ public synchronized BeanDeploymentArchive loadBeanDeploymentArchive(final Class<?> beanClass) { final BeanDeploymentArchive bda = this.getBeanDeploymentArchive(beanClass); if (bda != null) { return bda; } Module module = Module.forClass(beanClass); if (module == null) { // Bean class loaded by the bootstrap class loader if (bootstrapClassLoaderBeanDeploymentArchive == null) { bootstrapClassLoaderBeanDeploymentArchive = createAndRegisterAdditionalBeanDeploymentArchive(module, beanClass); } else { bootstrapClassLoaderBeanDeploymentArchive.addBeanClass(beanClass); } return bootstrapClassLoaderBeanDeploymentArchive; } /* * No, there is no BDA for the class yet. Let's create one. */ return createAndRegisterAdditionalBeanDeploymentArchive(module, beanClass); }
public synchronized <T extends Service> void addWeldService(Class<T> type, T service) { serviceRegistry.add(type, service); for (BeanDeploymentArchiveImpl bda : additionalBeanDeploymentArchivesByClassloader.values()) { bda.getServices().add(type, service); } }
/** * Makes all {@link BeanDeploymentArchiveImpl}s in the given module accessible to all bdas in this module * * @param module The module to make accessible */ public synchronized void addBeanDeploymentModule(BeanDeploymentModule module) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchives(module.beanDeploymentArchives); } }
bda = new BeanDeploymentArchiveImpl(beans, allKnownClasses, beansXml, module, createBeanArchiveId(resourceRoot), BeanArchiveType.IMPLICIT, isRootBda); WeldLogger.DEPLOYMENT_LOGGER.beanArchiveDiscovered(bda); } else if (metadata.getBeansXml().getBeanDiscoveryMode().equals(BeanDiscoveryMode.NONE)) {
/** * Makes the {@link BeanDeploymentArchiveImpl} accessible to all bdas in the module * * @param archive The archive to make accessible */ public synchronized void addBeanDeploymentArchive(BeanDeploymentArchiveImpl archive) { for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchive(archive); } }
public WeldBootstrapService(WeldDeployment deployment, Environment environment, final String deploymentName) { this.deployment = deployment; this.environment = environment; this.deploymentName = deploymentName; this.bootstrap = new WeldBootstrap(); Map<String, BeanDeploymentArchive> bdas = new HashMap<String, BeanDeploymentArchive>(); for (BeanDeploymentArchive archive : deployment.getBeanDeploymentArchives()) { bdas.put(archive.getId(), archive); } bdas.put(deployment.getAdditionalBeanDeploymentArchive().getId(), deployment.getAdditionalBeanDeploymentArchive()); this.beanDeploymentArchives = Collections.unmodifiableMap(bdas); }
/** {@inheritDoc} */ public synchronized BeanDeploymentArchive loadBeanDeploymentArchive(Class<?> beanClass) { if (beanDeploymentsByClassName.containsKey(beanClass.getName())) { return beanDeploymentsByClassName.get(beanClass.getName()); } // if this is a class we have not seen before add it to the additional classes BDA additionalBeanDeploymentArchive.addBeanClass(beanClass); beanDeploymentsByClassName.put(beanClass.getName(), additionalBeanDeploymentArchive); return additionalBeanDeploymentArchive; }