Since @ManagedBean(eager = true)
will be deprecated, How do you create a eager application scoped cdi bean?
Asked
Active
Viewed 1,887 times
5

Heena Goyal
- 382
- 3
- 17

Sphynx
- 492
- 5
- 13
1 Answers
4
Solved this by making use of CDI extension framework:
Create Qualifier:
@Qualifier @Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE}) @Retention(value = RetentionPolicy.RUNTIME) public @interface Eager { }
Create Extension implementation with observer method:
public class EagerCDIExtension implements Extension { public void afterDeploymentValidation(@Observes AfterDeploymentValidation event, BeanManager beanManager) { beanManager.getBeans(Object.class, new AnnotationLiteral<Eager>() { }).parallelStream().filter(bean -> bean.getBeanClass().isAnnotationPresent(ApplicationScoped.class)).forEach(bean -> { beanManager.getReference(bean, bean.getBeanClass(), beanManager.createCreationalContext(bean)).toString(); }); } }
Create:
META-INF/services/javax.enterprise.inject.spi.Extension
Register extension implementatoin class in above file i.e:
pypackage.EagerCDIExtension
-
With this way I need to mark any injection as `@Any` or `@Eager`. Is it true? – Aleksei Egorov May 19 '16 at 17:47
-
No, the bean itself if I am right, so only one place – Kukeltje Sep 28 '16 at 22:30