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()));
}
});
}