Class BeanManagerProvider

java.lang.Object
org.infinispan.cdi.common.util.BeanManagerProvider
All Implemented Interfaces:
javax.enterprise.inject.spi.Extension

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 Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    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
    The active BeanManager for the current application (/ClassLoader).
    Detect the right ClassLoader.
    Allows to get the current provider instance which provides access to the current BeanManager
    static boolean
    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.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • BeanManagerProvider

      public BeanManagerProvider()
  • Method Details

    • isActive

      public static boolean isActive()
      Returns if the 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.
      Returns:
      true if the bean-manager-provider is ready to be used
    • getInstance

      public static BeanManagerProvider getInstance()
      Allows to get the current provider instance which provides access to the current BeanManager
      Returns:
      the singleton BeanManagerProvider
      Throws:
      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.
    • setBeanManager

      public void setBeanManager(@Observes 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.
      Parameters:
      afterBeanDiscovery - event which we don't actually use ;)
      beanManager - the BeanManager we store and make available.
    • getBeanManager

      public javax.enterprise.inject.spi.BeanManager getBeanManager()
      The active BeanManager for the current application (/ClassLoader). This method will throw an IllegalStateException if the BeanManager cannot be found.
      Returns:
      the current bean-manager, never null
      Throws:
      IllegalStateException - if the BeanManager cannot be found
    • getClassLoader

      public static ClassLoader getClassLoader(Object o)
      Detect the right ClassLoader. The lookup order is determined by:
      1. ContextClassLoader of the current Thread
      2. ClassLoader of the given Object 'o'
      3. ClassLoader of this very ClassUtils class
      Parameters:
      o - if not null it may get used to detect the classloader.
      Returns:
      The ClassLoader which should get used to create new instances
    • cleanupFinalBeanManagers

      public void cleanupFinalBeanManagers(@Observes 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. This might happen if someone uses the BeanManagerProvider during Extension startup.
    • cleanupStoredBeanManagerOnShutdown

      public void cleanupStoredBeanManagerOnShutdown(@Observes javax.enterprise.inject.spi.BeforeShutdown beforeShutdown)
      Cleanup on container shutdown
      Parameters:
      beforeShutdown - cdi shutdown event