private <E extends Extension> void deployBean(Metadata<E> extension, ClassTransformer classTransformer) { // Locate the BeanDeployment for this extension BeanDeployment beanDeployment = DeploymentStructures.getOrCreateBeanDeployment(deployment, beanManager, bdaMapping, contexts, extension.getValue() .getClass()); EnhancedAnnotatedType<E> enchancedAnnotatedType = getEnhancedAnnotatedType(classTransformer, extension, beanDeployment); if (enchancedAnnotatedType != null) { ExtensionBean<E> bean = new ExtensionBean<E>(beanDeployment.getBeanManager(), enchancedAnnotatedType, extension); Set<ObserverInitializationContext<?, ?>> observerMethodInitializers = new HashSet<ObserverInitializationContext<?, ?>>(); createObserverMethods(bean, beanDeployment.getBeanManager(), enchancedAnnotatedType, observerMethodInitializers); beanDeployment.getBeanManager().addBean(bean); beanDeployment.getBeanDeployer().addExtension(bean); for (ObserverInitializationContext<?, ?> observerMethodInitializer : observerMethodInitializers) { observerMethodInitializer.initialize(); beanDeployment.getBeanManager().addObserver(observerMethodInitializer.getObserver()); containerLifecycleEventObservers.processObserverMethod(observerMethodInitializer.getObserver()); } BootstrapLogger.LOG.extensionBeanDeployed(bean); } }
private void validateEnabledInterceptorClasses(BeanManagerImpl beanManager, BeanDeployment deployment) { BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); if (beansXml != null && !beansXml.getEnabledInterceptors().isEmpty()) { Set<String> interceptorBeanClasses = new HashSet<String>(); for (Interceptor<?> interceptor : beanManager.getDynamicAccessibleInterceptors()) { interceptorBeanClasses.add(interceptor.getBeanClass().getName()); } for (Metadata<String> interceptorClassName : beansXml.getEnabledInterceptors()) { if (!interceptorBeanClasses.contains(interceptorClassName.getValue())) { throw ValidatorLogger.LOG.interceptorClassDoesNotMatchInterceptorBean(interceptorClassName.getValue(), interceptorClassName.getLocation()); } } } }
public void endInitialization() { tracker.start(Tracker.OP_END_INIT); final BeanIdentifierIndex index = deploymentManager.getServices().get(BeanIdentifierIndex.class); if (index != null) { index.build(getBeansForBeanIdentifierIndex()); flushCaches(); deploymentManager.getServices().cleanupAfterBoot(); deploymentManager.cleanupAfterBoot(); for (BeanDeployment beanDeployment : getBeanDeployments()) { BeanManagerImpl beanManager = beanDeployment.getBeanManager(); beanManager.getInterceptorMetadataReader().cleanAfterBoot(); beanManager.getServices().cleanupAfterBoot(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.getBeanDeployer().cleanup();
public ModuleEnablement createModuleEnablement(BeanDeployment deployment) { ClassLoader loader = new ClassLoader(deployment.getBeanManager().getServices().get(ResourceLoader.class)); BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); checkForDuplicates(beansXml.getEnabledInterceptors(), ValidatorLogger.INTERCEPTOR_SPECIFIED_TWICE); checkForDuplicates(beansXml.getEnabledDecorators(), ValidatorLogger.DECORATOR_SPECIFIED_TWICE); checkForDuplicates(beansXml.getEnabledAlternativeClasses(), ValidatorLogger.ALTERNATIVE_CLASS_SPECIFIED_MULTIPLE_TIMES); checkForDuplicates(beansXml.getEnabledAlternativeStereotypes(), ValidatorLogger.ALTERNATIVE_STEREOTYPE_SPECIFIED_MULTIPLE_TIMES);
public void deployBeans() { tracker.start(Tracker.OP_DEPLOY_BEANS); for (BeanDeployment deployment : getBeanDeployments()) { deployment.createBeans(environment); for (BeanDeployment deployment : getBeanDeployments()) { deployment.getBeanDeployer().processClassBeanAttributes(); deployment.getBeanDeployer().createProducersAndObservers(); for (BeanDeployment deployment : getBeanDeployments()) { deployment.getBeanDeployer().processProducerAttributes(); deployment.getBeanDeployer().createNewBeans(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.deploySpecialized(environment); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.deployBeans(environment); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.getBeanManager().getServices().get(InjectionTargetService.class).initialize(); beanDeployment.afterBeanDiscovery(environment); getContainer().putBeanDeployments(bdaMapping);
private void validateEnabledAlternativeClasses(BeanManagerImpl beanManager, BeanDeployment deployment) { BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); if (beansXml != null && !beansXml.getEnabledAlternativeClasses().isEmpty()) { // prepare lookup structure Map<String, Class<?>> loadedClasses = buildClassNameMap(beanManager.getEnabled().getAlternativeClasses()); // lookup structure for validation of alternatives Multimap<Class<?>, Bean<?>> beansByClass = SetMultimap.newSetMultimap(); for (Bean<?> bean : beanManager.getDynamicAccessibleBeans()) { if (!(bean instanceof NewBean)) { beansByClass.put(bean.getBeanClass(), bean); } } for (Metadata<String> definition : beansXml.getEnabledAlternativeClasses()) { Class<?> enabledClass = loadedClasses.get(definition.getValue()); if (enabledClass.isAnnotation() || enabledClass.isInterface()) { throw ValidatorLogger.LOG.alternativeBeanClassNotClass(definition); } else { if (!isAlternativeBean(enabledClass, beansByClass) && !isAlternativeCandidate(enabledClass, beanManager)) { throw ValidatorLogger.LOG.alternativeBeanClassNotAnnotated(definition.getValue(), definition.getLocation()); } } } } }
private BeanDeployment visit(BeanDeploymentArchive bda, Set<BeanDeploymentArchive> seenBeanDeploymentArchives) { copyService(bda, ResourceLoader.class); // Check that the required services are specified WeldStartup.verifyServices(bda.getServices(), environment.getRequiredBeanDeploymentArchiveServices(), bda.getId()); // Check the id is not null if (bda.getId() == null) { throw BootstrapLogger.LOG.deploymentArchiveNull(bda); } BeanDeployment parent = bdaMapping.getBeanDeployment(bda); if (parent == null) { // Create the BeanDeployment parent = new BeanDeployment(bda, deploymentManager, deployment.getServices(), contexts); // Attach it bdaMapping.put(bda, parent); } seenBeanDeploymentArchives.add(bda); for (BeanDeploymentArchive archive : bda.getBeanDeploymentArchives()) { BeanDeployment child; // Cut any circularities if (!seenBeanDeploymentArchives.contains(archive)) { child = visit(archive, seenBeanDeploymentArchives); } else { // already visited child = bdaMapping.getBeanDeployment(archive); } parent.getBeanManager().addAccessibleBeanManager(child.getBeanManager()); } return parent; }
private void validateEnabledAlternativeStereotypes(BeanManagerImpl beanManager, BeanDeployment deployment) { BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); if (beansXml != null && !beansXml.getEnabledAlternativeStereotypes().isEmpty()) { // prepare lookup structure Map<String, Class<? extends Annotation>> loadedStereotypes = buildClassNameMap(beanManager.getEnabled().getAlternativeStereotypes()); for (Metadata<String> definition : beansXml.getEnabledAlternativeStereotypes()) { Class<? extends Annotation> stereotype = loadedStereotypes.get(definition.getValue()); if (!beanManager.isStereotype(stereotype)) { throw ValidatorLogger.LOG.alternativeStereotypeNotStereotype(definition); } if (!isAlternativeStereotype(beanManager, stereotype)) { throw ValidatorLogger.LOG.alternativeStereotypeNotAnnotated(definition); } } } }
private void validateEnabledDecoratorClasses(BeanManagerImpl beanManager, BeanDeployment deployment) { BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); if (beansXml != null && !beansXml.getEnabledDecorators().isEmpty()) { Set<String> decoratorBeanClasses = new HashSet<String>(); for (Decorator<?> bean : beanManager.getDynamicAccessibleDecorators()) { decoratorBeanClasses.add(bean.getBeanClass().getName()); } for (Metadata<String> decoratorClassName : beansXml.getEnabledDecorators()) { if (!decoratorBeanClasses.contains(decoratorClassName.getValue())) { throw ValidatorLogger.LOG.decoratorClassNotBeanClassOfDecorator(decoratorClassName.getValue(), WeldCollections.toMultiRowString(decoratorBeanClasses)); } } } }
Set<BeanDeployment> physicalBeanDeploymentArchives = new HashSet<BeanDeployment>(getBeanDeployments()); extensionBeanDeployer.deployBeans(); installFastProcessAnnotatedTypeResolver(deploymentManager.getServices()); deploymentManager.addBean(new BeanManagerBean(deploymentManager)); deploymentManager.addBean(new BeanManagerImplBean(deploymentManager)); beanDeployment.createClasses(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.createTypes(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.createEnablement();
private <E extends Extension> EnhancedAnnotatedType<E> getEnhancedAnnotatedType(ClassTransformer classTransformer, Metadata<E> extension, BeanDeployment beanDeployment) { Class<? extends Extension> clazz = extension.getValue().getClass(); try { return cast(classTransformer.getEnhancedAnnotatedType(clazz, beanDeployment.getBeanDeploymentArchive().getId())); } catch (ResourceLoadingException e) { String missingDependency = Formats.getNameOfMissingClassLoaderDependency(e); BootstrapLogger.LOG.ignoringExtensionClassDueToLoadingError(clazz.getName(), missingDependency); BootstrapLogger.LOG.catchingDebug(e); missingDependenciesRegistry.registerClassWithMissingDependency(clazz.getName(), missingDependency); return null; } }
public void validateDeployment(BeanManagerImpl manager, BeanDeployment deployment) { validateDecorators(manager.getDecorators(), manager); validateInterceptors(manager.getInterceptors(), manager); validateBeans(manager.getBeans(), manager); validateEnabledDecoratorClasses(manager, deployment); validateEnabledInterceptorClasses(manager, deployment); validateEnabledAlternativeStereotypes(manager, deployment); validateEnabledAlternativeClasses(manager, deployment); validateSpecialization(manager); validateDisposalMethods(deployment.getBeanDeployer().getEnvironment()); validateObserverMethods(deployment.getBeanDeployer().getEnvironment().getObservers(), manager); validateBeanNames(manager); }
@Override protected void storeSyntheticAnnotatedType(BeanDeployment deployment, AnnotatedType<?> type, String id) { SlimAnnotatedType<?> annotatedType = transformer.getUnbackedAnnotatedType(type, getBeanManager().getId(), id); Extension extension = getReceiver(); SlimAnnotatedTypeContext<?> annotatedTypeContext = SlimAnnotatedTypeContext.of(annotatedType, extension); ProcessAnnotatedTypeImpl<?> event = events.fireProcessAnnotatedType(getBeanManager(), annotatedTypeContext); if (event == null) { deployment.getBeanDeployer().getEnvironment().addAnnotatedType(annotatedTypeContext); store.put(annotatedType); } else if (event.isVeto()) { return; } else { annotatedType = event.getResultingAnnotatedType(); deployment.getBeanDeployer().getEnvironment().addSyntheticAnnotatedType(annotatedType, extension); store.put(annotatedType); } } }
private Predicate<String> createFilter() { if (getBeanDeploymentArchive().getBeansXml() == null || getBeanDeploymentArchive().getBeansXml().getScanning() == null) { return null; } Function<Metadata<Filter>, Predicate<String>> filterToPredicateFunction = new Function<Metadata<Filter>, Predicate<String>>() { final ResourceLoader resourceLoader = beanDeployer.getResourceLoader(); @Override public Predicate<String> apply(Metadata<Filter> from) { return new FilterPredicate(from, resourceLoader); } }; Collection<Metadata<Filter>> includeFilters; if (getBeanDeploymentArchive().getBeansXml().getScanning().getIncludes() != null) { includeFilters = getBeanDeploymentArchive().getBeansXml().getScanning().getIncludes(); } else { includeFilters = emptyList(); } Collection<Metadata<Filter>> excludeFilters; if (getBeanDeploymentArchive().getBeansXml().getScanning().getExcludes() != null) { excludeFilters = getBeanDeploymentArchive().getBeansXml().getScanning().getExcludes(); } else { excludeFilters = emptyList(); } /* * Take a copy of the transformed collection, this means that the filter predicate is only built once per filter predicate */ Collection<Predicate<String>> includes = includeFilters.stream().map(filterToPredicateFunction).collect(Collectors.toList()); Collection<Predicate<String>> excludes = excludeFilters.stream().map(filterToPredicateFunction).collect(Collectors.toList()); return new ScanningPredicate<String>(includes, excludes); }
protected void storeSyntheticAnnotatedType(BeanDeployment deployment, AnnotatedType<?> type, String id) { deployment.getBeanDeployer().addSyntheticClass(type, getReceiver(), id); } }
@Override public void registerBean(AbstractBuiltInBean<?> bean) { deployment.getBeanDeployer().addBuiltInBean(bean); }
public static BeanDeployment getOrCreateBeanDeployment(Deployment deployment, BeanManagerImpl deploymentManager, BeanDeploymentArchiveMapping bdaMapping, Collection<ContextHolder<? extends Context>> contexts, Class<?> clazz) { BeanDeploymentArchive beanDeploymentArchive = deployment.loadBeanDeploymentArchive(clazz); if (beanDeploymentArchive == null) { throw UtilLogger.LOG.unableToFindBeanDeploymentArchive(clazz); } else { BeanDeployment beanDeployment = bdaMapping.getBeanDeployment(beanDeploymentArchive); if (beanDeployment == null) { beanDeployment = new BeanDeployment(beanDeploymentArchive, deploymentManager, deployment.getServices(), contexts, true); bdaMapping.put(beanDeploymentArchive, beanDeployment); } return beanDeployment; } }
@Override public BeanDeploymentArchive getBeanDeploymentArchive() { return deployment.getBeanDeploymentArchive(); } };
public void endInitialization() { tracker.start(Tracker.OP_END_INIT); final BeanIdentifierIndex index = deploymentManager.getServices().get(BeanIdentifierIndex.class); if (index != null) { index.build(getBeansForBeanIdentifierIndex()); flushCaches(); deploymentManager.getServices().cleanupAfterBoot(); deploymentManager.cleanupAfterBoot(); for (BeanDeployment beanDeployment : getBeanDeployments()) { BeanManagerImpl beanManager = beanDeployment.getBeanManager(); beanManager.getInterceptorMetadataReader().cleanAfterBoot(); beanManager.getServices().cleanupAfterBoot(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.getBeanDeployer().cleanup(); deploymentManager.getBeanResolver().clear(); for (BeanDeployment beanDeployment : getBeanDeployments()) { beanDeployment.getBeanManager().getBeanResolver().clear(); deploymentManager.getServices().get(Validator.class).clearResolved();
public ModuleEnablement createModuleEnablement(BeanDeployment deployment) { ClassLoader loader = new ClassLoader(deployment.getBeanManager().getServices().get(ResourceLoader.class)); BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); checkForDuplicates(beansXml.getEnabledInterceptors(), ValidatorLogger.INTERCEPTOR_SPECIFIED_TWICE); checkForDuplicates(beansXml.getEnabledDecorators(), ValidatorLogger.DECORATOR_SPECIFIED_TWICE); checkForDuplicates(beansXml.getEnabledAlternativeClasses(), ValidatorLogger.ALTERNATIVE_CLASS_SPECIFIED_MULTIPLE_TIMES); checkForDuplicates(beansXml.getEnabledAlternativeStereotypes(), ValidatorLogger.ALTERNATIVE_STEREOTYPE_SPECIFIED_MULTIPLE_TIMES);