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 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); } } } }
public Set<Class<?>> getAllAlternatives() { return Sets.union(Sets.union(localAlternativeClasses, localAlternativeStereotypes), getGlobalAlternatives()); }
private static boolean isSelectedAlternative(ModuleEnablement enablement, Bean<?> bean) { if (bean.isAlternative()) { if (enablement.isEnabledAlternativeClass(bean.getBeanClass())) { return true; } for (Class<? extends Annotation> stereotype : bean.getStereotypes()) { if (enablement.isEnabledAlternativeStereotype(stereotype)) { return true; } } } return false; }
public static boolean isBeanEnabled(Bean<?> bean, ModuleEnablement enabled) { if (bean.isAlternative()) { if (enabled.isEnabledAlternativeClass(bean.getBeanClass())) { return true; } else { for (Class<? extends Annotation> stereotype : bean.getStereotypes()) { if (enabled.isEnabledAlternativeStereotype(stereotype)) { return true; } } return false; } } else if (bean instanceof AbstractProducerBean<?, ?, ?>) { AbstractProducerBean<?, ?, ?> receiverBean = (AbstractProducerBean<?, ?, ?>) bean; return isBeanEnabled(receiverBean.getDeclaringBean(), enabled); } else if (bean instanceof DecoratorImpl<?>) { return enabled.isDecoratorEnabled(bean.getBeanClass()); } else if (bean instanceof InterceptorImpl<?>) { return enabled.isInterceptorEnabled(bean.getBeanClass()); } else { return true; } }
deploymentBuilder.add(CONTEXT_ID, beanManager.getContextId()); ModuleEnablement enablement = beanDeploymentArchivesMap.get(bda).getEnabled(); JsonArrayBuilder interceptors = Json.arrayBuilder(); for (Class<?> interceptor : Components.getSortedProbeComponetCandidates(enablement.getInterceptors())) { if (meta.getValue().equals(interceptorBean.getBeanClass().getName())) { for (Class<?> decorator : enablement.getDecorators()) { if (meta.getValue().equals(decoratorBean.getBeanClass().getName())) { for (Class<?> clazz : Sets.union(enablement.getAlternativeClasses(), enablement.getGlobalAlternatives())) { Bean<?> alternativeBean = findAlternativeBean(clazz, probe); if (alternativeBean != null) { JsonObjectBuilder builder = createSimpleBeanJson(alternativeBean, probe); if (enablement.getAlternativeClasses().contains(clazz)) { builder.add(BEANS_XML, true); if (enablement.getGlobalAlternatives().contains(clazz)) { Object priority = clazz.getAnnotation(annotationApi.PRIORITY_ANNOTATION_CLASS); if (priority != null) { for (Class<? extends Annotation> stereotype : enablement.getAlternativeStereotypes()) { Set<Bean<?>> beans = findAlternativeStereotypeBeans(stereotype, probe); if (!beans.isEmpty()) {
JsonObjectBuilder beanBuilder = createBasicBeanJson(bean, probe); if (bean.getName() != null) { beanBuilder.add(NAME, bean.getName()); if (bean.getStereotypes() != null && !bean.getStereotypes().isEmpty()) { JsonArrayBuilder stereotypesBuilder = Json.arrayBuilder(); for (Class<?> stereotype : Components.getSortedProbeComponetCandidates(bean.getStereotypes())) { if (BeanKind.INTERCEPTOR.equals(kind) || BeanKind.DECORATOR.equals(kind) || bean.isAlternative()) { JsonObjectBuilder enablementBuilder = Json.objectBuilder(); AnnotationApiAbstraction annotationApi = beanManager.getServices().get(AnnotationApiAbstraction.class); Object priority = bean.getBeanClass().getAnnotation(annotationApi.PRIORITY_ANNOTATION_CLASS); if (priority != null) { Collection<BeanManagerImpl> beanManagers = Container.instance(beanManager).beanDeploymentArchives().values(); for (BeanManagerImpl manager : beanManagers) { ModuleEnablement enablement = manager.getEnabled(); if ((BeanKind.INTERCEPTOR.equals(kind) && enablement.isInterceptorEnabled(bean.getBeanClass())) || (BeanKind.DECORATOR.equals(kind) && enablement.isDecoratorEnabled(bean.getBeanClass())) || isSelectedAlternative(enablement, bean)) { bdasBuilder.add(createSimpleBdaJson(manager.getId()));
private static boolean isInjectionPointSatisfied(InjectionPoint ij, Set<?> resolvedBeans, BeanManagerImpl beanManager) { if (ij.getBean() instanceof Decorator<?>) { if (beanManager.getEnabled().isDecoratorEnabled(ij.getBean().getBeanClass())) { return resolvedBeans.size() > 0; } else { return true; } } else { return resolvedBeans.size() > 0; } }
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); return new ModuleEnablement(moduleInterceptorsBuilder.build(), moduleDecoratorsBuilder.build(), globalAlternatives, alternativeClasses, alternativeStereotypes);
/** * Initializes module enablement. * * @see ModuleEnablement */ public void createEnablement() { GlobalEnablementBuilder builder = beanManager.getServices().get(GlobalEnablementBuilder.class); ModuleEnablement enablement = builder.createModuleEnablement(this); beanManager.setEnabled(enablement); if (BootstrapLogger.LOG.isDebugEnabled()) { BootstrapLogger.LOG.enabledAlternatives(this.beanManager, WeldCollections.toMultiRowString(enablement.getAllAlternatives())); BootstrapLogger.LOG.enabledDecorators(this.beanManager, WeldCollections.toMultiRowString(enablement.getDecorators())); BootstrapLogger.LOG.enabledInterceptors(this.beanManager, WeldCollections.toMultiRowString(enablement.getInterceptors())); } }
@Override protected boolean matches(InterceptorResolvable resolvable, Interceptor<?> bean) { return bean.intercepts(resolvable.getInterceptionType()) && bean.getInterceptorBindings().size() > 0 && Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager()) && manager.getEnabled().isInterceptorEnabled(bean.getBeanClass()); }
@Override protected boolean matches(Resolvable resolvable, Decorator<?> bean) { return rules.matches(Collections.singleton(bean.getDelegateType()), resolvable.getTypes()) && Beans.containsAllQualifiers(QualifierInstance.of(bean.getDelegateQualifiers(), getStore()), resolvable.getQualifiers()) && getBeanManager().getEnabled().isDecoratorEnabled(bean.getBeanClass()); }
deploymentBuilder.add(CONTEXT_ID, beanManager.getContextId()); ModuleEnablement enablement = beanDeploymentArchivesMap.get(bda).getEnabled(); JsonArrayBuilder interceptors = Json.arrayBuilder(); for (Class<?> interceptor : Components.getSortedProbeComponetCandidates(enablement.getInterceptors())) { if (meta.getValue().equals(interceptorBean.getBeanClass().getName())) { for (Class<?> decorator : enablement.getDecorators()) { if (meta.getValue().equals(decoratorBean.getBeanClass().getName())) { for (Class<?> clazz : Sets.union(enablement.getAlternativeClasses(), enablement.getGlobalAlternatives())) { Bean<?> alternativeBean = findAlternativeBean(clazz, probe); if (alternativeBean != null) { JsonObjectBuilder builder = createSimpleBeanJson(alternativeBean, probe); if (enablement.getAlternativeClasses().contains(clazz)) { builder.add(BEANS_XML, true); if (enablement.getGlobalAlternatives().contains(clazz)) { Object priority = clazz.getAnnotation(annotationApi.PRIORITY_ANNOTATION_CLASS); if (priority != null) { for (Class<? extends Annotation> stereotype : enablement.getAlternativeStereotypes()) { Set<Bean<?>> beans = findAlternativeStereotypeBeans(stereotype, probe); if (!beans.isEmpty()) {
JsonObjectBuilder beanBuilder = createBasicBeanJson(bean, probe); if (bean.getName() != null) { beanBuilder.add(NAME, bean.getName()); if (bean.getStereotypes() != null && !bean.getStereotypes().isEmpty()) { JsonArrayBuilder stereotypesBuilder = Json.arrayBuilder(); for (Class<?> stereotype : Components.getSortedProbeComponetCandidates(bean.getStereotypes())) { if (BeanKind.INTERCEPTOR.equals(kind) || BeanKind.DECORATOR.equals(kind) || bean.isAlternative()) { JsonObjectBuilder enablementBuilder = Json.objectBuilder(); AnnotationApiAbstraction annotationApi = beanManager.getServices().get(AnnotationApiAbstraction.class); Object priority = bean.getBeanClass().getAnnotation(annotationApi.PRIORITY_ANNOTATION_CLASS); if (priority != null) { Collection<BeanManagerImpl> beanManagers = Container.instance(beanManager).beanDeploymentArchives().values(); for (BeanManagerImpl manager : beanManagers) { ModuleEnablement enablement = manager.getEnabled(); if ((BeanKind.INTERCEPTOR.equals(kind) && enablement.isInterceptorEnabled(bean.getBeanClass())) || (BeanKind.DECORATOR.equals(kind) && enablement.isDecoratorEnabled(bean.getBeanClass())) || isSelectedAlternative(enablement, bean)) { bdasBuilder.add(createSimpleBdaJson(manager.getId()));
private static boolean isSelectedAlternative(ModuleEnablement enablement, Bean<?> bean) { if (bean.isAlternative()) { if (enablement.isEnabledAlternativeClass(bean.getBeanClass())) { return true; } for (Class<? extends Annotation> stereotype : bean.getStereotypes()) { if (enablement.isEnabledAlternativeStereotype(stereotype)) { return true; } } } return false; }
public static boolean isBeanEnabled(Bean<?> bean, ModuleEnablement enabled) { if (bean.isAlternative()) { if (enabled.isEnabledAlternativeClass(bean.getBeanClass())) { return true; } else { for (Class<? extends Annotation> stereotype : bean.getStereotypes()) { if (enabled.isEnabledAlternativeStereotype(stereotype)) { return true; } } return false; } } else if (bean instanceof AbstractProducerBean<?, ?, ?>) { AbstractProducerBean<?, ?, ?> receiverBean = (AbstractProducerBean<?, ?, ?>) bean; return isBeanEnabled(receiverBean.getDeclaringBean(), enabled); } else if (bean instanceof DecoratorImpl<?>) { return enabled.isDecoratorEnabled(bean.getBeanClass()); } else if (bean instanceof InterceptorImpl<?>) { return enabled.isInterceptorEnabled(bean.getBeanClass()); } else { return true; } }
private static boolean isInjectionPointSatisfied(InjectionPoint ij, Set<?> resolvedBeans, BeanManagerImpl beanManager) { if (ij.getBean() instanceof Decorator<?>) { if (beanManager.getEnabled().isDecoratorEnabled(ij.getBean().getBeanClass())) { return resolvedBeans.size() > 0; } else { return true; } } else { return resolvedBeans.size() > 0; } }
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); return new ModuleEnablement(moduleInterceptorsBuilder.build(), moduleDecoratorsBuilder.build(), globalAlternatives, alternativeClasses, alternativeStereotypes);
/** * Initializes module enablement. * * @see ModuleEnablement */ public void createEnablement() { GlobalEnablementBuilder builder = beanManager.getServices().get(GlobalEnablementBuilder.class); ModuleEnablement enablement = builder.createModuleEnablement(this); beanManager.setEnabled(enablement); if (BootstrapLogger.LOG.isDebugEnabled()) { BootstrapLogger.LOG.enabledAlternatives(this.beanManager, WeldCollections.toMultiRowString(enablement.getAllAlternatives())); BootstrapLogger.LOG.enabledDecorators(this.beanManager, WeldCollections.toMultiRowString(enablement.getDecorators())); BootstrapLogger.LOG.enabledInterceptors(this.beanManager, WeldCollections.toMultiRowString(enablement.getInterceptors())); } }
@Override protected boolean matches(InterceptorResolvable resolvable, Interceptor<?> bean) { return bean.intercepts(resolvable.getInterceptionType()) && Beans.containsAllInterceptionBindings(bean.getInterceptorBindings(), resolvable.getQualifiers(), getManager()) && manager.getEnabled().isInterceptorEnabled(bean.getBeanClass()); }