void afterBeanDiscovery(@Observes final AfterBeanDiscovery afterBeanDiscovery) { afterBeanDiscovery .addBean() .id(getClass().getName() + "#integration") .scope(ApplicationScoped.class) .types(Integration.class, Object.class) .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE) .createWith(c -> integration.get()); afterBeanDiscovery .addBean() .id(getClass().getName() + "#referenceService") .scope(ApplicationScoped.class) .types(ReferenceService.class, Object.class) .qualifiers(Default.Literal.INSTANCE, Any.Literal.INSTANCE) .createWith(c -> integration.get().lookup(ReferenceService.class)); }
private void addBean(final AfterBeanDiscovery afterBeanDiscovery, final String idSuffix, final Class<?> type, final Annotation qualifier, final Object instance) { afterBeanDiscovery.addBean() .id(MetricsExtension.class.getName() + ":" + type.getName() + ":" + idSuffix) .beanClass(type) .types(type, Object.class) .qualifiers(qualifier, Any.Literal.INSTANCE) .scope(Dependent.class) // avoid proxies, tck use assertEquals(proxy, registry.get(xxx)) .createWith(c -> instance); }
void registerServiceProxyBeans(@Observes AfterBeanDiscovery event, BeanManager beanManager) { for (Class<?> serviceInterface : serviceInterfaces) { event.addBean().id(ServiceProxyExtension.class.getName() + "_" + serviceInterface.getName()).scope(Dependent.class) .types(serviceInterface, Object.class).qualifiers(Any.Literal.INSTANCE, ServiceProxy.Literal.EMPTY).createWith(ctx -> { // First obtain the injection point metadata InjectionPoint injectionPoint = (InjectionPoint) beanManager.getInjectableReference(new InjectionPointMetadataInjectionPoint(), ctx); // And obtain the address on which the service is published Set<Annotation> qualifiers = injectionPoint.getQualifiers(); String address = null; for (Annotation qualifier : qualifiers) { if (ServiceProxy.class.equals(qualifier.annotationType())) { ServiceProxy serviceProxy = (ServiceProxy) qualifier; address = serviceProxy.value(); break; } } if (address == null) { throw new IllegalStateException("Service proxy address is not declared"); } Instance<ServiceProxySupport> supportInstance = CDI.current().select(ServiceProxySupport.class); if (!supportInstance.isResolvable()) { throw new IllegalStateException("ServiceProxySupport cannot be resolved"); } ServiceProxySupport serviceProxySupport = supportInstance.get(); return Proxy.newProxyInstance(ServiceProxyExtension.class.getClassLoader(), new Class[] { serviceInterface }, new ServiceProxyInvocationHandler(serviceProxySupport, serviceInterface, address)); }); LOGGER.info("Custom bean for service interface {0} registered", serviceInterface); } }
.qualifiers(Prior.Literal.INSTANCE) .scope(PriorScoped.class) .types(new ParameterizedTypeImpl(null, Optional.class, new Type[] { priorType }));
.addTransitiveTypeClosure(MicroProfileConfigAuthenticationDetailsProvider.class) .beanClass(MicroProfileConfigAuthenticationDetailsProvider.class) .qualifiers(qualifiers) .createWith(cc -> new MicroProfileConfigAuthenticationDetailsProvider(config)); .addTransitiveTypeClosure(ObjectStorageClient.Builder.class) .beanClass(ObjectStorageClient.Builder.class) .qualifiers(qualifiers) .createWith(cc -> { final ObjectStorageClient.Builder builder = ObjectStorageClient.builder(); .addTransitiveTypeClosure(ObjectStorageClient.class) .beanClass(ObjectStorageClient.class) .qualifiers(qualifiers) .createWith(cc -> { Set<Bean<?>> beans = beanManager.getBeans(ObjectStorageClient.Builder.class, qualifiersArray);
.addType(Config.Builder.class) .scope(ApplicationScoped.class) .qualifiers(qualifiers) .createWith(cc -> createConfigBuilder(beanManager, qualifiersArray)); .addType(Config.class) .scope(ApplicationScoped.class) .qualifiers(qualifiers) .createWith(cc -> createConfig(beanManager, qualifiersArray)); .addTransitiveTypeClosure(ExecutorService.class) .scope(ApplicationScoped.class) .qualifiers(qualifiers) .createWith(cc -> Executors.newCachedThreadPool()); .addTransitiveTypeClosure(Routing.Builder.class) .scope(ApplicationScoped.class) .qualifiers(qualifiers) .createWith(cc -> createRoutingBuilder(beanManager, qualifiersArray)); .addTransitiveTypeClosure(Routing.class) .scope(ApplicationScoped.class) .qualifiers(qualifiers) .createWith(cc -> createRouting(cc, beanManager, qualifiers, qualifiersArray)); .addTransitiveTypeClosure(BareRequest.class) .scope(RequestScoped.class) .qualifiers(qualifiers) .createWith(cc -> bareRequestThreadLocal.get().getKey());
private void customizeContext(final WebBeansContext instance) { final BeanManagerImpl beanManager = instance.getBeanManagerImpl(); final InterceptorsManager interceptorsManager = instance.getInterceptorsManager(); beanManager.addInternalBean(newBean(instance, configurator -> configurator.beanClass(Meecrowave.Builder.class) .scope(ApplicationScoped.class) .qualifiers(DefaultLiteral.INSTANCE) .types(Meecrowave.Builder.class, Object.class) .createWith(cc -> meecrowave.getConfiguration()))); beanManager.addInternalBean(newBean(instance, configurator -> configurator.beanClass(Meecrowave.class) .scope(ApplicationScoped.class) .qualifiers(DefaultLiteral.INSTANCE) .types(Meecrowave.class, AutoCloseable.class, Object.class) .createWith(cc -> meecrowave))); if (Cxfs.IS_PRESENT) { interceptorsManager.addInterceptorBindingType(JAXRSFieldInjectionInterceptor.Binding.class); beanManager.addAdditionalAnnotatedType(this, beanManager.createAnnotatedType(JAXRSFieldInjectionInterceptor.class)); } }
private void customizeContext(final WebBeansContext instance) { final BeanManagerImpl beanManager = instance.getBeanManagerImpl(); final InterceptorsManager interceptorsManager = instance.getInterceptorsManager(); beanManager.addInternalBean(newBean(instance, configurator -> configurator.beanClass(Meecrowave.Builder.class) .scope(ApplicationScoped.class) .qualifiers(DefaultLiteral.INSTANCE) .types(Meecrowave.Builder.class, Object.class) .createWith(cc -> meecrowave.getConfiguration()))); beanManager.addInternalBean(newBean(instance, configurator -> configurator.beanClass(Meecrowave.class) .scope(ApplicationScoped.class) .qualifiers(DefaultLiteral.INSTANCE) .types(Meecrowave.class, AutoCloseable.class, Object.class) .createWith(cc -> meecrowave))); if (Cxfs.IS_PRESENT) { interceptorsManager.addInterceptorBindingType(JAXRSFieldInjectionInterceptor.Binding.class); beanManager.addAdditionalAnnotatedType(this, beanManager.createAnnotatedType(JAXRSFieldInjectionInterceptor.class)); } }