void registerServices()

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