Class BeanManagerProvider

java.lang.Object
com.vaadin.cdi.util.BeanManagerProvider
All Implemented Interfaces:
jakarta.enterprise.inject.spi.Extension

public class BeanManagerProvider extends Object implements jakarta.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 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(jakarta.enterprise.inject.spi.AfterDeploymentValidation)). This is the only way to guarantee that the right BeanManager is obtained in more complex Container scenarios.

  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    cleanupFinalBeanManagers(jakarta.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(jakarta.enterprise.inject.spi.BeforeShutdown beforeShutdown)
    Cleanup on container shutdown.
    jakarta.enterprise.inject.spi.BeanManager
    The active BeanManager for the current application (current ClassLoader).
    Returns the current provider instance which provides access to the current BeanManager.
    static boolean
    Indicates whether the BeanManagerProvider has been initialized.
    void
    setBeanManager(jakarta.enterprise.inject.spi.AfterBeanDiscovery afterBeanDiscovery, jakarta.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.

    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()
      Indicates whether the 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.
      Returns:
      true if the BeanManagerProvider is ready to be used
    • getInstance

      public static BeanManagerProvider getInstance()
      Returns 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 been called before this method gets called.
    • setBeanManager

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

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

      public void cleanupFinalBeanManagers(@Observes jakarta.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. This might happen if the BeanManagerProvider is used in an extension during CDI bootstrap. This should be generally avoided. Instead, an injected BeanManager should be used in Extensions and propagated using setters. In EARs with multiple webapps, each WAR might get a different Extension. This depends on the container used.
    • cleanupStoredBeanManagerOnShutdown

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