in webbeans-impl/src/main/java/org/apache/webbeans/config/BeansDeployer.java [2020:2206]
protected <T> void defineManagedBean(AnnotatedType<T> annotatedType,
ExtendedBeanAttributes extendedBeanAttributes,
Map<AnnotatedType<?>, ExtendedBeanAttributes<?>> annotatedTypes)
{
BeanAttributes attributes = extendedBeanAttributes.beanAttributes;
//Fires ProcessInjectionTarget event for Java EE components instances
//That supports injections but not managed beans
Class beanClass = annotatedType.getJavaClass();
if(webBeansContext.getWebBeansUtil().supportsJavaEeComponentInjections(beanClass))
{
//Fires ProcessInjectionTarget
webBeansContext.getWebBeansUtil().fireProcessInjectionTargetEventForJavaEeComponents(beanClass).setStarted();
webBeansContext.getWebBeansUtil().inspectDeploymentErrorStack(
"There are errors that are added by ProcessInjectionTarget event observers. Look at logs for further details");
//Checks that not contains @Inject InjectionPoint
webBeansContext.getAnnotationManager().checkInjectionPointForInjectInjectionPoint(beanClass);
}
{
ManagedBeanBuilder<T, ManagedBean<T>> managedBeanCreator
= new ManagedBeanBuilder<>(webBeansContext, annotatedType, attributes, extendedBeanAttributes.ignoreFinalMethods);
if(WebBeansUtil.isDecorator(annotatedType))
{
if (logger.isLoggable(Level.FINE))
{
logger.log(Level.FINE, "Found Managed Bean Decorator with class name : [{0}]", annotatedType.getJavaClass().getName());
}
DecoratorBeanBuilder<T> dbb = new DecoratorBeanBuilder<T>(webBeansContext, annotatedType, attributes);
if (dbb.isDecoratorEnabled())
{
dbb.defineDecoratorRules();
DecoratorBean<T> decorator = dbb.getBean();
//Fires ProcessBean
ProcessBeanImpl<T> processBeanEvent = new GProcessBean(decorator, annotatedType);
webBeansContext.getBeanManagerImpl().fireEvent(processBeanEvent, true);
processBeanEvent.setStarted();
webBeansContext.getWebBeansUtil().inspectDefinitionErrorStack("There are errors that are added by ProcessBean event observers for " +
"interceptor beans. Look at logs for further details");
decoratorsManager.addDecorator(decorator);
}
}
else if(WebBeansUtil.isCdiInterceptor(annotatedType))
{
if (logger.isLoggable(Level.FINE))
{
logger.log(Level.FINE, "Found Managed Bean Interceptor with class name : [{0}]", annotatedType.getJavaClass().getName());
}
CdiInterceptorBeanBuilder<T> ibb = new CdiInterceptorBeanBuilder<T>(webBeansContext, annotatedType, attributes);
if (ibb.isInterceptorEnabled())
{
ibb.defineCdiInterceptorRules();
CdiInterceptorBean<T> interceptor = ibb.getBean();
//Fires ProcessBean
ProcessBeanImpl<T> processBeanEvent = new GProcessBean(interceptor, annotatedType);
webBeansContext.getBeanManagerImpl().fireEvent(processBeanEvent, true);
processBeanEvent.setStarted();
webBeansContext.getWebBeansUtil().inspectDefinitionErrorStack("There are errors that are added by ProcessBean event observers for " +
"interceptor beans. Look at logs for further details");
interceptorsManager.addCdiInterceptor(interceptor);
}
}
else
{
InjectionTargetBean<T> bean = managedBeanCreator.getBean();
if (decoratorsManager.containsCustomDecoratorClass(annotatedType.getJavaClass()) ||
interceptorsManager.containsCustomInterceptorClass(annotatedType.getJavaClass()))
{
return; //TODO discuss this case (it was ignored before)
}
if (logger.isLoggable(Level.FINE))
{
logger.log(Level.FINE, "Found Managed Bean with class name : [{0}]", annotatedType.getJavaClass().getName());
}
Set<ObserverMethod<?>> observerMethods;
AnnotatedType<T> beanAnnotatedType = bean.getAnnotatedType();
if (bean.isEnabled())
{
observerMethods = new ObserverMethodsBuilder<>(webBeansContext, beanAnnotatedType).defineObserverMethods(bean, false);
}
else
{
observerMethods = new HashSet<>();
}
WebBeansContext wbc = bean.getWebBeansContext();
Set<ProducerFieldBean<?>> producerFields = new ProducerFieldBeansBuilder(wbc, beanAnnotatedType).defineProducerFields(bean);
Set<ProducerMethodBean<?>> producerMethods = new ProducerMethodBeansBuilder(wbc, beanAnnotatedType).defineProducerMethods(bean, producerFields);
ManagedBean<T> managedBean = (ManagedBean<T>)bean;
Map<ProducerMethodBean<?>,AnnotatedMethod<?>> annotatedMethods =
new HashMap<>();
if (!producerFields.isEmpty() || !producerMethods.isEmpty())
{
Priority priority = annotatedType.getAnnotation(Priority.class);
if (priority != null && !webBeansContext.getAlternativesManager()
.isAlternative(annotatedType.getJavaClass(), Collections.<Class<? extends Annotation>>emptySet()))
{
webBeansContext.getAlternativesManager().addPriorityClazzAlternative(annotatedType.getJavaClass(), priority);
}
}
for(ProducerMethodBean<?> producerMethod : producerMethods)
{
AnnotatedMethod<?> method = webBeansContext.getAnnotatedElementFactory().newAnnotatedMethod(producerMethod.getCreatorMethod(), annotatedType);
webBeansContext.getWebBeansUtil().inspectDeploymentErrorStack("There are errors that are added by ProcessProducer event observers for "
+ "ProducerMethods. Look at logs for further details");
annotatedMethods.put(producerMethod, method);
}
Map<ProducerFieldBean<?>,AnnotatedField<?>> annotatedFields =
new HashMap<>();
for(ProducerFieldBean<?> producerField : producerFields)
{
webBeansContext.getWebBeansUtil().inspectDeploymentErrorStack("There are errors that are added by ProcessProducer event observers for"
+ " ProducerFields. Look at logs for further details");
annotatedFields.put(producerField,
webBeansContext.getAnnotatedElementFactory().newAnnotatedField(
producerField.getCreatorField(),
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(producerField.getBeanClass())));
}
Map<ObserverMethod<?>,AnnotatedMethod<?>> observerMethodsMap =
new HashMap<>();
for(ObserverMethod<?> observerMethod : observerMethods)
{
ObserverMethodImpl<?> impl = (ObserverMethodImpl<?>)observerMethod;
AnnotatedMethod<?> method = impl.getObserverMethod();
observerMethodsMap.put(observerMethod, method);
}
BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
//Fires ProcessManagedBean
ProcessBeanImpl<T> processBeanEvent = new GProcessManagedBean(managedBean, annotatedType);
beanManager.fireEvent(processBeanEvent, true);
processBeanEvent.setStarted();
webBeansContext.getWebBeansUtil().inspectDefinitionErrorStack("There are errors that are added by ProcessManagedBean event observers for " +
"managed beans. Look at logs for further details");
//Fires ProcessProducerMethod
webBeansContext.getWebBeansUtil().fireProcessProducerMethodBeanEvent(annotatedMethods, annotatedType);
webBeansContext.getWebBeansUtil().inspectDefinitionErrorStack("There are errors that are added by ProcessProducerMethod event observers for " +
"producer method beans. Look at logs for further details");
//Fires ProcessProducerField
webBeansContext.getWebBeansUtil().fireProcessProducerFieldBeanEvent(annotatedFields);
webBeansContext.getWebBeansUtil().inspectDefinitionErrorStack("There are errors that are added by ProcessProducerField event observers for " +
"producer field beans. Look at logs for further details");
if(!webBeansContext.getWebBeansUtil().isAnnotatedTypeDecoratorOrInterceptor(annotatedType))
{
beanManager.addBean(bean);
for (ProducerMethodBean<?> producerMethod : producerMethods)
{
// add them one after the other to enable serialization handling et al
beanManager.addBean(producerMethod);
}
for (ProducerFieldBean<?> producerField : producerFields)
{
// add them one after the other to enable serialization handling et al
beanManager.addBean(producerField);
}
}
}
}
}