public class BeanManagerProvider extends Object implements javax.enterprise.inject.spi.Extension
This class provides access to the 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 if you like 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 will be removed.
Usage:
BeanManager bm = BeanManagerProvider.getInstance().getBeanManager();
Attention: This method is intended for being used in user code at runtime.
If this method gets 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 to get the right
BeanManager 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 got Validated,
we prevent premature loading of information from JNDI 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 (/ClassLoader). |
static BeanManagerProvider |
getInstance()
Allows to get the current provider instance which provides access to the current
BeanManager |
static boolean |
isActive()
Returns if the
BeanManagerProvider has been initialized. |
void |
setBeanManager(javax.enterprise.inject.spi.AfterBeanDiscovery afterBeanDiscovery,
javax.enterprise.inject.spi.BeanManager beanManager)
It basically doesn't matter which of the system events we use,
but basically we use the
AfterBeanDiscovery event since it allows to use the
BeanManagerProvider for all events which occur after the AfterBeanDiscovery event. |
public static boolean isActive()
BeanManagerProvider has been initialized.
Usually it isn't needed to call this method in application code.
It's e.g. useful for other frameworks to check if DeltaSpike and the CDI container in general have been started.public static BeanManagerProvider getInstance()
BeanManagerIllegalStateException - 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 be called before this method gets called.public void setBeanManager(@Observes
javax.enterprise.inject.spi.AfterBeanDiscovery afterBeanDiscovery,
javax.enterprise.inject.spi.BeanManager beanManager)
AfterBeanDiscovery event since it allows to use the
BeanManagerProvider for all events which occur after the AfterBeanDiscovery event.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 (/ClassLoader). This method will throw an
IllegalStateException if the BeanManager cannot be found.nullIllegalStateException - 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 © 2011-2013 The Apache Software Foundation. All Rights Reserved.