/** * 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); } } } }
/** * 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); } }
/** * 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); } }
public static WeldPortableExtensions getPortableExtensions(final DeploymentUnit deploymentUnit) { if (deploymentUnit.getParent() == null) { WeldPortableExtensions pes = deploymentUnit.getAttachment(WeldPortableExtensions.ATTACHMENT_KEY); if (pes == null) { deploymentUnit.putAttachment(ATTACHMENT_KEY, pes = new WeldPortableExtensions()); } return pes; } else { return getPortableExtensions(deploymentUnit.getParent()); } }
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); }
public BeanDeploymentModule(String moduleId, DeploymentUnit deploymentUnit, Collection<BeanDeploymentArchiveImpl> beanDeploymentArchives) { this.beanDeploymentArchives = ImmutableSet.copyOf(beanDeploymentArchives); for (BeanDeploymentArchiveImpl bda : beanDeploymentArchives) { bda.addBeanDeploymentArchives(beanDeploymentArchives); } this.moduleDescriptor = WeldEEModuleDescriptor.of(moduleId, deploymentUnit); if (moduleDescriptor != null) { addService(EEModuleDescriptor.class, moduleDescriptor); } }
/** * {@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); } } } }
/** {@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); }
private void installBootstrapConfigurationService(WeldDeployment deployment, DeploymentUnit parentDeploymentUnit) { final boolean nonPortableMode = parentDeploymentUnit.getAttachment(WeldConfiguration.ATTACHMENT_KEY).isNonPortableMode(); final ExternalConfiguration configuration = new ExternalConfigurationBuilder() .add(ConfigurationKey.NON_PORTABLE_MODE.get(), nonPortableMode) .add(ConfigurationKey.ALLOW_OPTIMIZED_CLEANUP.get(), true) .build(); deployment.getServices().add(ExternalConfiguration.class, configuration); }
@Override public ManagedReferenceFactory createFactory(Class<?> clazz) { final BeanManager beanManager = this.beanManagerSupplier.get(); final InjectionTarget injectionTarget = getInjectionTarget(clazz); return new ManagedReferenceFactory() { @Override public ManagedReference getReference() { final CreationalContext context = beanManager.createCreationalContext(null); final Object instance = injectionTarget.produce(context); injectionTarget.inject(instance, context); injectionTarget.postConstruct(instance); return new WeldManagedReference(injectionTarget, context, instance); } }; }
/** * 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); } }
@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); final CompositeIndex index = deploymentUnit.getAttachment(Attachments.COMPOSITE_ANNOTATION_INDEX); for (final CdiAnnotations annotation : CdiAnnotations.values()) { if (!index.getAnnotations(annotation.getDotName()).isEmpty()) { CdiAnnotationMarker.mark(deploymentUnit); return; } } }
/** * Adds a {@link Service} to the deployment. This method must not be called after the container has started */ public <T extends org.jboss.weld.bootstrap.api.Service> void addWeldService(Class<T> type, T service) { deployment.addWeldService(type, service); }
protected PropertyReplacingBeansXmlHandler getHandler(final URL beansXml) { return new PropertyReplacingBeansXmlHandler(beansXml, replacer); } }
@Override public String toString() { StringBuilder builder = new StringBuilder(this.beanArchiveType.toString()); builder.append(" BeanDeploymentArchive ("); builder.append(this.id); builder.append(")"); return builder.toString(); }
@Override public ManagedReference getReference() { final CreationalContext context = beanManager.createCreationalContext(null); final Object instance = injectionTarget.produce(context); injectionTarget.inject(instance, context); injectionTarget.postConstruct(instance); return new WeldManagedReference(injectionTarget, context, instance); } };
private BeansXml parseBeansXml(VirtualFile beansXmlFile, PropertyReplacingBeansXmlParser parser, final DeploymentUnit deploymentUnit) throws DeploymentUnitProcessingException { try { return parser.parse(beansXmlFile.asFileURL()); } catch (MalformedURLException e) { throw WeldLogger.ROOT_LOGGER.couldNotGetBeansXmlAsURL(beansXmlFile.toString(), e); } catch (RuntimeException e) { throw new DeploymentUnitProcessingException(e); } } }
/** * 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); } } }
@Override public ManagedReference createInstance(final Object instance) { final BeanManager beanManager = beanManagerSupplier.get(); final InjectionTarget injectionTarget = getInjectionTarget(instance.getClass()); final CreationalContext context = beanManager.createCreationalContext(null); injectionTarget.inject(instance, context); injectionTarget.postConstruct(instance); return new WeldManagedReference(injectionTarget, context, instance); }
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); } }