[ 
https://issues.apache.org/jira/browse/CAMEL-12980?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16739379#comment-16739379
 ] 

Grzegorz Grzybek edited comment on CAMEL-12980 at 1/10/19 1:16 PM:
-------------------------------------------------------------------

I understand the problem... CAMEL-10513 was a big change, but actually not 
against any specification... It's especially true with context using 
{{autoStart="false"}}.

bq. A bundle is in the ACTIVE state when it has been successfully started and 
activated. 

means exactly this - "activated" == "called BundleActivator.start()" which is 
NOT the same as successfully starting Camel Context or *even* creating 
Blueprint Container.

But if we look at blueprint specification:
{quote}
*121.3.2.2 Failure*
If at any time there is a failure, the Blueprint Container must:
# State = FAILURE
# Unregister the Blueprint Container service.
# Destroy the Blueprint Container.
# Wait for the Blueprint bundle to be stopped.
{quote}

Which may be a reason to call back from failed Camel context/route to their 
blueprint container.

{{org.osgi.service.blueprint.container.BlueprintContainer}} doesn't have any 
such callback methods, but 
{{org.apache.aries.blueprint.services.ExtendedBlueprintContainer}} may be 
called to grab {{org.osgi.service.blueprint.container.BlueprintListener}} to 
send Failure event like this:
{code:java}
ExtendedBlueprintContainer.getEventDispatcher().blueprintEvent(new 
BlueprintEvent(BlueprintEvent.FAILURE, getBundle(), getExtenderBundle(), new 
Throwable("Camel context says: oops"));
{code}

Then Karaf would catch such event using 
{{org.apache.karaf.bundle.state.blueprint.internal.BlueprintStateService}} and 
alter output of {{bundle:list}}.

I think it's doable.


was (Author: gzres):
I understand the problem... CAMEL-10513 was a big change, but actually not 
against any specification... It's especially true with context using 
{{autoStart="false"}}.

bq. A bundle is in the ACTIVE state when it has been successfully started and 
activated. 

means exactly this - "activated" == "called BundleActivator.start()" which is 
NOT the same as successfully starting Camel Context or *even* creating 
Blueprint Container.

But if we look at blueprint specification:
{quote}
*121.3.2.2 Failure*
If at any time there is a failure, the Blueprint Container must:
# State = FAILURE
# Unregister the Blueprint Container service.
# Destroy the Blueprint Container.
# Wait for the Blueprint bundle to be stopped.
{quote}

Which may be a reason to call back from failed Camel context/route to their 
blueprint container.

{{org.osgi.service.blueprint.container.BlueprintContainer}} doesn't have any 
such callback methods, but 
{{org.apache.aries.blueprint.services.ExtendedBlueprintContainer}} may be 
called to grab {{org.osgi.service.blueprint.container.BlueprintListener}} to 
send Failure event like this:
{code:java}
                
ExtendedBlueprintContainer.getEventDispatcher().blueprintEvent(new 
BlueprintEvent(BlueprintEvent.FAILURE, getBundle(), getExtenderBundle(), new 
Throwable("Camel context says: oops"));
{code}

Then Karaf would catch such event using 
{{org.apache.karaf.bundle.state.blueprint.internal.BlueprintStateService}} and 
alter output of {{bundle:list}}.

I think it's doable.

> Bundle in 'Active' State but Camel Context not initialized
> ----------------------------------------------------------
>
>                 Key: CAMEL-12980
>                 URL: https://issues.apache.org/jira/browse/CAMEL-12980
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-blueprint
>    Affects Versions: 2.20.1, 2.21.1
>            Reporter: Xilai Dai
>            Assignee: Grzegorz Grzybek
>            Priority: Major
>             Fix For: 3.0.0, 2.24.0
>
>         Attachments: blueprint.xml
>
>
> The camel context can't get initialized when validation of the 
> RouteDefinition failed (e.g. typo in Uri or add an unsupported option in 
> Uri), but when deploy the blueprint, the CamelContext startup and then 
> shutdown, but the bundle status is still 'Active', only a 
> FailedToCreateRouteException ERROR is logged.
> 318 │ Active  │  80 │ 0.0.0                 │ blueprint.xml
> Attached the simple blueprint.xml for reproduce it.
> The expected behaviour is the bundle is in the 'Failure' status in this case.
> The fix proposal from my side is, move the call of "this.maybeStart()" from 
> blueprintEvent() method to the constructor of the BlueprintCamelContext 
> class. then this kind of Route definition error can be processed during the 
> Blueprint "CREATING" phase. Currently, the start() is invoked after Blueprint 
> in "CREATED" phase. (I tested this fix locally and have the expected 
> 'Failure' bundle status) 
> (This issue is found in Camel 2.20.x, 2.21.x, but it may affects also on 
> master branch)



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to