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 ClassLoader |
getClassLoader(Object o)
Detect the right 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()
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 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.null
IllegalStateException
- if the BeanManager cannot be foundpublic static ClassLoader getClassLoader(Object o)
o
- if not null
it may get used to detect the classloader.ClassLoader
which should get used to create new instancespublic void cleanupFinalBeanManagers(@Observes javax.enterprise.inject.spi.AfterDeploymentValidation adv)
public void cleanupStoredBeanManagerOnShutdown(@Observes javax.enterprise.inject.spi.BeforeShutdown beforeShutdown)
beforeShutdown
- cdi shutdown eventCopyright © 2014 JBoss, a division of Red Hat. All Rights Reserved.