[
https://issues.jboss.org/browse/CDI-473?page=com.atlassian.jira.plugin.sy...
]
Martin Kouba commented on CDI-473:
----------------------------------
The other problem with {{@Initialized/(a)Destroyed(ApplicationScoped.class)}} is that
different EE modules usually receive different payloads, e.g. web modules receive a
concrete {{ServletContext}}, EJB modules any {{Object}}. So there might be multiple events
with different timing. I know it's only relevant for EARs, but still might complicate
things.
{{BeforeShutdown}} must be fired after all contexts are destroyed. It's true the
container must provide a bean of scope {{@ApplicationScoped}} for each extension so it
sounds like a contradiction. But in Weld we have a special handling of extension observer
methods where contexts do not have to be active.
Standardize eager initialisation of ApplicationScoped bean
----------------------------------------------------------
Key: CDI-473
URL:
https://issues.jboss.org/browse/CDI-473
Project: CDI Specification Issues
Issue Type: Feature Request
Components: Contexts
Reporter: Antonin Stefanutti
Fix For: 2.0 (discussion)
Given the proxying strategy documented in the CDI specification, normal scoped beans get
initialize when an injected proxy reference is first called.
While that's perfectly fine in the vast majority of use cases, that proves
inconvenient when dealing with {{ApplicationScoped}} beans that capture application
singletons which we want to bound to the application lifecycle with a {{postConstruct}}
callback. As this callback is only called when a proxy is invoked, it is frequent to see
the application developers using a CDI extension to meet that need, e.g.:
{code}
void forceInitialization(@Observes AfterDeploymentValidation adv, BeanManager manager) {
for (AnnotatedType<?> type : eagerBeans)
// Calling toString is necessary to force the initialization of normal-scoped
beans
BeanManagerHelper.getReferencesByType(manager, type.getBaseType(),
AnyLiteral.INSTANCE).toString();
}
{code}
There should be a concise way to declare that intent which would then be address by the
CDI container, for example:
{code}
@ApplicationScoped(eager = true}
class EagerApplicationScopedBean {
}
{code}
--
This message was sent by Atlassian JIRA
(v6.4.11#64026)