public class BeanManagerProvider extends Object implements javax.enterprise.inject.spi.Extension
BeanManager
by registering the current BeanManager
in an extension
and making it available via a singleton factory for the current application.
This is really handy when you need to access CDI functionality from places where no injection is available.
If a simple but manual bean lookup is needed, it's easier to use the BeanProvider
.
As soon as an application shuts down, the reference to the BeanManager
is removed.
Usage:
BeanManager bm = BeanManagerProvider.getInstance().getBeanManager();
Attention: This approach is intended for use in user code at runtime. If BeanManagerProvider is used during
Container boot (in an Extension), non-portable behaviour results. During bootstrapping, an Extension shall
@Inject BeanManager to get access to the underlying BeanManager (see e.g. cleanupFinalBeanManagers(javax.enterprise.inject.spi.AfterDeploymentValidation)
).
This is the only way to guarantee that the right BeanManager is obtained in more complex Container scenarios.
Constructor and Description |
---|
BeanManagerProvider() |
Modifier and Type | Method and Description |
---|---|
void |
cleanupFinalBeanManagers(javax.enterprise.inject.spi.AfterDeploymentValidation adv)
By cleaning the final BeanManager map after the deployment gets validated, premature loading of information from
JNDI is prevented in cases where the container might not be fully setup yet.
|
void |
cleanupStoredBeanManagerOnShutdown(javax.enterprise.inject.spi.BeforeShutdown beforeShutdown)
Cleanup on container shutdown.
|
javax.enterprise.inject.spi.BeanManager |
getBeanManager()
The active
BeanManager for the current application (current ClassLoader ). |
static BeanManagerProvider |
getInstance()
Returns the current provider instance which provides access to the current
BeanManager . |
static boolean |
isActive()
Indicates whether the
BeanManagerProvider has been initialized. |
void |
setBeanManager(javax.enterprise.inject.spi.AfterBeanDiscovery afterBeanDiscovery,
javax.enterprise.inject.spi.BeanManager beanManager)
It doesn't really matter which of the system events is used to obtain the BeanManager, but
AfterBeanDiscovery has been chosen since it allows all events which occur after the
AfterBeanDiscovery to use the BeanManagerProvider . |
public static boolean isActive()
BeanManagerProvider
has been initialized. Usually it's not necessary to call this
method in application code. It's useful e.g. for other frameworks to check if DeltaSpike and the CDI container in
general have been started.public static BeanManagerProvider getInstance()
BeanManager
.IllegalStateException
- if the BeanManagerProvider
isn't ready to be used. That's the case if the
environment isn't configured properly and therefore the AfterBeanDiscovery
hasn't been called before this method gets called.public void setBeanManager(@Observes javax.enterprise.inject.spi.AfterBeanDiscovery afterBeanDiscovery, javax.enterprise.inject.spi.BeanManager beanManager)
AfterBeanDiscovery
has been chosen since it allows all events which occur after the
AfterBeanDiscovery
to use the BeanManagerProvider
.afterBeanDiscovery
- event which we don't actually use ;)beanManager
- the BeanManager we store and make available.public javax.enterprise.inject.spi.BeanManager getBeanManager()
BeanManager
for the current application (current ClassLoader
). This method will throw
an IllegalStateException
if the BeanManager cannot be found.null
IllegalStateException
- if the BeanManager cannot be foundpublic void cleanupFinalBeanManagers(@Observes javax.enterprise.inject.spi.AfterDeploymentValidation adv)
public void cleanupStoredBeanManagerOnShutdown(@Observes javax.enterprise.inject.spi.BeforeShutdown beforeShutdown)
beforeShutdown
- CDI shutdown eventCopyright © 2020 The Apache Software Foundation. All rights reserved.