[
https://issues.apache.org/jira/browse/OWB-1040?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14519451#comment-14519451
]
Antonin Stefanutti edited comment on OWB-1040 at 4/29/15 2:41 PM:
------------------------------------------------------------------
Hi Reinhard,
Indeed, you're right about the bean scanning order inter-dependency in the
current code. I'll change that.
However, for a single discovered bean type, OWB calls the observer methods in a
different sequence than expected.
For example, the sequence for the {{EventProducingRoute}} bean is:
{code}
ProcessBeanAttributes<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
{code}
While from the specification, the {{ProcessInjectionPoint}} event must be fired
before the {{ProcessBeanAttributes}}, as defined in
http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#bean_discovery_steps.
was (Author: antonin.stefanutti):
Hi Reinhard,
Indeed, you're right about the bean scanning order inter-dependency in the
current code. I'll change that.
However, for a single discovered bean type, OWB calls the observer methods in a
different sequence than expected.
For example, the sequence for the {{EventProducingRoute}} bean is:
{code}
ProcessBeanAttributes<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
ProcessInjectionPoint<?>:class org.apache.camel.cdi.se.bean.EventProducingRoute
{code}
While from the specification, the {{ProcessInjectionPoint}} event must be fired
before the {{ProcessBeanAttributes}}.
> Lifecycle events fired during bean discovery do not follow specification
> sequence
> ---------------------------------------------------------------------------------
>
> Key: OWB-1040
> URL: https://issues.apache.org/jira/browse/OWB-1040
> Project: OpenWebBeans
> Issue Type: Bug
> Components: Lifecycle
> Affects Versions: 1.5.0
> Reporter: Antonin Stefanutti
> Assignee: Reinhard Sandtner
> Priority: Critical
>
> The lifecycle events, like {{ProcessInjectionPoint}} and
> {{ProcessBeanAttributes}} are not fired according to the sequence specified
> in the [Bean
> discovery|http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#bean_discovery_steps]
> section of the specification.
> Besides, the {{BeanAttributes}} set with the {{ProcessBeanAttributes}} event
> are accessed directly which contradicts the [{{ProcessBeanAttributes}}
> event|http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#process_bean_attributes]
> specification:
> {quote}
> Any observer of this event is permitted to wrap and/or replace the
> BeanAttributes. The container must use the final value of this property,
> after all observers have been called, to manage instances of the bean.
> Changes to BeanAttributes are not propagated to the annotated type from which
> the bean definition was created.
> {quote}
> Failing test can be found here:
> https://github.com/astefanutti/camel-cdi/blob/a9e94607beaee546f76b7f6e70b9652bf8468d77/envs/se/src/test/java/org/apache/camel/cdi/se/EventEndpointTest.java
> The following exception is thrown when executed with OWB (not systematically
> though maybe due to multi-threading):
> {code}
> org.apache.webbeans.exception.WebBeansDeploymentException:
> javax.enterprise.inject.UnsatisfiedResolutionException: Api type
> [org.apache.camel.cdi.CdiEventEndpoint] is not found with the qualifiers
> Qualifiers: [@org.apache.camel.cdi.se.qualifier.BarQualifier()]
> for injection into Field Injection Point, field name :
> barQualifierCdiEventEndpoint, Bean Owner : [EventConsumingRoute,
> WebBeansType:MANAGED, Name:null, API
> Types:[org.apache.camel.builder.RouteBuilder,org.apache.camel.builder.BuilderSupport,org.apache.camel.cdi.se.bean.EventConsumingRoute,java.lang.Object,org.apache.camel.RoutesBuilder],
> Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]]
> {code}
> This is not supposed to happen as the missing qualifiers are dynamically
> added in the Camel CDI extension here:
> https://github.com/astefanutti/camel-cdi/blob/a9e94607beaee546f76b7f6e70b9652bf8468d77/impl/src/main/java/org/apache/camel/cdi/CdiCamelExtension.java#L118.
> The problem is that OWB calls the observer methods in a different sequence
> than expected:
> {code}
> ProcessBeanAttributes<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessBeanAttributes<?>:class
> org.apache.camel.cdi.se.EventEndpointTest$EventObserver
> ProcessBeanAttributes<?>:class org.apache.camel.cdi.CdiCamelFactory$1
> ProcessBeanAttributes<?>:class org.apache.camel.cdi.CdiEventComponent
> ProcessBeanAttributes<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessBeanAttributes<?>:class org.apache.camel.cdi.se.EventEndpointTest
> ProcessBeanAttributes<?>:class org.apache.camel.cdi.CdiCamelFactory
> ProcessBeanAttributes<?>:interface org.apache.camel.Endpoint
> ProcessBeanAttributes<T>:interface org.apache.camel.Endpoint
> BeanAttributes.getQualifiers()
> ProcessBeanAttributes<?>:class org.apache.camel.component.mock.MockEndpoint
> ProcessBeanAttributes<T>:class org.apache.camel.component.mock.MockEndpoint
> BeanAttributes.getQualifiers()
> ProcessBeanAttributes<?>:class org.apache.camel.component.mock.MockEndpoint
> ProcessBeanAttributes<T>:class org.apache.camel.component.mock.MockEndpoint
> BeanAttributes.getQualifiers()
> ProcessBeanAttributes<?>:class org.apache.camel.component.mock.MockEndpoint
> ProcessBeanAttributes<T>:class org.apache.camel.component.mock.MockEndpoint
> BeanAttributes.getQualifiers()
> ProcessBeanAttributes<?>:interface org.apache.camel.TypeConverter
> ProcessBeanAttributes<?>:CdiEventEndpoint<T extends class java.lang.Object>
> ProcessBeanAttributes<T>:CdiEventEndpoint<T extends class java.lang.Object>
> BeanAttributes.getQualifiers()
> ProcessBeanAttributes<?>:interface org.apache.camel.ProducerTemplate
> BeanAttributes.getQualifiers()
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventConsumingRoute
> {code}
> For example, the sequence for the {{EventProducingRoute}} bean is:
> {code}
> ProcessBeanAttributes<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> ProcessInjectionPoint<?>:class
> org.apache.camel.cdi.se.bean.EventProducingRoute
> {code}
> While from the specification, the {{ProcessInjectionPoint}} event must be
> fired before the {{ProcessBeanAttributes}}. Note that this sequence differs
> from one run to another.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)