protected void processExtensions()

in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerBootstrap.java [166:223]


	protected void processExtensions(BundleClassLoader loader, CDIContainerInitializer initializer) {
		AtomicInteger counter = new AtomicInteger();

		// Add the internal extensions
		initializer.addExtension(
			new ConfigurationExtension(containerState),
			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
					Constants.SERVICE_DESCRIPTION, "Aries CDI ConfigurationExtension"));
		initializer.addExtension(
			new BundleContextExtension(containerState.bundleContext()),
			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
					Constants.SERVICE_DESCRIPTION, "Aries CDI BundleContextExtension"));
		initializer.addExtension(
			new RuntimeExtension(containerState, _configurationBuilder, _singleBuilder, _factoryBuilder),
			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
					Constants.SERVICE_DESCRIPTION, "Aries CDI RuntimeExtension"));
		initializer.addExtension(
			new LoggerExtension(containerState),
			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
					Constants.SERVICE_DESCRIPTION, "Aries CDI LoggerExtension"));
		initializer.addExtension(
			new ServiceAdapterExtension(),
			Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
					Constants.SERVICE_DESCRIPTION, "Aries CDI ServiceAdapterExtension"));

		// Add extensions found from the bundle's class loader, such as those in the Bundle-ClassPath
		final Collection<Class<?>> serviceExtensions = new HashSet<>();

		// Add external extensions
		for (ExtensionDTO extensionDTO : containerState.containerDTO().extensions) {
			ExtendedExtensionDTO extendedExtensionDTO = (ExtendedExtensionDTO)extensionDTO;

			Dictionary<String,Object> properties = extendedExtensionDTO.extension.getServiceReference().getProperties();

			final Extension service = extendedExtensionDTO.extension.getService();
			initializer.addExtension(service, Maps.of(properties));
			serviceExtensions.add(service.getClass());

			Bundle extensionBundle = extendedExtensionDTO.extension.getServiceReference().getBundle();

			getClassesFromExtensionCapability(properties, extensionBundle, initializer);

			if (!loader.getBundles().contains(extensionBundle)) {
				loader.getBundles().add(extensionBundle);
			}
		}

		ServiceLoader.load(Extension.class, containerState.classLoader()).forEach(extension -> {
			// let ServiceLoader.load have duplicatesd fail (cdi spec)
			// we just want to solve conflicts between ServiceLoader and OSGi extensions
			if (!serviceExtensions.contains(extension.getClass())) {
				initializer.addExtension(
						extension,
						Maps.of(Constants.SERVICE_ID, counter.decrementAndGet(),
								Constants.SERVICE_DESCRIPTION, "ClassLoader Extension from " + containerState.bundle()));
			}
		});
	}