/** * Will re-inject any managed beans in the target. Will not call any other life-cycle methods * * @param ctx * @param managedBean */ @SuppressWarnings("unchecked") static void reinitialize(Context ctx, Contextual<Object> contextual) { try { ManagedBean<Object> managedBean = ManagedBean.class.cast(contextual); LOGGER.debug("Re-Initializing bean '{}' in context '{}'", managedBean, ctx); Object get = ctx.get(managedBean); if (get != null) { LOGGER.debug("Bean injection points are reinitialized '{}'", managedBean); CreationalContextImpl<Object> creationalContext = managedBean.getWebBeansContext().getCreationalContextFactory().getCreationalContext(managedBean); managedBean.getProducer().inject(get, creationalContext); } } catch (Exception e) { LOGGER.error("Error reinitializing bean '{}' in context '{}'", e, contextual, ctx); } } }
/** * This method will be used in {@link AfterBeanDiscovery#addBean(javax.enterprise.inject.spi.Bean)}} */ public <T> ManagedBean<T> defineManagedBeanWithoutFireEvents(AnnotatedType<T> type) { BeanAttributesImpl<T> beanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(type).build(); ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator = new ManagedBeanBuilder<>(webBeansContext, type, beanAttributes, false); //Check for Enabled via Alternative setInjectionTargetBeanEnableFlag(managedBeanCreator.getBean()); ManagedBean<T> managedBean = managedBeanCreator.getBean(); new ProducerMethodBeansBuilder(managedBean.getWebBeansContext(), managedBean.getAnnotatedType()).defineProducerMethods( managedBean, new ProducerFieldBeansBuilder(managedBean.getWebBeansContext(), managedBean.getAnnotatedType()).defineProducerFields(managedBean)); new ObserverMethodsBuilder<>(webBeansContext, managedBean.getAnnotatedType()).defineObserverMethods(managedBean); if (managedBean.getProducer() instanceof AbstractProducer) { AbstractProducer<T> producer = (AbstractProducer<T>)managedBean.getProducer(); producer.defineInterceptorStack(managedBean, managedBean.getAnnotatedType(), webBeansContext); } return managedBean; }
webBeansContext.getWebBeansUtil().defineManagedBeanWithoutFireEvents( (AnnotatedType<?>) annotatedType); if(managedBean.getScope() != Dependent.class) logger.log(Level.WARNING, OWBLogConst.WARN_0005_1, managedBean.getBeanClass().getName()); if(managedBean.getName() != null) logger.log(Level.WARNING, OWBLogConst.WARN_0005_2, managedBean.getBeanClass().getName()); if(managedBean.isAlternative()) logger.log(Level.WARNING, OWBLogConst.WARN_0005_3, managedBean.getBeanClass().getName()); "But the decorator bean : " + managedBean.toString() + " has more than one");
/** * {@inheritDoc} */ public M getBean() { M bean = (M) new ManagedBean<>(webBeansContext, WebBeansType.MANAGED, annotatedType, beanAttributes, annotatedType.getJavaClass()); bean.setEnabled(webBeansContext.getWebBeansUtil().isBeanEnabled(beanAttributes, annotatedType, bean.getStereotypes())); webBeansContext.getWebBeansUtil().checkManagedBeanCondition(annotatedType); WebBeansUtil.checkGenericType(annotatedType.getJavaClass(), beanAttributes.getScope()); webBeansContext.getWebBeansUtil().validateBeanInjection(bean); UnproxyableResolutionException lazyException = webBeansContext.getDeploymentValidationService().validateProxyable(bean, ignoreFinalMethods); if (lazyException == null) { return bean; } return (M) new UnproxyableBean<>(webBeansContext, WebBeansType.MANAGED, beanAttributes, annotatedType, annotatedType.getJavaClass(), lazyException); } }
if (ManagedBean.class.isInstance(bean)) // in this case don't use producer which can be wrapped producer = ManagedBean.class.cast(bean).getOriginalInjectionTarget();
public <T> Bean<T> createNewComponent(Class<T> type) { Asserts.nullCheckForClass(type); OpenWebBeansEjbPlugin ejbPlugin = webBeansContext.getPluginLoader().getEjbPlugin(); if (ejbPlugin != null && ejbPlugin.isNewSessionBean(type)) { return ejbPlugin.defineNewSessionBean(type); } AnnotatedType<T> annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(type); BeanAttributesImpl<T> defaultBeanAttributes = BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build(); BeanAttributesImpl<T> newBeanAttributes = new BeanAttributesImpl<>(defaultBeanAttributes.getTypes(), Collections.<Annotation>singleton(new NewLiteral(type))); // TODO replace this by InjectionPointBuilder ManagedBeanBuilder<T, ManagedBean<T>> beanBuilder = new ManagedBeanBuilder<>(webBeansContext, annotatedType, newBeanAttributes, false); NewManagedBean<T> newBean = new NewManagedBean<>(webBeansContext, WebBeansType.MANAGED, annotatedType, newBeanAttributes, type, beanBuilder.getBean().getInjectionPoints()); return newBean; }