in cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ContainerState.java [75:187]
public ContainerState(
Bundle bundle,
Bundle extenderBundle,
ChangeCount ccrChangeCount,
PromiseFactory promiseFactory,
ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> caTracker,
Logs ccrLogs) {
_bundle = bundle;
_extenderBundle = extenderBundle;
_ccrLogs = ccrLogs;
_bundleContext = bundle.getBundleContext();
_log = _ccrLogs.getLogger(getClass());
_containerLogs = new Logs.Builder(_bundleContext).build();
_changeCount = new ChangeCount();
_changeCount.addObserver(ccrChangeCount);
_promiseFactory = promiseFactory;
_caTracker = caTracker;
BundleWiring bundleWiring = _bundle.adapt(BundleWiring.class);
Map<String, Object> cdiAttributes = emptyMap();
for (BundleWire wire : bundleWiring.getRequiredWires(EXTENDER_NAMESPACE)) {
BundleCapability capability = wire.getCapability();
Map<String, Object> attributes = capability.getAttributes();
String extender = (String)attributes.get(EXTENDER_NAMESPACE);
if (extender.equals(CDI_CAPABILITY_NAME)) {
BundleRequirement requirement = wire.getRequirement();
cdiAttributes = requirement.getAttributes();
break;
}
}
_cdiAttributes = unmodifiableMap(cdiAttributes);
Set<String> extensionRequirements = new HashSet<>();
collectExtensionRequirements(bundleWiring, extensionRequirements);
_containerDTO = new ContainerDTO();
_containerDTO.bundle = _bundle.adapt(BundleDTO.class);
_containerDTO.changeCount = _changeCount.get();
_containerDTO.components = new CopyOnWriteArrayList<>();
_containerDTO.errors = new CopyOnWriteArrayList<>();
_containerDTO.extensions = new CopyOnWriteArrayList<>();
_containerDTO.template = new ContainerTemplateDTO();
_containerDTO.template.components = new CopyOnWriteArrayList<>();
_containerDTO.template.extensions = new CopyOnWriteArrayList<>();
_containerDTO.template.id = ofNullable(
(String)_cdiAttributes.get(CDI_CONTAINER_ID)
).orElse(
_bundle.getSymbolicName()
);
extensionRequirements.forEach(
extensionFilter -> {
ExtendedExtensionTemplateDTO extensionTemplateDTO = new ExtendedExtensionTemplateDTO();
try {
extensionTemplateDTO.filter = asFilter(extensionFilter);
extensionTemplateDTO.serviceFilter = extensionFilter;
_containerDTO.template.extensions.add(extensionTemplateDTO);
}
catch (Exception e) {
_containerDTO.errors.add(asString(e));
}
}
);
_containerComponentTemplateDTO = new ComponentTemplateDTO();
_containerComponentTemplateDTO.activations = new CopyOnWriteArrayList<>();
_containerComponentTemplateDTO.beans = new CopyOnWriteArrayList<>();
_containerComponentTemplateDTO.configurations = new CopyOnWriteArrayList<>();
_containerComponentTemplateDTO.name = _containerDTO.template.id;
_containerComponentTemplateDTO.properties = emptyMap();
_containerComponentTemplateDTO.references = new CopyOnWriteArrayList<>();
_containerComponentTemplateDTO.type = CONTAINER;
ExtendedConfigurationTemplateDTO configurationTemplate = new ExtendedConfigurationTemplateDTO();
configurationTemplate.maximumCardinality = ONE;
configurationTemplate.pid = ofNullable(
(String)_cdiAttributes.get(CDI_CONTAINER_ID)
).map(
s -> s.replaceAll("-", ".")
).orElse(
"osgi.cdi." + _bundle.getSymbolicName().replaceAll("-", ".")
);
configurationTemplate.policy = OPTIONAL;
_containerComponentTemplateDTO.configurations.add(configurationTemplate);
_containerDTO.template.components.add(_containerComponentTemplateDTO);
_aggregateClassLoader = new BundleClassLoader(_bundle, _extenderBundle);
_beansModel = new BeansModelBuilder(this, _aggregateClassLoader, bundleWiring, _cdiAttributes).build();
try {
new Discovery(this).discover();
}
catch (Exception e) {
_log.error(l -> l.error("CCR Discovery resulted in errors on {}", bundle, e));
_containerDTO.errors.add(asString(e));
}
_beanManagerDeferred = _promiseFactory.deferred();
}