in winegrower-extension/winegrower-cdi/src/main/java/org/apache/winegrower/extension/cdi/WinegrowerExtension.java [56:104]
void registerServices(@Observes final AfterBeanDiscovery discovery) {
final Ripener ripener = RIPENER_LOCATOR.get();
if (ripener == null) {
throw new IllegalStateException("No Ripener provided, did you use wrapCdiBoot?");
}
ripener.getServices().getServices().stream()
.filter(it -> Constants.SCOPE_SINGLETON.equals(it.getReference().getProperty(Constants.SERVICE_SCOPE)))
.forEach(reg -> {
final Object reference = ServiceReferenceImpl.class.cast(reg.getReference()).getReference();
final Class<?>[] types = Stream.of(ServiceRegistrationImpl.class.cast(reg).getClasses())
.filter(it -> !it.startsWith("java.")) // ignore too common types
.map(this::load)
.filter(Objects::nonNull)
.toArray(Class<?>[]::new);
if (types.length > 0) {
discovery.addBean()
.id("winegrower-service#" + reg.getReference().getProperty(Constants.SERVICE_ID))
.scope(Dependent.class)
.createWith(c -> reference)
.beanClass(reference.getClass())
.types(Stream.concat(Stream.of(types), Stream.of(Object.class)).toArray(Class<?>[]::new))
.qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE);
}
});
// add global services
discovery.addBean()
.id("winegrower#ripener")
.scope(ApplicationScoped.class)
.createWith(c -> ripener)
.beanClass(Ripener.class)
.types(Object.class, Ripener.class)
.qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE);
discovery.addBean()
.id("winegrower#services")
.scope(Dependent.class)
.createWith(c -> ripener.getServices())
.beanClass(OSGiServices.class)
.types(Object.class, OSGiServices.class)
.qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE);
discovery.addBean()
.id("winegrower#configuration")
.scope(Dependent.class)
.createWith(c -> ripener.getConfiguration())
.beanClass(Ripener.Configuration.class)
.types(Object.class, Ripener.Configuration.class)
.qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE);
}