final BeansXml beansXml = parseBeansXml(beansXmlUrl, parser, deploymentUnit); if (BeanDiscoveryMode.NONE.equals(beansXml.getBeanDiscoveryMode())) { Map<String, List<String>> allAndBeanClasses = discover(beansXml.getBeanDiscoveryMode(), beansXmlUrl, entry.getValue(), beanDefiningAnnotations); Collection<String> discoveredBeanClasses = allAndBeanClasses.get(BEAN_CLASSES);
BeansXml beansXml = beanArchive.getBeansXml(); if (beansXml != null && beansXml.getUrl() != null && (beanArchiveType == null || "EXPLICIT".equals(beanArchiveType) || "IMPLICIT".equals(beanArchiveType))) { String archivePath = null; String beansXmlPath = beansXml.getUrl().getPath(); if (beansXmlPath.endsWith("META-INF/beans.xml")) { archivePath = beansXmlPath.substring(0, beansXmlPath.length() - "META-INF/beans.xml".length()); LOGGER.debug("BeanClassRefreshAgent registerArchive bdaId='{}' archivePath='{}'.", beanArchive.getId(), archivePath); LOGGER.warning("Unable to watch BeanDeploymentArchive with id={}", beanArchive.getId());
AnnotationApiAbstraction annotationApi = beanManager.getServices().get(AnnotationApiAbstraction.class); JsonObjectBuilder deploymentBuilder = Json.objectBuilder(); deploymentBuilder.add(CONTEXT_ID, beanManager.getContextId()); BeansXml beansXml = bda.getBeansXml(); bdaBuilder.add(BEAN_DISCOVERY_MODE, beansXml != null ? beansXml.getBeanDiscoveryMode().toString() : BeanDiscoveryMode.ANNOTATED.toString()); beansXmlBuilder.add(MARKER, Boolean.TRUE); } else { beansXmlBuilder.add(Strings.URL, beansXml.getUrl() != null ? beansXml.getUrl().toString() : EMPTY); beansXmlBuilder.add(VERSION, beansXml.getVersion() != null ? beansXml.getVersion().toString() : EMPTY); beansXmlBuilder.add(TRIMMED, beansXml.isTrimmed()); if (beansXml.getScanning() != null && (!beansXml.getScanning().getExcludes().isEmpty() || !beansXml.getScanning().getExcludes().isEmpty())) { JsonArrayBuilder scanBuilder = Json.arrayBuilder(); createMetadataArrayJson(scanBuilder, beansXml.getScanning().getExcludes(), EXCLUDE); createMetadataArrayJson(scanBuilder, beansXml.getScanning().getIncludes(), INCLUDE); beansXmlBuilder.add(SCAN, scanBuilder); JsonObjectBuilder builder = decorateProbeComponent(interceptor, createSimpleBeanJson(interceptorBean, probe)); if (beansXml != null) { for (Metadata<String> meta : beansXml.getEnabledInterceptors()) { if (meta.getValue().equals(interceptorBean.getBeanClass().getName())) { JsonObjectBuilder builder = createSimpleBeanJson(decoratorBean, probe); if (beansXml != null) { for (Metadata<String> meta : beansXml.getEnabledDecorators()) { if (meta.getValue().equals(decoratorBean.getBeanClass().getName())) {
@SuppressWarnings("unchecked") public static BeansXml removeDuplicate(BeansXml xml) throws Exception { removeDuplicate((xml.getEnabledAlternativeStereotypes())); removeDuplicate((xml.getEnabledAlternativeClasses())); removeDuplicate(xml.getEnabledDecorators()); removeDuplicate(xml.getEnabledInterceptors()); return xml; }
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()); } } } } }
List<String> getLocalEnablementOfBean(Class<?> clazz) { List<String> localEnablementBDAIds = new ArrayList<>(); for (Entry<BeanDeploymentArchive, BeanManagerImpl> entry : bdaToManager.entrySet()) { BeansXml beansXml = entry.getKey().getBeansXml(); if (beansXml != null) { if (beansXml.getEnabledDecorators() != null && !beansXml.getEnabledDecorators().isEmpty()) { for (Metadata<String> metadata : entry.getKey().getBeansXml().getEnabledDecorators()) { if (metadata.getValue().equals(clazz.getName())) { localEnablementBDAIds.add(entry.getKey().getId()); } } } if (beansXml.getEnabledInterceptors() != null && !beansXml.getEnabledInterceptors().isEmpty()) { for (Metadata<String> metadata : entry.getKey().getBeansXml().getEnabledInterceptors()) { if (metadata.getValue().equals(clazz.getName())) { localEnablementBDAIds.add(entry.getKey().getId()); } } } } } return localEnablementBDAIds; }
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); List<Class<?>> interceptorClasses = beansXml.getEnabledInterceptors().stream().map(loader).collect(Collectors.toList()); moduleInterceptorsBuilder.addAll(filter(interceptorClasses, globallyEnabledInterceptors, ValidatorLogger.INTERCEPTOR_ENABLED_FOR_APP_AND_ARCHIVE, deployment)); List<Class<?>> decoratorClasses = beansXml.getEnabledDecorators().stream().map(loader).collect(Collectors.toList()); moduleDecoratorsBuilder.addAll(filter(decoratorClasses, globallyEnabledDecorators, ValidatorLogger.DECORATOR_ENABLED_FOR_APP_AND_ARCHIVE, deployment)); alternativeClasses = beansXml.getEnabledAlternativeClasses().stream().map(loader).collect(ImmutableSet.collector()); alternativeStereotypes = cast(beansXml.getEnabledAlternativeStereotypes().stream().map(loader).collect(ImmutableSet.collector())); } else { alternativeClasses = Collections.emptySet();
private static void addBeanArchives(HtmlTag body, List<BeanDeploymentArchive> bdas) { body.add(HtmlTag.aname(BDAS)); body.add(HtmlTag.h2(TITLE_BDAS)); HtmlTag table = HtmlTag.stripedTable().appendTo(HtmlTag.div(BDAS).appendTo(body)); HtmlTag.tr().add(HtmlTag.th(""), HtmlTag.th("Identifier"), HtmlTag.th("Bean Discovery Mode"), HtmlTag.th("beans.xml")).appendTo(table); int idx = 0; for (BeanDeploymentArchive bda : bdas) { HtmlTag tr = HtmlTag.tr().add(HtmlTag.td(++idx + "."), HtmlTag.td(bda.getId())).appendTo(table); BeansXml beansXml = bda.getBeansXml(); tr.add(HtmlTag.td(beansXml != null ? beansXml.getBeanDiscoveryMode().toString() : BeanDiscoveryMode.ANNOTATED.toString())); if (beansXml != null && !beansXml.equals(BeansXml.EMPTY_BEANS_XML)) { HtmlTag.div().attr(HtmlTag.TITLE, beansXml.getUrl() != null ? beansXml.getUrl().toString() : "URL not available") .add(beansXml.getVersion() != null ? beansXml.getVersion() : "Version not defined").appendTo(HtmlTag.td().appendTo(tr)); } else { tr.add(HtmlTag.td("No beans.xml")); } } }
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 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()); } } } }
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)); } } } }
@Override protected Deployment createDeployment(ResourceLoader resourceLoader, CDI11Bootstrap bootstrap) { Deployment deployment = super.createDeployment(resourceLoader, bootstrap); BeanDeploymentArchivesModel archivesModel = new BeanDeploymentArchivesModel(); for (BeanDeploymentArchive bda : deployment.getBeanDeploymentArchives()) { BeanDeploymentArchiveModel model = new BeanDeploymentArchiveModel(); model.setId(bda.getId()); BeansXml beansXml = bda.getBeansXml(); model.setDiscoveryMode(beansXml.getBeanDiscoveryMode()); model.setEnabledAlternatives(StringMetadata.from(beansXml.getEnabledAlternativeClasses())); model.setEnabledAlternativeStereotypes(StringMetadata.from(beansXml.getEnabledAlternativeStereotypes())); model.setEnabledDecorators(StringMetadata.from(beansXml.getEnabledDecorators())); model.setEnabledInterceptors(StringMetadata.from(beansXml.getEnabledInterceptors())); //model.setScanning(beansXml.getScanning()); if (beansXml.getUrl() != null) model.setUrl(beansXml.getUrl()); model.setVersion(beansXml.getVersion()); model.setBeanClasses(bda.getBeanClasses()); archivesModel.addBeanDeploymentArchive(model); } JAXB.marshal(archivesModel, sw); return deployment; } }.initialize();
public void createBeans(Environment environment) { getBeanManager().getServices().get(WeldModules.class).preBeanRegistration(this, environment); if (getBeanManager().getServices().get(EjbSupport.class) == EjbSupport.NOOP_IMPLEMENTATION) { beanDeployer.addBuiltInBean(new InjectionPointBean(beanManager)); beanDeployer.addBuiltInBean(new InterceptionFactoryBean(beanManager)); if (beanManager.getServices().getRequired(SecurityServices.class) != NoopSecurityServices.INSTANCE) { beanDeployer.addBuiltInBean(new PrincipalBean(beanManager)); if (beanDeploymentArchive.getBeansXml() != null && beanDeploymentArchive.getBeansXml().isTrimmed()) { beanDeployer.getEnvironment().trim();
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 Iterable<String> obtainClasses() { if (getBeanDeploymentArchive().getBeansXml() != null && getBeanDeploymentArchive().getBeansXml().getBeanDiscoveryMode().equals(BeanDiscoveryMode.NONE)) { if (getBeanDeploymentArchive().getBeansXml() != null && getBeanDeploymentArchive().getBeansXml().getScanning() != null) { Collection<Metadata<Filter>> includeFilters; if (getBeanDeploymentArchive().getBeansXml().getScanning().getIncludes() != null) { includeFilters = getBeanDeploymentArchive().getBeansXml().getScanning().getIncludes(); } else { includeFilters = Collections.emptyList(); if (getBeanDeploymentArchive().getBeansXml().getScanning().getExcludes() != null) { excludeFilters = getBeanDeploymentArchive().getBeansXml().getScanning().getExcludes(); } else { excludeFilters = Collections.emptyList();
@Override public List<String> getDecorators() { List<String> decorators = new ArrayList<>(); for (Metadata<String> decorator : model.getEnabledDecorators()) { decorators.add(decorator.getValue()); } return decorators; }
@Override public List<String> getInterceptors() { List<String> interceptors = new ArrayList<>(); for (Metadata<String> interceptor : model.getEnabledInterceptors()) { interceptors.add(interceptor.getValue()); } return interceptors; }
@Override public List<String> getAlternativeClasses() { List<String> klasses = new ArrayList<>(); for (Metadata<String> klass : model.getEnabledAlternativeClasses()) { klasses.add(klass.getValue()); } return klasses; }
@Override public List<String> getAlternativeStereotypes() { List<String> stereotypes = new ArrayList<>(); for (Metadata<String> stereotype : model.getEnabledAlternativeStereotypes()) { stereotypes.add(stereotype.getValue()); } return stereotypes; }
@Override public List<Metadata<String>> getEnabledDecorators() { return beansXml.getEnabledDecorators(); }