Class BeanManagerImpl

  • All Implemented Interfaces:
    BeanManager, Serializable, org.jboss.weld.manager.api.WeldManager

    public class BeanManagerImpl
    extends Object
    implements org.jboss.weld.manager.api.WeldManager, Serializable
    Implementation of the Bean Manager.

    Essentially a singleton for registering Beans, Contexts, Observers, Interceptors etc. as well as providing resolution

    Author:
    Pete Muir, Marius Bogoevici, Ales Justin, Jozef Hartinger
    See Also:
    Serialized Form
    • Method Detail

      • newRootManager

        public static BeanManagerImpl newRootManager​(String contextId,
                                                     String id,
                                                     org.jboss.weld.bootstrap.api.ServiceRegistry serviceRegistry)
        Create a new, root, manager
        Parameters:
        serviceRegistry -
        Returns:
      • getContextId

        public String getContextId()
      • addAccessibleBeanManager

        public void addAccessibleBeanManager​(BeanManagerImpl accessibleBeanManager)
      • addBean

        public void addBean​(Bean<?> bean)
      • addBeans

        public void addBeans​(Collection<? extends Bean<?>> beans)
        Optimization which modifies CopyOnWrite structures only once instead of once for every bean.
        Parameters:
        beans -
      • addDecorator

        public void addDecorator​(Decorator<?> bean)
      • addInterceptor

        public void addInterceptor​(Interceptor<?> bean)
      • getEnabled

        public ModuleEnablement getEnabled()
        Enabled Alternatives, Interceptors and Decorators
        Returns:
      • isBeanEnabled

        public boolean isBeanEnabled​(Bean<?> bean)
      • getBeans

        public Set<Bean<?>> getBeans​(Type beanType,
                                     Annotation... qualifiers)
        Description copied from interface: BeanManager
        Return the set of beans which have the given required type and qualifiers and are available for injection in the module or library containing the class into which the BeanManager was injected or the Java EE component from whose JNDI environment namespace the BeanManager was obtained, according to the rules of typesafe resolution. If no qualifiers are given, the default qualifier is assumed. Note that when called during invocation of an AfterBeanDiscovery event observer, this method will only return beans discovered by the container before the AfterBeanDiscovery event is fired.
        Specified by:
        getBeans in interface BeanManager
        Parameters:
        beanType - the required bean type
        qualifiers - the required qualifiers
        Returns:
        the resulting set of beans
      • registerBeanNamespace

        protected void registerBeanNamespace​(Bean<?> bean)
      • getEnterpriseBeans

        public Map<org.jboss.weld.ejb.spi.EjbDescriptor<?>,​SessionBean<?>> getEnterpriseBeans()
        Gets the class-mapped beans. For internal use.
        Returns:
        The bean map
      • getBeans

        public List<Bean<?>> getBeans()
        The beans registered with the Web Bean manager which are resolvable. Does not include interceptor and decorator beans
        Returns:
        The list of known beans
      • getDynamicAccessibleBeans

        public Iterable<Bean<?>> getDynamicAccessibleBeans()
      • getAccessibleBeans

        public Set<Bean<?>> getAccessibleBeans()
        Unlike getDynamicAccessibleBeans() this method returns a mutable set which is not updated automatically.
        Returns:
        all accessible beans
      • getDynamicAccessibleInterceptors

        public Iterable<Interceptor<?>> getDynamicAccessibleInterceptors()
      • getDynamicAccessibleDecorators

        public Iterable<Decorator<?>> getDynamicAccessibleDecorators()
      • addContext

        public void addContext​(Context context)
      • addObserver

        public void addObserver​(ObserverMethod<?> observer)
        Does the actual observer registration
        Parameters:
        observer - =
      • fireEvent

        public void fireEvent​(Object event,
                              Annotation... qualifiers)
        Fires an event object with given event object for given bindings
        Specified by:
        fireEvent in interface BeanManager
        Parameters:
        event - The event object to pass along
        qualifiers - The binding types to match
      • getContext

        public Context getContext​(Class<? extends Annotation> scopeType)
        Gets an active context of the given scope. Throws an exception if there are no active contexts found or if there are too many matches
        Specified by:
        getContext in interface BeanManager
        Parameters:
        scopeType - The scope to match
        Returns:
        A single active context of the given scope
        Throws:
        IllegalStateException - if there are multiple active scopes for a given context
      • isContextActive

        public boolean isContextActive​(Class<? extends Annotation> scopeType)
        Specified by:
        isContextActive in interface org.jboss.weld.manager.api.WeldManager
      • getReference

        public Object getReference​(Bean<?> bean,
                                   Type requestedType,
                                   CreationalContext<?> creationalContext)
        Description copied from interface: BeanManager

        Obtains a contextual reference for a certain bean and a certain bean type of the bean.

        Specified by:
        getReference in interface BeanManager
        Parameters:
        bean - the Bean object representing the bean
        requestedType - a bean type that must be implemented by any client proxy that is returned
        creationalContext - a CreationalContext that may be used to destroy any object with scope Dependent that is created
        Returns:
        a contextual reference representing the bean
      • getInjectableReference

        public Object getInjectableReference​(InjectionPoint injectionPoint,
                                             Bean<?> resolvedBean,
                                             CreationalContext<?> creationalContext)
        Get a reference, registering the injection point used.
        Parameters:
        injectionPoint - the injection point to register
        resolvedBean - the bean to get a reference to
        creationalContext - the creationalContext
        Returns:
        the injectable reference
      • getBeans

        public Set<Bean<?>> getBeans​(String name)
        Description copied from interface: BeanManager
        Return the set of beans which have the given EL name and are available for injection in the module or library containing the class into which the BeanManager was injected or the Java EE component from whose JNDI environment namespace the BeanManager was obtained, according to the rules of EL name resolution. Note that when called during invocation of an AfterBeanDiscovery event observer, this method will only return beans discovered by the container before the AfterBeanDiscovery event is fired.
        Specified by:
        getBeans in interface BeanManager
        Parameters:
        name - the EL name
        Returns:
        the resulting set of beans
      • resolveDecorators

        public List<Decorator<?>> resolveDecorators​(Set<Type> types,
                                                    Annotation... qualifiers)
        Description copied from interface: BeanManager
        Return an ordered list of decorators for a set of bean types and a set of qualifiers and which are enabled in the module or library containing the class into which the BeanManager was injected or the Java EE component from whose JNDI environment namespace the BeanManager was obtained. Note that when called during invocation of an AfterBeanDiscovery event observer, this method will only return decorators discovered by the container before the AfterBeanDiscovery event is fired.
        Specified by:
        resolveDecorators in interface BeanManager
        Parameters:
        types - the set of bean types of the decorated bean
        qualifiers - the qualifiers declared by the decorated bean
        Returns:
        the resulting set of decorators
      • resolveInterceptors

        public List<Interceptor<?>> resolveInterceptors​(InterceptionType type,
                                                        Annotation... interceptorBindings)
        Resolves a list of interceptors based on interception type and interceptor bindings. Transitive interceptor bindings of the interceptor bindings passed as a parameter are considered in the resolution process.
        Specified by:
        resolveInterceptors in interface BeanManager
        Parameters:
        type - The interception type to resolve
        interceptorBindings - The binding types to match
        Returns:
        A list of matching interceptors
      • resolveInterceptors

        public List<Interceptor<?>> resolveInterceptors​(InterceptionType type,
                                                        Collection<Annotation> interceptorBindings)
        Resolves a list of interceptors based on interception type and interceptor bindings. Transitive interceptor bindings of the interceptor bindings passed as a parameter are NOT considered in the resolution process. Therefore, the caller is responsible for filtering of transitive interceptor bindings in order to comply with interceptor binding inheritance and overriding (See JSR-346 9.5.2). This is a Weld-specific method.
        Parameters:
        type - The interception type to resolve
        interceptorBindings - The binding types to match
        Returns:
        A list of matching interceptors
      • getBeanResolver

        public TypeSafeBeanResolver getBeanResolver()
        Get the web bean resolver. For internal use
        Returns:
        The resolver
      • getDecoratorResolver

        public TypeSafeDecoratorResolver getDecoratorResolver()
        Get the decorator resolver. For internal use
        Returns:
        The resolver
      • getAccessibleLenientObserverNotifier

        public ObserverNotifier getAccessibleLenientObserverNotifier()
        Get the lenient observer notifier for accessible observer methods. Should never be exposed to an application.
        Returns:
        The ObserverNotifier
      • getGlobalLenientObserverNotifier

        public ObserverNotifier getGlobalLenientObserverNotifier()
        Get the lenient global observer notifier. Should never be exposed to an application.
        Returns:
        The ObserverNotifier
      • getGlobalStrictObserverNotifier

        public ObserverNotifier getGlobalStrictObserverNotifier()
        Get the Strict global observer notifier. This one should be used for firing application / extension events.
        Returns:
        The ObserverNotifier
      • toString

        public String toString()
        Gets a string representation
        Overrides:
        toString in class Object
        Returns:
        A string representation
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • getServices

        public org.jboss.weld.bootstrap.api.ServiceRegistry getServices()
        Specified by:
        getServices in interface org.jboss.weld.manager.api.WeldManager
      • getNamespaces

        protected List<String> getNamespaces()
        Returns:
        the namespaces
      • getDynamicAccessibleNamespaces

        public Iterable<String> getDynamicAccessibleNamespaces()
      • getAccessibleNamespaces

        public List<String> getAccessibleNamespaces()
        Unlike getDynamicAccessibleNamespaces() this method returns a mutable set which is not updated automatically.
        Returns:
        the accessible namespaces
      • getId

        public String getId()
        Specified by:
        getId in interface org.jboss.weld.manager.api.WeldManager
      • createInjectionTarget

        public <T> InjectionTarget<T> createInjectionTarget​(org.jboss.weld.ejb.spi.EjbDescriptor<T> descriptor)
        Specified by:
        createInjectionTarget in interface org.jboss.weld.manager.api.WeldManager
      • getInterceptorBindingDefinition

        public Set<Annotation> getInterceptorBindingDefinition​(Class<? extends Annotation> bindingType)
        Description copied from interface: BeanManager
        Obtains the set of meta-annotations for a certain interceptor binding type .
        Specified by:
        getInterceptorBindingDefinition in interface BeanManager
        Parameters:
        bindingType - the interceptor binding type
        Returns:
        the set of meta-annotations
      • getPassivationCapableBean

        public Bean<?> getPassivationCapableBean​(org.jboss.weld.serialization.spi.BeanIdentifier identifier)
        Specified by:
        getPassivationCapableBean in interface org.jboss.weld.manager.api.WeldManager
      • isInterceptorBinding

        public boolean isInterceptorBinding​(Class<? extends Annotation> annotationType)
        Description copied from interface: BeanManager
        Test the given annotation type to determine if it is an interceptor binding type .
        Specified by:
        isInterceptorBinding in interface BeanManager
        Parameters:
        annotationType - the annotation to test
        Returns:
        true if the annotation type is a interceptor binding type
      • isPassivatingScope

        public boolean isPassivatingScope​(Class<? extends Annotation> annotationType)
        Description copied from interface: BeanManager
        Test the given annotation type to determine if it is a passivating scope type.
        Specified by:
        isPassivatingScope in interface BeanManager
        Parameters:
        annotationType - the annotation type
        Returns:
        true if the annotation type is a passivating scope type
      • isScope

        public boolean isScope​(Class<? extends Annotation> annotationType)
        Description copied from interface: BeanManager
        Test the given annotation type to determine if it is a scope type.
        Specified by:
        isScope in interface BeanManager
        Parameters:
        annotationType - the annotation type
        Returns:
        true if the annotation type is a scope type
      • isStereotype

        public boolean isStereotype​(Class<? extends Annotation> annotationType)
        Description copied from interface: BeanManager
        Test the given annotation type to determine if it is a stereotype.
        Specified by:
        isStereotype in interface BeanManager
        Parameters:
        annotationType - the annotation type
        Returns:
        true if the annotation type is a stereotype
      • getELResolver

        public jakarta.el.ELResolver getELResolver()
        Description copied from interface: BeanManager
        Returns a ELResolver that resolves beans by EL name.
        Specified by:
        getELResolver in interface BeanManager
        Returns:
        the ELResolver
      • wrapExpressionFactory

        public jakarta.el.ExpressionFactory wrapExpressionFactory​(jakarta.el.ExpressionFactory expressionFactory)
        Description copied from interface: BeanManager
        Returns a wrapper ExpressionFactory that delegates MethodExpression and ValueExpression creation to the given ExpressionFactory. When a Unified EL expression is evaluated using a MethodExpression or ValueExpression returned by the wrapper ExpressionFactory, the container handles destruction of objects with scope Dependent.
        Specified by:
        wrapExpressionFactory in interface BeanManager
        Parameters:
        expressionFactory - the ExpressionFactory to wrap
        Returns:
        the wrapped ExpressionFactory
      • createAnnotatedType

        public <T> AnnotatedType<T> createAnnotatedType​(Class<T> type,
                                                        String id)
        Specified by:
        createAnnotatedType in interface org.jboss.weld.manager.api.WeldManager
      • disposeAnnotatedType

        public <T> void disposeAnnotatedType​(Class<T> type,
                                             String id)
        Specified by:
        disposeAnnotatedType in interface org.jboss.weld.manager.api.WeldManager
      • resolve

        public <X> Bean<? extends X> resolve​(Set<Bean<? extends X>> beans)
        Description copied from interface: BeanManager
        Apply the ambiguous dependency resolution rules to a set of beans. Note that when called during invocation of an AfterBeanDiscovery event observer, this method will only return beans discovered by the container before the AfterBeanDiscovery event is fired.
        Specified by:
        resolve in interface BeanManager
        Type Parameters:
        X - a common type of the beans
        Parameters:
        beans - a set of beans of the given type
        Returns:
        the resolved bean, or null if null or an empty set is passed
      • getEjbDescriptor

        public <T> org.jboss.weld.ejb.spi.EjbDescriptor<T> getEjbDescriptor​(String beanName)
        Specified by:
        getEjbDescriptor in interface org.jboss.weld.manager.api.WeldManager
      • getBean

        public <T> SessionBean<T> getBean​(org.jboss.weld.ejb.spi.EjbDescriptor<T> descriptor)
        Specified by:
        getBean in interface org.jboss.weld.manager.api.WeldManager
      • cleanup

        public void cleanup()
      • cleanupAfterBoot

        public void cleanupAfterBoot()
        For internal use only. This happens after bootstrap services cleanup but before RIBean.cleanupAfterBoot().
        See Also:
        Bootstrap.endInitialization()
      • fireProcessInjectionTarget

        public <X> InjectionTarget<X> fireProcessInjectionTarget​(AnnotatedType<X> annotatedType)
        Specified by:
        fireProcessInjectionTarget in interface org.jboss.weld.manager.api.WeldManager
      • fireProcessInjectionTarget

        public <X> InjectionTarget<X> fireProcessInjectionTarget​(AnnotatedType<X> annotatedType,
                                                                 InjectionTarget<X> injectionTarget)
        Specified by:
        fireProcessInjectionTarget in interface org.jboss.weld.manager.api.WeldManager
      • instance

        public Instance<Object> instance()
        Specified by:
        instance in interface org.jboss.weld.manager.api.WeldManager
      • getExtension

        public <T extends Extension> T getExtension​(Class<T> extensionClass)
        Description copied from interface: BeanManager
        Obtains the container's instance of an Extension class declared in META-INF/services.
        Specified by:
        getExtension in interface BeanManager
        Type Parameters:
        T - the type of the extension
        Parameters:
        extensionClass - the type of the extension class
        Returns:
        the extension instance
      • getEvent

        public Event<Object> getEvent()
        Description copied from interface: BeanManager
        Returns an instance of Event with specified type java.lang.Object and specified qualifier @Default It allows typesafe synchronous or asynchronous event firing without injection of Event built-in bean requirement.
        Specified by:
        getEvent in interface BeanManager
        Returns:
        a new Event object whose event type is Object and qualifier @Default
      • areQualifiersEquivalent

        public boolean areQualifiersEquivalent​(Annotation qualifier1,
                                               Annotation qualifier2)
        Description copied from interface: BeanManager
        Determine if two qualifiers are considered equivalent for the purposes of typesafe resolution, taking into account any members annotated with Nonbinding.
        Specified by:
        areQualifiersEquivalent in interface BeanManager
        Parameters:
        qualifier1 - a qualifier to check
        qualifier2 - a qualifier to check
        Returns:
        true if the two qualifiers are equivalent, otherwise false
      • areInterceptorBindingsEquivalent

        public boolean areInterceptorBindingsEquivalent​(Annotation interceptorBinding1,
                                                        Annotation interceptorBinding2)
        Description copied from interface: BeanManager
        Determine if two interceptor bindings are considered equivalent for the purposes of typesafe resolution, taking into account any members annotated with Nonbinding.
        Specified by:
        areInterceptorBindingsEquivalent in interface BeanManager
        Parameters:
        interceptorBinding1 - an interceptor binding to check
        interceptorBinding2 - an interceptor binding to check
        Returns:
        true if the two interceptor bindings are equivalent, otherwise false
      • getQualifierHashCode

        public int getQualifierHashCode​(Annotation qualifier)
        Description copied from interface: BeanManager
        Determine the hash code of a qualifier, using the JDK algorithm for determining an annotation hash code, ignoring any members annotated with Nonbinding.
        Specified by:
        getQualifierHashCode in interface BeanManager
        Parameters:
        qualifier - the qualifier to consider
        Returns:
        the hashCode for the qualifier
      • getInterceptorBindingHashCode

        public int getInterceptorBindingHashCode​(Annotation interceptorBinding)
        Description copied from interface: BeanManager
        Determine the hash code of an interceptor binding, using the JDK algorithm for determining an annotation hash code, ignoring any members annotated with Nonbinding.
        Specified by:
        getInterceptorBindingHashCode in interface BeanManager
        Parameters:
        interceptorBinding - the interceptor binding to consider
        Returns:
        the hashCode for the interceptor binding
      • getInjectionTargetFactory

        public <T> org.jboss.weld.manager.api.WeldInjectionTargetFactory<T> getInjectionTargetFactory​(AnnotatedType<T> type)
        Creates an InjectionTargetFactory for a given type. The BeanManager for the InjectionTarget will be inferred using CDI11Deployment.getBeanDeploymentArchive(Class).
        Specified by:
        getInjectionTargetFactory in interface BeanManager
        Specified by:
        getInjectionTargetFactory in interface org.jboss.weld.manager.api.WeldManager
        Type Parameters:
        T - the type
        Parameters:
        type - the annotated type to create the injection target factory for
        Returns:
        an InjectionTargetFactory
      • getProducerFactory

        public <X> FieldProducerFactory<X> getProducerFactory​(AnnotatedField<? super X> field,
                                                              Bean<X> declaringBean)
        Description copied from interface: BeanManager

        An implementation of ProducerFactory that provides container created Producer instances for the given field.

        This factory can be wrapped to add behavior to container created producers.

        Specified by:
        getProducerFactory in interface BeanManager
        Type Parameters:
        X - the declaring type
        Parameters:
        field - the field to create the producer factory for
        declaringBean - the bean declaring the producer. May be null if the producer is static or the declaring object is non-contextual
        Returns:
        the producer factory for the field
      • getProducerFactory

        public <X> MethodProducerFactory<X> getProducerFactory​(AnnotatedMethod<? super X> method,
                                                               Bean<X> declaringBean)
        Description copied from interface: BeanManager

        An implementation of ProducerFactory that provides container created Producer instances for the given method.

        This factory can be wrapped to add behavior to container created producers.

        Specified by:
        getProducerFactory in interface BeanManager
        Type Parameters:
        X - bean type
        Parameters:
        method - the method to create the producer factory for
        declaringBean - the bean declaring the producer. May be null if the producer is static or the declaring object is non-contextual
        Returns:
        the producer factory for the method
      • createInjectionTargetBuilder

        public <T> org.jboss.weld.manager.api.WeldInjectionTargetBuilder<T> createInjectionTargetBuilder​(AnnotatedType<T> type)
        Specified by:
        createInjectionTargetBuilder in interface org.jboss.weld.manager.api.WeldManager
      • createInstance

        public WeldInstance<Object> createInstance()
        Description copied from interface: BeanManager
        Obtains an Instance object to access to beans instances. The returned Instance object can only access instances of beans that are available for injection in the module or library containing the class into which the BeanManager was injected or the Java EE component from whose JNDI environment namespace the BeanManager was obtained, according to the rules of typesafe resolution. Note that when called during invocation of an AfterBeanDiscovery event observer, the Instance returned by this method will only give access to instances of beans discovered by the container before the AfterBeanDiscovery event is fired. Instances of dependent scoped beans obtained with this Instance must be explicitly destroyed by calling Instance.destroy(Object) If no qualifier is passed to Instance.select(java.lang.annotation.Annotation...) method, the @Default qualifier is assumed.
        Specified by:
        createInstance in interface BeanManager
        Returns:
        an Instance object to request beans instances
      • unwrap

        public BeanManagerImpl unwrap()
        Specified by:
        unwrap in interface org.jboss.weld.manager.api.WeldManager
      • fireRequestContextInitialized

        public void fireRequestContextInitialized​(Object payload)
      • fireRequestContextBeforeDestroyed

        public void fireRequestContextBeforeDestroyed​(Object payload)
      • fireRequestContextDestroyed

        public void fireRequestContextDestroyed​(Object payload)
      • addValidationFailureCallback

        public void addValidationFailureCallback​(BiConsumer<Exception,​org.jboss.weld.bootstrap.api.Environment> callback)
      • validationFailed

        public void validationFailed​(Exception failure,
                                     org.jboss.weld.bootstrap.api.Environment environment)
      • getScopes

        public Collection<Class<? extends Annotation>> getScopes()
        Specified by:
        getScopes in interface org.jboss.weld.manager.api.WeldManager