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());
/** * Iterate over agents and find the one containing the class by name * * @param className * @return */ public static String getArchiveByClassName(String className){ for(BeanClassRefreshAgent agent: INSTANCES.values()) { if(agent.getDeploymentArchive().getBeanClasses().contains(className)) { return agent.getArchivePath(); } } return null; } }
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);
private <T extends Service> void copyService(BeanDeploymentArchive archive, Class<T> serviceClass) { // for certain services we can fall back to deployment-level settings or defaults ServiceRegistry registry = archive.getServices(); if (!registry.contains(serviceClass)) { T service = deployment.getServices().get(serviceClass); if (service != null) { registry.add(serviceClass, service); } } }
EjbDescriptors ejbDescriptors = new EjbDescriptors(); ServiceRegistry registry = beanDeploymentArchive.getServices(); registry.add(EjbDescriptors.class, ejbDescriptors); ResourceLoader resourceLoader = registry.get(ResourceLoader.class); if (resourceLoader == null) { resourceLoader = DefaultResourceLoader.INSTANCE; registry.add(ResourceLoader.class, resourceLoader); services.add(AnnotationApiAbstraction.class, new AnnotationApiAbstraction(resourceLoader)); services.add(ServletApiAbstraction.class, new ServletApiAbstraction(resourceLoader)); this.beanManager = BeanManagerImpl.newManager(deploymentManager, BeanDeployments.getFinalId(beanDeploymentArchive.getId(), services.get(WeldConfiguration.class).getStringProperty(ROLLING_UPGRADES_ID_DELIMITER)), services); services.add(InjectionTargetService.class, new InjectionTargetService(beanManager)); if (beanManager.getServices().contains(EjbServices.class)) { ejbDescriptors.addAll(beanDeploymentArchive.getEjbs()); beanDeployer = new BeanDeployer(beanManager, ejbDescriptors, deploymentServices); beanManager.getServices().get(SpecializationAndEnablementRegistry.class).registerEnvironment(beanManager, beanDeployer.getEnvironment(), additionalBeanArchive);
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 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)); } } } }
private void validateEnabledAlternativeClasses(BeanManagerImpl beanManager, BeanDeployment deployment) { BeansXml beansXml = deployment.getBeanDeploymentArchive().getBeansXml(); if (beansXml != null && !beansXml.getEnabledAlternativeClasses().isEmpty()) { Map<String, Class<?>> loadedClasses = buildClassNameMap(beanManager.getEnabled().getAlternativeClasses()); 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 { final WeldConfiguration configuration = beanManager.getServices().get(WeldConfiguration.class); boolean allowVetoedAlternatives = configuration.getBooleanProperty(ConfigurationKey.ALLOW_VETOED_ALTERNATIVES); throw ValidatorLogger.LOG.alternativeBeanClassNotAnnotatedOrVetoed(definition.getValue(), definition.getLocation()); } else if (! isAlternativeCandidate(enabledClass, beanManager)) { throw ValidatorLogger.LOG.alternativeBeanClassNotAnnotated(definition.getValue(), definition.getLocation());
boolean isNonuniqueIdentifierDetected() { Set<String> beanDeploymentArchiveIds = new HashSet<>(); Set<String> beanManagerIds = new HashSet<>(); for (Entry<BeanDeploymentArchive, BeanDeployment> entry : beanDeployments.entrySet()) { if (!beanDeploymentArchiveIds.add(entry.getKey().getId()) || !beanManagerIds.add(entry.getValue().getBeanManager().getId())) { return true; } } return false; }
public ModularWeldDeployment(Bootstrap bootstrap, ResourceLoader resourceLoader, ModuleScanResult scanResult) { super(bootstrap); getServices().add(BootstrapConfiguration.class, new PerformanceTunedBootstrapConfiguration(resourceLoader)); this.beanDeploymentArchive = new ImmutableBeanDeploymentArchive("classpath", scanResult.getDiscoveredClasses(), bootstrap.parse(scanResult.getDiscoveredResourceUrls())); this.beanDeploymentArchive.getServices().add(ResourceLoader.class, resourceLoader); }
@Override public Class<T> getInterface() { return (Class<T>) beanDeploymentArchive.getServices().get(ResourceLoader.class).classForName(className); } }
@Override public void postBeanArchiveServiceRegistration(PostBeanArchiveServiceRegistrationContext ctx) { final ServiceRegistry services = ctx.getServices(); final EjbServices ejbServices = services.get(EjbServices.class); if (ejbServices != null) { // Must populate EJB cache first, as we need it to detect whether a // bean is an EJB! services.add(EjbSupport.class, new EjbSupportImpl(ejbServices, ctx.getBeanDeploymentArchive().getEjbs())); } }
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 <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 createClasses() { Stream<String> classNames = beanDeploymentArchive.getBeanClasses().stream(); Collection<Class<?>> loadedClasses = beanDeploymentArchive.getLoadedBeanClasses(); // filter out names of classes that are available in beanDeploymentArchive.getLoadedBeanClasses() if (!loadedClasses.isEmpty()) { Set<String> preloadedClassNames = loadedClasses.stream().map(c -> c.getName()).collect(Collectors.toSet()); classNames = classNames.filter(name -> !preloadedClassNames.contains(name)); } // apply inclusion / exclusion filters Predicate<String> filter = createFilter(); if (filter != null) { classNames = classNames.filter(filter); loadedClasses = loadedClasses.stream().filter(clazz -> filter.test(clazz.getName())).collect(Collectors.toSet()); } beanDeployer.addLoadedClasses(loadedClasses); beanDeployer.addClasses(classNames.collect(Collectors.toSet())); }
public String toString() { String beanClassesString = ((getBeanClasses().size() > 0) ? getBeanClasses().toString() : ""); String initVal = "|ID: " + getId() + ", bdaType= " + bdaType + ", accessibleBDAs #:" + getBeanDeploymentArchives().size() + ", " + formatAccessibleBDAs(this) + ", Bean Classes #: " + getBeanClasses().size() + "," + beanClassesString + ", ejbs=" + getEjbs() + "\n"; StringBuffer valBuff = new StringBuffer(initVal); Collection<BeanDeploymentArchive> bdas = getBeanDeploymentArchives(); Iterator<BeanDeploymentArchive> iter = bdas.iterator(); while (iter.hasNext()) { BeanDeploymentArchive bda = (BeanDeploymentArchive) iter.next(); BDAType embedBDAType = BDAType.UNKNOWN; if (bda instanceof BeanDeploymentArchiveImpl) { embedBDAType = ((BeanDeploymentArchiveImpl) bda).getBDAType(); } String embedBDABeanClasses = ((bda.getBeanClasses().size() > 0) ? bda.getBeanClasses().toString() : ""); String val = "|---->ID: " + bda.getId() + ", bdaType= " + embedBDAType.toString() + ", accessibleBDAs #:" + bda.getBeanDeploymentArchives().size() + ", " + formatAccessibleBDAs(bda) + ", Bean Classes #: " + bda.getBeanClasses().size() + "," + embedBDABeanClasses + ", ejbs=" + bda.getEjbs() + "\n"; valBuff.append(val); } return valBuff.toString(); }
private void createLibJarBda(RootBeanDeploymentArchive rootLibBda) { BeanDeploymentArchive libModuleBda = rootLibBda.getModuleBda(); BeansXml moduleBeansXml = libModuleBda.getBeansXml(); if (moduleBeansXml == null || !moduleBeansXml.getBeanDiscoveryMode().equals(BeanDiscoveryMode.NONE)) { addBdaToDeploymentBdas(rootLibBda); addBdaToDeploymentBdas(libModuleBda); if (libJarRootBdas == null) { libJarRootBdas = new ArrayList<>(); } for ( RootBeanDeploymentArchive existingLibJarRootBda : libJarRootBdas) { rootLibBda.getBeanDeploymentArchives().add( existingLibJarRootBda ); rootLibBda.getBeanDeploymentArchives().add( existingLibJarRootBda.getModuleBda() ); rootLibBda.getModuleBda().getBeanDeploymentArchives().add( existingLibJarRootBda ); rootLibBda.getModuleBda().getBeanDeploymentArchives().add( existingLibJarRootBda.getModuleBda() ); existingLibJarRootBda.getBeanDeploymentArchives().add( rootLibBda ); existingLibJarRootBda.getBeanDeploymentArchives().add( rootLibBda.getModuleBda() ); existingLibJarRootBda.getModuleBda().getBeanDeploymentArchives().add( rootLibBda ); existingLibJarRootBda.getModuleBda().getBeanDeploymentArchives().add( rootLibBda.getModuleBda() ); } libJarRootBdas.add(rootLibBda); } }
/** * Gets the Bean deployment ID - bdaId. * * @return the bdaId */ public String getBdaId() { return deploymentArchive.getId(); }
private String formatAccessibleBDAs(BeanDeploymentArchive bda) { StringBuffer sb = new StringBuffer("["); for (BeanDeploymentArchive accessibleBDA : bda.getBeanDeploymentArchives()) { if (accessibleBDA instanceof BeanDeploymentArchiveImpl) { sb.append(((BeanDeploymentArchiveImpl) accessibleBDA).getFriendlyId() + ","); } } sb.append("]"); return sb.toString(); }