@Inject public CdiInterceptorWrapper(BeanManager beanManager) { // get the original interceptor from the bean manager directly // to avoid CDI bootstrap issues caused by wrong extension ordering final Set<Bean<?>> interceptorBeans = beanManager.getBeans(ValidationInterceptor.class); final Bean<?> interceptorBean = beanManager.resolve(interceptorBeans); this.interceptor = (ValidationInterceptor) beanManager.getReference( interceptorBean, ValidationInterceptor.class, beanManager.createCreationalContext(interceptorBean)); }
@SuppressWarnings("unchecked") private static <T> T getReference(BeanManager bm, Type type, Bean<?> bean) { return (T) bm.getReference(bean, type, bm.createCreationalContext(bean)); }
@SuppressWarnings("unchecked") private <T> T getInstanceInternal(Type contractOrImpl, Annotation... qualifiers) { Set<Bean<?>> beans = beanManager.getBeans(contractOrImpl, qualifiers); if (beans.isEmpty()) { return null; } Bean<?> bean = beans.iterator().next(); CreationalContext<?> ctx = beanManager.createCreationalContext(bean); return (T) beanManager.getReference(bean, contractOrImpl, ctx); }
@Override @SuppressWarnings("unchecked") public <T> List<T> getAllInstances(Type contractOrImpl) { List<T> result = new ArrayList<>(); for (Bean<?> bean : beanManager.getBeans(contractOrImpl)) { CreationalContext<?> ctx = beanManager.createCreationalContext(bean); Object reference = beanManager.getReference(bean, contractOrImpl, ctx); result.add((T) reference); } return result; }
this.creationalContext = beanManager.createCreationalContext( null ); Set<Bean<?>> beans = beanManager.getBeans( beanType, new NamedBeanQualifier( beanName ) ); this.bean = (Bean<B>) beanManager.resolve( beans ); this.beanInstance = bean.create( creationalContext );
@SuppressWarnings("unchecked") private static <T> T getContextualReference(BeanManager bm, Set<Bean<?>> beans, Class<?> type) { if (beans == null || beans.size() == 0) { return null; } // if we would resolve to multiple beans then BeanManager#resolve would throw an AmbiguousResolutionException Bean<?> bean = bm.resolve(beans); if (bean == null) { return null; } else { CreationalContext<?> creationalContext = bm.createCreationalContext(bean); // if we obtain a contextual reference to a @Dependent scope bean, make sure it is released if(isDependentScoped(bean)) { releaseOnContextClose(creationalContext, bean); } return (T) bm.getReference(bean, type, creationalContext); } }
private static Supplier<?> getSupplier(BeanManager beanManager, ParameterizedType supplierType) { Set<Bean<?>> beans = beanManager.getBeans(supplierType); if (beans.isEmpty()) { return null; } Bean<?> bean = beans.iterator().next(); CreationalContext<?> ctx = beanManager.createCreationalContext(bean); return (Supplier<?>) beanManager.getReference(bean, supplierType, ctx); }
final Bean<BoundSessionContext> sessionContextBean = (Bean<BoundSessionContext>) manager.resolve(manager .getBeans(BoundSessionContext.class, BoundLiteral.INSTANCE)); CreationalContext<?> ctx = manager.createCreationalContext(sessionContextBean); final BoundSessionContext sessionContext = (BoundSessionContext) manager.getReference(sessionContextBean, BoundSessionContext.class, ctx); sessionContext.associate(sessionContexts.get()); sessionContext.activate(); final Bean<BoundRequestContext> requestContextBean = (Bean<BoundRequestContext>) manager.resolve(manager .getBeans(BoundRequestContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(requestContextBean); final BoundRequestContext requestContext = (BoundRequestContext) manager.getReference(requestContextBean, BoundRequestContext.class, ctx); requestContext.associate(requestContexts.get()); .resolve(manager.getBeans(BoundConversationContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(conversationContextBean); final BoundConversationContext conversationContext = (BoundConversationContext) manager.getReference( conversationContextBean, BoundConversationContext.class, ctx); BoundRequest request = new MutableBoundRequest(requestContexts.get(), sessionContexts.get());
/** * Obtain a bean reference of given type from the bean manager. * * @param clazz type of the bean to get reference to. * @param bean the {@link Bean} object representing the managed bean. * @param beanManager bean manager used to obtain an instance of the requested bean. * @param <T> type of the bean to be returned. * @return a bean reference or {@code null} if a bean instance cannot be found. */ static <T> T getBeanReference(final Class<T> clazz, final Bean bean, final BeanManager beanManager) { final CreationalContext<?> creationalContext = beanManager.createCreationalContext(bean); final Object result = beanManager.getReference(bean, clazz, creationalContext); return clazz.cast(result); }
@Override @SuppressWarnings("unchecked") public <T> List<ServiceHolder<T>> getAllServiceHolders(Class<T> contractOrImpl, Annotation... qualifiers) { List<ServiceHolder<T>> result = new ArrayList<>(); for (Bean<?> bean : beanManager.getBeans(contractOrImpl, qualifiers)) { CreationalContext<?> ctx = beanManager.createCreationalContext(bean); T reference = (T) beanManager.getReference(bean, contractOrImpl, ctx); int rank = 1; if (bean instanceof JerseyBean) { rank = ((JerseyBean) bean).getRank(); } result.add(new ServiceHolderImpl<>(reference, (Class<T>) bean.getBeanClass(), bean.getTypes(), rank)); } return result; }
private <T> T getReference(Class<T> clazz, BeanManager beanManager) { Set<Bean<?>> beans = beanManager.getBeans(clazz, new AnnotationLiteral<Default>() {}); Iterator<Bean<?>> i = beans.iterator(); if (!i.hasNext()) { return null; } Bean<?> bean = i.next(); CreationalContext<?> context = beanManager.createCreationalContext(bean); return (T) beanManager.getReference(bean, clazz, context); }
final Bean<BoundSessionContext> sessionContextBean = (Bean<BoundSessionContext>) manager.resolve(manager.getBeans( BoundSessionContext.class, BoundLiteral.INSTANCE)); CreationalContext<?> ctx = manager.createCreationalContext(sessionContextBean); final BoundSessionContext sessionContext = (BoundSessionContext) manager.getReference(sessionContextBean, BoundSessionContext.class, ctx); sessionContext.invalidate(); sessionContext.dissociate(sessionContexts.get()); final Bean<BoundRequestContext> requestContextBean = (Bean<BoundRequestContext>) manager.resolve(manager.getBeans( BoundRequestContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(requestContextBean); final BoundRequestContext requestContext = (BoundRequestContext) manager.getReference(requestContextBean, BoundRequestContext.class, ctx); requestContext.invalidate(); .resolve(manager.getBeans(BoundConversationContext.class, BoundLiteral.INSTANCE)); ctx = manager.createCreationalContext(conversationContextBean); final BoundConversationContext conversationContext = (BoundConversationContext) manager.getReference( conversationContextBean, BoundConversationContext.class, ctx); conversationContext.invalidate();
/** * Returns an instance of the given {@link Bean} from the container. * * @param <S> the actual class type of the {@link Bean}. * @param bean the {@link Bean} defining the instance to create. * @param type the expected component type of the instance created from the {@link Bean}. * @return an instance of the given {@link Bean}. * @see javax.enterprise.inject.spi.BeanManager#getReference(Bean, Type, CreationalContext) * @see javax.enterprise.inject.spi.Bean * @see java.lang.reflect.Type */ @SuppressWarnings("unchecked") protected <S> S getDependencyInstance(Bean<S> bean, Type type) { return (S) beanManager.getReference(bean, type, beanManager.createCreationalContext(bean)); }
//get reference to BeanManager BeanManager bm = CDI.current().getBeanManager(); Bean<CrudService> bean = (Bean<CrudService>) bm.getBeans(CrudService.class).iterator().next(); CreationalContext<CrudService> ctx = bm.createCreationalContext(bean); //get reference to your CDI managed bean CrudService crudService = (CrudService) bm.getReference(bean, CrudService.class, ctx);
@Override @SuppressWarnings("unchecked") public ForeignDescriptor createForeignDescriptor(Binding binding) { Class<?> clazz; if (ClassBinding.class.isAssignableFrom(binding.getClass())) { clazz = ((ClassBinding<?>) binding).getService(); } else if (InstanceBinding.class.isAssignableFrom(binding.getClass())) { clazz = ((InstanceBinding<?>) binding).getService().getClass(); } else { throw new RuntimeException( org.glassfish.jersey.internal.LocalizationMessages .UNKNOWN_DESCRIPTOR_TYPE(binding.getClass().getSimpleName())); } Set<Bean<?>> beans = beanManager.getBeans(clazz); if (beans.isEmpty()) { return null; } Bean bean = beans.iterator().next(); CreationalContext ctx = beanManager.createCreationalContext(bean); return ForeignDescriptor.wrap(bean, instance -> bean.destroy(instance, ctx)); }
/** * Lookup ResteasyCdiExtension instance that was instantiated during CDI bootstrap * * @return ResteasyCdiExtension instance */ private ResteasyCdiExtension lookupResteasyCdiExtension() { Set<Bean<?>> beans = manager.getBeans(ResteasyCdiExtension.class); Bean<?> bean = manager.resolve(beans); if (bean == null) { throw new IllegalStateException(Messages.MESSAGES.unableToObtainResteasyCdiExtension()); } CreationalContext<?> context = manager.createCreationalContext(bean); return (ResteasyCdiExtension) manager.getReference(bean, ResteasyCdiExtension.class, context); } }
@Override public RedisClient create(CreationalContext<RedisClient> creationalContext) { CreationalContext<RedisURI> uriCreationalContext = beanManager.createCreationalContext(redisURIBean); RedisURI redisURI = (RedisURI) beanManager.getReference(redisURIBean, RedisURI.class, uriCreationalContext); if (clientResourcesBean != null) { ClientResources clientResources = (ClientResources) beanManager.getReference(clientResourcesBean, ClientResources.class, uriCreationalContext); return RedisClient.create(clientResources, redisURI); } return RedisClient.create(redisURI); }
@Override public CompletionStage<Object> construct(boolean unwrapAsync) { Set<Bean<?>> beans = manager.getBeans(type); if (beans.size() > 1) { Set<Bean<?>> modifiableBeans = new HashSet<Bean<?>>(); modifiableBeans.addAll(beans); // Ambiguous dependency may occur if a resource has subclasses // Therefore we remove those beans for (Iterator<Bean<?>> iterator = modifiableBeans.iterator(); iterator.hasNext();) { Bean<?> bean = iterator.next(); if (!bean.getBeanClass().equals(type) && !bean.isAlternative()) { // remove Beans that have clazz in their type closure but not as a base class iterator.remove(); } } beans = modifiableBeans; } if (LogMessages.LOGGER.isDebugEnabled()) //keep this check for performance reasons, as toString() is expensive on CDI Bean { LogMessages.LOGGER.debug(Messages.MESSAGES.beansFound(type, beans)); } Bean<?> bean = manager.resolve(beans); CreationalContext<?> context = manager.createCreationalContext(bean); return CompletableFuture.completedFuture(manager.getReference(bean, type, context)); }
@SuppressWarnings("unchecked") public static <T> T getCurrentInstance(Class<T> beanClass) { BeanManager beanManager = CDI.current().getBeanManager(); Bean<T> bean = (Bean<T>) beanManager.resolve(beanManager.getBeans(beanClass)); return (T) beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean)); }
@Override public RedisClusterClient create(CreationalContext<RedisClusterClient> creationalContext) { CreationalContext<RedisURI> uriCreationalContext = beanManager.createCreationalContext(redisURIBean); RedisURI redisURI = (RedisURI) beanManager.getReference(redisURIBean, RedisURI.class, uriCreationalContext); if (clientResourcesBean != null) { ClientResources clientResources = (ClientResources) beanManager.getReference(clientResourcesBean, ClientResources.class, uriCreationalContext); return RedisClusterClient.create(clientResources, redisURI); } return RedisClusterClient.create(redisURI); }