ProcessProducer
Date: 2015-09-11

javax.enterprise.inject.spi

## Interface ProcessProducer<T,X>

- Type Parameters:
    `T` - The bean class of the bean that declares the producer method or field
    `X` - The return type of the producer method or the type of the producer field

      public interface ProcessProducer<T,X>

  The container fires an event of this type for each producer method or field of each enabled bean, including resources.

  Any observer of this event is permitted to wrap and/or replace the `Producer`. The container must use the final value of this property, after all observers have been called, whenever it calls the producer or disposer.

  For example, this observer decorates the `Producer` for the all producer methods and field of type `EntityManager`.

       void decorateEntityManager(@Observes ProcessProducer<?, EntityManager> pp)
       {
          pit.setProducer(decorate(pp.getProducer()));
       }

  If any observer method of a `ProcessProducer` event throws an exception, the exception is treated as a definition error by the container.

  See Also:
    `Producer`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addDefinitionError(java.lang.Throwable t)` Registers a definition error with the container, causing the container to abort deployment after bean discovery is complete.
    `AnnotatedMember<T>` | `getAnnotatedMember()` Returns the `AnnotatedField` representing the producer field or the `AnnotatedMethod` representing the producer method.
    `Producer<X>` | `getProducer()` Returns the `Producer` object that will be used by the container to call the producer method or read the producer field.
    `void` | `setProducer(Producer<X> producer)` Replaces the `Producer` object that will be used by the container to call the producer method or read the producer field.

- - ### Method Detail

    - #### getAnnotatedMember

          AnnotatedMember<T> getAnnotatedMember()

      Returns the `AnnotatedField` representing the producer field or the `AnnotatedMethod` representing the producer method.
      Returns:
        the `AnnotatedMember` representing the producer

    - #### getProducer

          Producer<X> getProducer()

      Returns the `Producer` object that will be used by the container to call the producer method or read the producer field.
      Returns:
        the `Producer` invoker object used by the container

    - #### setProducer

          void setProducer(Producer<X> producer)

      Replaces the `Producer` object that will be used by the container to call the producer method or read the producer field.
      Parameters:
        `producer` - the new `Producer` object to use

    - #### addDefinitionError

          void addDefinitionError(java.lang.Throwable t)

      Registers a definition error with the container, causing the container to abort deployment after bean discovery is complete.
      Parameters:
        `t` - The definition error to register as a `Throwable`