You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by Ephemeris Lappis <ep...@gmail.com> on 2022/08/09 13:54:32 UTC

Karaf feature / Configuration files installed after bundles start

Hello.

It seems that bundles that come from an installed feature are started
before the configuration file is installed.y

My feature example XML :
<features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
name="my-test-26-karaf-2-routes">
    <feature name="my-test-26-karaf-2-routes" description="karaf-test
:: Camel" version="0.0.1.SNAPSHOT">
        <details>karaf-test :: Camel routes</details>
        <configfile
finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
        <feature version="2.25.4">camel-csv</feature>
        <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
        <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
    </feature>
</features>

When I install the feature using : repo-add -i
mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features

My camel bundle fails because it starts before the configuration file
is not installed yet. See the logs :
2022-08-09T15:47:08,903 | INFO  | pipe-repo-add -i
mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Adding features:
my-test-26-karaf-2-routes/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Changes to perform:
2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   Region: root
2022-08-09T15:47:09,007 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |     Bundles to install:
2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |       mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |       mvn:org.apache.camel/camel-csv/2.25.4
2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |       mvn:org.apache.commons/commons-csv/1.6
2022-08-09T15:47:09,012 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Installing bundles:
2022-08-09T15:47:09,013 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
2022-08-09T15:47:09,023 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   mvn:org.apache.camel/camel-csv/2.25.4
2022-08-09T15:47:09,136 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   mvn:org.apache.commons/commons-csv/1.6
2022-08-09T15:47:09,249 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Creating configuration file
C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\/etc/my_test_26_karaf_2_routes.cfg
2022-08-09T15:47:09,263 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Starting bundles:
2022-08-09T15:47:09,264 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   org.apache.commons.csv/1.6.0
2022-08-09T15:47:09,267 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   org.apache.camel.camel-csv/2.25.4
2022-08-09T15:47:09,271 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 |   my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
2022-08-09T15:47:09,310 | WARN  | features-3-thread-1 | BeanRecipe
                  | 89 - org.apache.aries.blueprint.core - 1.10.3 |
Object to be destroyed is not an instance of UnwrapperedBeanHolder,
type: null
2022-08-09T15:47:09,312 | ERROR | features-3-thread-1 |
BlueprintContainerImpl           | 89 -
org.apache.aries.blueprint.core - 1.10.3 | Unable to start container
for blueprint bundle my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
org.osgi.service.blueprint.container.ComponentDefinitionException:
Unable to initialize bean .camelBlueprint.factory.K1-Test
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:593)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:703)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
~[?:?]
at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:338)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:152)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:809)
~[?:?]
at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:1014)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:573)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:417)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:335)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:288)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:284)
~[?:?]
at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:274)
~[?:?]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
~[?:?]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
~[?:?]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
~[?:?]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
~[?:?]
at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
~[?:?]
at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1384)
~[?:?]
at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
~[?:?]
at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
~[?:?]
at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4847) ~[?:?]
at org.apache.felix.framework.Felix.startBundle(Felix.java:2363) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006) ~[?:?]
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992) ~[?:?]
at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160)
~[?:?]
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041)
~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
~[?:?]
at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
~[?:?]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
~[?:1.8.0_242]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
~[?:1.8.0_242]
at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_242]
Caused by: org.apache.camel.RuntimeCamelException:
java.lang.IllegalArgumentException: Property with key
[my.input-folder] not found in properties from text:
file://{{my.input-folder}}
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:457)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
~[?:?]
at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
~[?:?]
at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
~[?:?]
at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[?:1.8.0_242]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_242]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
~[?:?]
... 38 more
Caused by: java.lang.IllegalArgumentException: Property with key
[my.input-folder] not found in properties from text:
file://{{my.input-folder}}
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271)
~[?:?]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157)
~[?:?]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116)
~[?:?]
at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100)
~[?:?]
at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63)
~[?:?]
at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235)
~[?:?]
at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178)
~[?:?]
at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2546)
~[?:?]
at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:737)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:455)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
~[?:?]
at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
~[?:?]
at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
~[?:?]
at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
~[?:?]
at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
~[?:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[?:1.8.0_242]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[?:1.8.0_242]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
~[?:?]
at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
~[?:?]
... 38 more
2022-08-09T15:47:09,351 | INFO  | features-3-thread-1 |
FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
- 4.4.1 | Done.
2022-08-09T15:47:10,744 | INFO  |
fileinstall-C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc |
fileinstall                      | 17 - org.apache.felix.fileinstall -
3.7.4 | Creating configuration {my_test_26_karaf_2_routes} from
C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc\my_test_26_karaf_2_routes.cfg

Is it a bug ?
If this is not a bug, how can we set the configuration file such a way
it's installed before the bundles start ?

Thanks for your help.

Regards.

Re: Karaf feature / Configuration files installed after bundles start

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi

Yes, the features service is caching the feature already installed (in
order to speedup startup, etc). If you change a feature (without
changing the version), then you have to clean the data folder.

Regards
JB

On Thu, Aug 11, 2022 at 11:55 AM Ephemeris Lappis
<ep...@gmail.com> wrote:
>
> Hello.
>
> Because I wanted to test my features on a clean, newly installed
> Karaf, I've cleaned up the cache, logs, tmp, and so on.
> And after that, the configuration file is now installed, and the
> configuration created, before my bundles are started, as expected as
> "prerequisite", such a way that my Camel routes are started when the
> bundles are installed.
>
> I had checked my features definition after refreshing the repo, using
> feature:info, and they seemed to be up to date, but their deployment
> plan was probably not, and repeated "feature:install" led again and
> again to failing routes...
>
> Is there some cached information about features that could make my
> changes useless until a full cleaning ?
>
> Thanks again for your help.
>
> Regards.
>
>
>
> Le mar. 9 août 2022 à 18:31, Jean-Baptiste Onofré <jb...@nanthrax.net> a écrit :
> >
> > Hi,
> >
> > It's not a bug for two reasons:
> >
> > 1. If you absolutely need the config first, you can define a feature
> > with the configuration and use prerequisite=true
> > 2. Generally speaking a bundle should be able to deal with
> > configuration update (basically a ManagedService instead of retrieving
> > config service directly)
> >
> > Regards
> > JB
> >
> > On Tue, Aug 9, 2022 at 3:54 PM Ephemeris Lappis
> > <ep...@gmail.com> wrote:
> > >
> > > Hello.
> > >
> > > It seems that bundles that come from an installed feature are started
> > > before the configuration file is installed.y
> > >
> > > My feature example XML :
> > > <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
> > > name="my-test-26-karaf-2-routes">
> > >     <feature name="my-test-26-karaf-2-routes" description="karaf-test
> > > :: Camel" version="0.0.1.SNAPSHOT">
> > >         <details>karaf-test :: Camel routes</details>
> > >         <configfile
> > > finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
> > >         <feature version="2.25.4">camel-csv</feature>
> > >         <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
> > >         <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
> > >     </feature>
> > > </features>
> > >
> > > When I install the feature using : repo-add -i
> > > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features
> > >
> > > My camel bundle fails because it starts before the configuration file
> > > is not installed yet. See the logs :
> > > 2022-08-09T15:47:08,903 | INFO  | pipe-repo-add -i
> > > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Adding features:
> > > my-test-26-karaf-2-routes/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
> > > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Changes to perform:
> > > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   Region: root
> > > 2022-08-09T15:47:09,007 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |     Bundles to install:
> > > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |       mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |       mvn:org.apache.camel/camel-csv/2.25.4
> > > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |       mvn:org.apache.commons/commons-csv/1.6
> > > 2022-08-09T15:47:09,012 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Installing bundles:
> > > 2022-08-09T15:47:09,013 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > > 2022-08-09T15:47:09,023 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   mvn:org.apache.camel/camel-csv/2.25.4
> > > 2022-08-09T15:47:09,136 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   mvn:org.apache.commons/commons-csv/1.6
> > > 2022-08-09T15:47:09,249 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Creating configuration file
> > > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\/etc/my_test_26_karaf_2_routes.cfg
> > > 2022-08-09T15:47:09,263 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Starting bundles:
> > > 2022-08-09T15:47:09,264 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   org.apache.commons.csv/1.6.0
> > > 2022-08-09T15:47:09,267 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   org.apache.camel.camel-csv/2.25.4
> > > 2022-08-09T15:47:09,271 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 |   my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > > 2022-08-09T15:47:09,310 | WARN  | features-3-thread-1 | BeanRecipe
> > >                   | 89 - org.apache.aries.blueprint.core - 1.10.3 |
> > > Object to be destroyed is not an instance of UnwrapperedBeanHolder,
> > > type: null
> > > 2022-08-09T15:47:09,312 | ERROR | features-3-thread-1 |
> > > BlueprintContainerImpl           | 89 -
> > > org.apache.aries.blueprint.core - 1.10.3 | Unable to start container
> > > for blueprint bundle my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > > org.osgi.service.blueprint.container.ComponentDefinitionException:
> > > Unable to initialize bean .camelBlueprint.factory.K1-Test
> > > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:593)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:703)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
> > > ~[?:?]
> > > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > > at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:338)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:152)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:809)
> > > ~[?:?]
> > > at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:1014)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:573)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:417)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:335)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:288)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:284)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:274)
> > > ~[?:?]
> > > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
> > > ~[?:?]
> > > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
> > > ~[?:?]
> > > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
> > > ~[?:?]
> > > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
> > > ~[?:?]
> > > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
> > > ~[?:?]
> > > at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1384)
> > > ~[?:?]
> > > at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
> > > ~[?:?]
> > > at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
> > > ~[?:?]
> > > at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4847) ~[?:?]
> > > at org.apache.felix.framework.Felix.startBundle(Felix.java:2363) ~[?:?]
> > > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006) ~[?:?]
> > > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992) ~[?:?]
> > > at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
> > > ~[?:?]
> > > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160)
> > > ~[?:?]
> > > at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041)
> > > ~[?:?]
> > > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
> > > ~[?:?]
> > > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
> > > ~[?:?]
> > > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > > ~[?:1.8.0_242]
> > > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > > ~[?:1.8.0_242]
> > > at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_242]
> > > Caused by: org.apache.camel.RuntimeCamelException:
> > > java.lang.IllegalArgumentException: Property with key
> > > [my.input-folder] not found in properties from text:
> > > file://{{my.input-folder}}
> > > at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:457)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > > ~[?:?]
> > > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > > ~[?:?]
> > > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > > ~[?:?]
> > > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > > ~[?:?]
> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > > ~[?:1.8.0_242]
> > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > > ~[?:1.8.0_242]
> > > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > > ~[?:?]
> > > ... 38 more
> > > Caused by: java.lang.IllegalArgumentException: Property with key
> > > [my.input-folder] not found in properties from text:
> > > file://{{my.input-folder}}
> > > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235)
> > > ~[?:?]
> > > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178)
> > > ~[?:?]
> > > at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2546)
> > > ~[?:?]
> > > at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:737)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:455)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > > ~[?:?]
> > > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > > ~[?:?]
> > > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > > ~[?:?]
> > > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > > ~[?:?]
> > > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > > ~[?:?]
> > > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > > ~[?:1.8.0_242]
> > > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > > ~[?:1.8.0_242]
> > > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > > ~[?:?]
> > > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > > ~[?:?]
> > > ... 38 more
> > > 2022-08-09T15:47:09,351 | INFO  | features-3-thread-1 |
> > > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > > - 4.4.1 | Done.
> > > 2022-08-09T15:47:10,744 | INFO  |
> > > fileinstall-C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc |
> > > fileinstall                      | 17 - org.apache.felix.fileinstall -
> > > 3.7.4 | Creating configuration {my_test_26_karaf_2_routes} from
> > > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc\my_test_26_karaf_2_routes.cfg
> > >
> > > Is it a bug ?
> > > If this is not a bug, how can we set the configuration file such a way
> > > it's installed before the bundles start ?
> > >
> > > Thanks for your help.
> > >
> > > Regards.

Re: Karaf feature / Configuration files installed after bundles start

Posted by Ephemeris Lappis <ep...@gmail.com>.
Hello.

Because I wanted to test my features on a clean, newly installed
Karaf, I've cleaned up the cache, logs, tmp, and so on.
And after that, the configuration file is now installed, and the
configuration created, before my bundles are started, as expected as
"prerequisite", such a way that my Camel routes are started when the
bundles are installed.

I had checked my features definition after refreshing the repo, using
feature:info, and they seemed to be up to date, but their deployment
plan was probably not, and repeated "feature:install" led again and
again to failing routes...

Is there some cached information about features that could make my
changes useless until a full cleaning ?

Thanks again for your help.

Regards.



Le mar. 9 août 2022 à 18:31, Jean-Baptiste Onofré <jb...@nanthrax.net> a écrit :
>
> Hi,
>
> It's not a bug for two reasons:
>
> 1. If you absolutely need the config first, you can define a feature
> with the configuration and use prerequisite=true
> 2. Generally speaking a bundle should be able to deal with
> configuration update (basically a ManagedService instead of retrieving
> config service directly)
>
> Regards
> JB
>
> On Tue, Aug 9, 2022 at 3:54 PM Ephemeris Lappis
> <ep...@gmail.com> wrote:
> >
> > Hello.
> >
> > It seems that bundles that come from an installed feature are started
> > before the configuration file is installed.y
> >
> > My feature example XML :
> > <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
> > name="my-test-26-karaf-2-routes">
> >     <feature name="my-test-26-karaf-2-routes" description="karaf-test
> > :: Camel" version="0.0.1.SNAPSHOT">
> >         <details>karaf-test :: Camel routes</details>
> >         <configfile
> > finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
> >         <feature version="2.25.4">camel-csv</feature>
> >         <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
> >         <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
> >     </feature>
> > </features>
> >
> > When I install the feature using : repo-add -i
> > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features
> >
> > My camel bundle fails because it starts before the configuration file
> > is not installed yet. See the logs :
> > 2022-08-09T15:47:08,903 | INFO  | pipe-repo-add -i
> > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Adding features:
> > my-test-26-karaf-2-routes/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
> > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Changes to perform:
> > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   Region: root
> > 2022-08-09T15:47:09,007 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |     Bundles to install:
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:org.apache.camel/camel-csv/2.25.4
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:org.apache.commons/commons-csv/1.6
> > 2022-08-09T15:47:09,012 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Installing bundles:
> > 2022-08-09T15:47:09,013 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > 2022-08-09T15:47:09,023 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:org.apache.camel/camel-csv/2.25.4
> > 2022-08-09T15:47:09,136 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:org.apache.commons/commons-csv/1.6
> > 2022-08-09T15:47:09,249 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Creating configuration file
> > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\/etc/my_test_26_karaf_2_routes.cfg
> > 2022-08-09T15:47:09,263 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Starting bundles:
> > 2022-08-09T15:47:09,264 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   org.apache.commons.csv/1.6.0
> > 2022-08-09T15:47:09,267 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   org.apache.camel.camel-csv/2.25.4
> > 2022-08-09T15:47:09,271 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > 2022-08-09T15:47:09,310 | WARN  | features-3-thread-1 | BeanRecipe
> >                   | 89 - org.apache.aries.blueprint.core - 1.10.3 |
> > Object to be destroyed is not an instance of UnwrapperedBeanHolder,
> > type: null
> > 2022-08-09T15:47:09,312 | ERROR | features-3-thread-1 |
> > BlueprintContainerImpl           | 89 -
> > org.apache.aries.blueprint.core - 1.10.3 | Unable to start container
> > for blueprint bundle my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > org.osgi.service.blueprint.container.ComponentDefinitionException:
> > Unable to initialize bean .camelBlueprint.factory.K1-Test
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:593)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:703)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
> > ~[?:?]
> > at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
> > ~[?:?]
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:338)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:152)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:809)
> > ~[?:?]
> > at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:1014)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:573)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:417)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:335)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:288)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:284)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:274)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
> > ~[?:?]
> > at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1384)
> > ~[?:?]
> > at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
> > ~[?:?]
> > at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
> > ~[?:?]
> > at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4847) ~[?:?]
> > at org.apache.felix.framework.Felix.startBundle(Felix.java:2363) ~[?:?]
> > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006) ~[?:?]
> > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992) ~[?:?]
> > at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
> > ~[?:?]
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > ~[?:1.8.0_242]
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > ~[?:1.8.0_242]
> > at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_242]
> > Caused by: org.apache.camel.RuntimeCamelException:
> > java.lang.IllegalArgumentException: Property with key
> > [my.input-folder] not found in properties from text:
> > file://{{my.input-folder}}
> > at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:457)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > ~[?:?]
> > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > ~[?:?]
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > ~[?:1.8.0_242]
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > ~[?:1.8.0_242]
> > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > ~[?:?]
> > ... 38 more
> > Caused by: java.lang.IllegalArgumentException: Property with key
> > [my.input-folder] not found in properties from text:
> > file://{{my.input-folder}}
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63)
> > ~[?:?]
> > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235)
> > ~[?:?]
> > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178)
> > ~[?:?]
> > at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2546)
> > ~[?:?]
> > at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:737)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:455)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > ~[?:?]
> > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > ~[?:?]
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > ~[?:1.8.0_242]
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > ~[?:1.8.0_242]
> > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > ~[?:?]
> > ... 38 more
> > 2022-08-09T15:47:09,351 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Done.
> > 2022-08-09T15:47:10,744 | INFO  |
> > fileinstall-C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc |
> > fileinstall                      | 17 - org.apache.felix.fileinstall -
> > 3.7.4 | Creating configuration {my_test_26_karaf_2_routes} from
> > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc\my_test_26_karaf_2_routes.cfg
> >
> > Is it a bug ?
> > If this is not a bug, how can we set the configuration file such a way
> > it's installed before the bundles start ?
> >
> > Thanks for your help.
> >
> > Regards.

Re: Karaf feature / Configuration files installed after bundles start

Posted by Ephemeris Lappis <ep...@gmail.com>.
Hello.

I've tried to separate my feature in two features, with a prerequisite
for the configuration file, but I have still an issue.

The generated feature is :
<features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
name="my-test-26-karaf-2-routes">
    <feature name="my-test-26-karaf-2-routes-cfg" version="0.0.1.SNAPSHOT">
        <configfile
finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
    </feature>
    <feature name="my-test-26-karaf-2-routes" description="karaf-test
:: Camel" version="0.0.1.SNAPSHOT">
        <details>karaf-test :: Camel routes</details>
        <feature version="2.25.4">camel-csv</feature>
        <feature version="2.25.4">camel-groovy</feature>
        <feature version="0.0.1-SNAPSHOT"
prerequisite="true">my-test-26-karaf-2-routes-cfg</feature>
        <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
        <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
    </feature>
</features>

When I install my-test-26-karaf-2-routes, my camel routes fail because
the configuration file is not deployed yet.

I've tried with option "-t" to see the simulation, and I have a
strange message about some loop :
"Error executing command: Deployment aborted due to loop in missing
prerequisites: [my-test-26-karaf-2-routes-cfg/0.0.1-SNAPSHOT]"

What's wrong with that ?

I agree that generally bundles should work when their configuration
changes, reloading them.
But in my case, camel endpoints need an first initial external
configuration to be set before starting : "<from
uri="file://{{my.input-folder}}" />" won't work if "my.input-folder"
is not resolved...

Thanks for your help.

Regards.

Le mar. 9 août 2022 à 18:31, Jean-Baptiste Onofré <jb...@nanthrax.net> a écrit :
>
> Hi,
>
> It's not a bug for two reasons:
>
> 1. If you absolutely need the config first, you can define a feature
> with the configuration and use prerequisite=true
> 2. Generally speaking a bundle should be able to deal with
> configuration update (basically a ManagedService instead of retrieving
> config service directly)
>
> Regards
> JB
>
> On Tue, Aug 9, 2022 at 3:54 PM Ephemeris Lappis
> <ep...@gmail.com> wrote:
> >
> > Hello.
> >
> > It seems that bundles that come from an installed feature are started
> > before the configuration file is installed.y
> >
> > My feature example XML :
> > <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
> > name="my-test-26-karaf-2-routes">
> >     <feature name="my-test-26-karaf-2-routes" description="karaf-test
> > :: Camel" version="0.0.1.SNAPSHOT">
> >         <details>karaf-test :: Camel routes</details>
> >         <configfile
> > finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
> >         <feature version="2.25.4">camel-csv</feature>
> >         <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
> >         <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
> >     </feature>
> > </features>
> >
> > When I install the feature using : repo-add -i
> > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features
> >
> > My camel bundle fails because it starts before the configuration file
> > is not installed yet. See the logs :
> > 2022-08-09T15:47:08,903 | INFO  | pipe-repo-add -i
> > mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Adding features:
> > my-test-26-karaf-2-routes/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
> > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Changes to perform:
> > 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   Region: root
> > 2022-08-09T15:47:09,007 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |     Bundles to install:
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:org.apache.camel/camel-csv/2.25.4
> > 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |       mvn:org.apache.commons/commons-csv/1.6
> > 2022-08-09T15:47:09,012 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Installing bundles:
> > 2022-08-09T15:47:09,013 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> > 2022-08-09T15:47:09,023 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:org.apache.camel/camel-csv/2.25.4
> > 2022-08-09T15:47:09,136 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   mvn:org.apache.commons/commons-csv/1.6
> > 2022-08-09T15:47:09,249 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Creating configuration file
> > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\/etc/my_test_26_karaf_2_routes.cfg
> > 2022-08-09T15:47:09,263 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Starting bundles:
> > 2022-08-09T15:47:09,264 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   org.apache.commons.csv/1.6.0
> > 2022-08-09T15:47:09,267 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   org.apache.camel.camel-csv/2.25.4
> > 2022-08-09T15:47:09,271 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 |   my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > 2022-08-09T15:47:09,310 | WARN  | features-3-thread-1 | BeanRecipe
> >                   | 89 - org.apache.aries.blueprint.core - 1.10.3 |
> > Object to be destroyed is not an instance of UnwrapperedBeanHolder,
> > type: null
> > 2022-08-09T15:47:09,312 | ERROR | features-3-thread-1 |
> > BlueprintContainerImpl           | 89 -
> > org.apache.aries.blueprint.core - 1.10.3 | Unable to start container
> > for blueprint bundle my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> > org.osgi.service.blueprint.container.ComponentDefinitionException:
> > Unable to initialize bean .camelBlueprint.factory.K1-Test
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:593)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:703)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
> > ~[?:?]
> > at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
> > ~[?:?]
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:338)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:152)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:809)
> > ~[?:?]
> > at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:1014)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:573)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:417)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:335)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:288)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:284)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:274)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
> > ~[?:?]
> > at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
> > ~[?:?]
> > at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1384)
> > ~[?:?]
> > at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
> > ~[?:?]
> > at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
> > ~[?:?]
> > at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4847) ~[?:?]
> > at org.apache.felix.framework.Felix.startBundle(Felix.java:2363) ~[?:?]
> > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006) ~[?:?]
> > at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992) ~[?:?]
> > at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
> > ~[?:?]
> > at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
> > ~[?:?]
> > at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> > at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> > ~[?:1.8.0_242]
> > at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> > ~[?:1.8.0_242]
> > at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_242]
> > Caused by: org.apache.camel.RuntimeCamelException:
> > java.lang.IllegalArgumentException: Property with key
> > [my.input-folder] not found in properties from text:
> > file://{{my.input-folder}}
> > at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:457)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > ~[?:?]
> > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > ~[?:?]
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > ~[?:1.8.0_242]
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > ~[?:1.8.0_242]
> > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > ~[?:?]
> > ... 38 more
> > Caused by: java.lang.IllegalArgumentException: Property with key
> > [my.input-folder] not found in properties from text:
> > file://{{my.input-folder}}
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100)
> > ~[?:?]
> > at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63)
> > ~[?:?]
> > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235)
> > ~[?:?]
> > at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178)
> > ~[?:?]
> > at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2546)
> > ~[?:?]
> > at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:737)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:455)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> > ~[?:?]
> > at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> > ~[?:?]
> > at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> > ~[?:?]
> > at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> > ~[?:?]
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> > ~[?:1.8.0_242]
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> > ~[?:1.8.0_242]
> > at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> > at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> > ~[?:?]
> > at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> > ~[?:?]
> > ... 38 more
> > 2022-08-09T15:47:09,351 | INFO  | features-3-thread-1 |
> > FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> > - 4.4.1 | Done.
> > 2022-08-09T15:47:10,744 | INFO  |
> > fileinstall-C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc |
> > fileinstall                      | 17 - org.apache.felix.fileinstall -
> > 3.7.4 | Creating configuration {my_test_26_karaf_2_routes} from
> > C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc\my_test_26_karaf_2_routes.cfg
> >
> > Is it a bug ?
> > If this is not a bug, how can we set the configuration file such a way
> > it's installed before the bundles start ?
> >
> > Thanks for your help.
> >
> > Regards.

Re: Karaf feature / Configuration files installed after bundles start

Posted by Jean-Baptiste Onofré <jb...@nanthrax.net>.
Hi,

It's not a bug for two reasons:

1. If you absolutely need the config first, you can define a feature
with the configuration and use prerequisite=true
2. Generally speaking a bundle should be able to deal with
configuration update (basically a ManagedService instead of retrieving
config service directly)

Regards
JB

On Tue, Aug 9, 2022 at 3:54 PM Ephemeris Lappis
<ep...@gmail.com> wrote:
>
> Hello.
>
> It seems that bundles that come from an installed feature are started
> before the configuration file is installed.y
>
> My feature example XML :
> <features xmlns="http://karaf.apache.org/xmlns/features/v1.6.0"
> name="my-test-26-karaf-2-routes">
>     <feature name="my-test-26-karaf-2-routes" description="karaf-test
> :: Camel" version="0.0.1.SNAPSHOT">
>         <details>karaf-test :: Camel routes</details>
>         <configfile
> finalname="/etc/my_test_26_karaf_2_routes.cfg">mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/cfg/configuration</configfile>
>         <feature version="2.25.4">camel-csv</feature>
>         <bundle>mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT</bundle>
>         <bundle>mvn:my.tests/my-test-26-karaf-1-api/0.0.1-SNAPSHOT</bundle>
>     </feature>
> </features>
>
> When I install the feature using : repo-add -i
> mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features
>
> My camel bundle fails because it starts before the configuration file
> is not installed yet. See the logs :
> 2022-08-09T15:47:08,903 | INFO  | pipe-repo-add -i
> mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT/XML/features |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Adding features:
> my-test-26-karaf-2-routes/[0.0.1.SNAPSHOT,0.0.1.SNAPSHOT]
> 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Changes to perform:
> 2022-08-09T15:47:09,005 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   Region: root
> 2022-08-09T15:47:09,007 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |     Bundles to install:
> 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |       mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |       mvn:org.apache.camel/camel-csv/2.25.4
> 2022-08-09T15:47:09,010 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |       mvn:org.apache.commons/commons-csv/1.6
> 2022-08-09T15:47:09,012 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Installing bundles:
> 2022-08-09T15:47:09,013 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   mvn:my.tests/my-test-26-karaf-2-routes/0.0.1-SNAPSHOT
> 2022-08-09T15:47:09,023 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   mvn:org.apache.camel/camel-csv/2.25.4
> 2022-08-09T15:47:09,136 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   mvn:org.apache.commons/commons-csv/1.6
> 2022-08-09T15:47:09,249 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Creating configuration file
> C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\/etc/my_test_26_karaf_2_routes.cfg
> 2022-08-09T15:47:09,263 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Starting bundles:
> 2022-08-09T15:47:09,264 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   org.apache.commons.csv/1.6.0
> 2022-08-09T15:47:09,267 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   org.apache.camel.camel-csv/2.25.4
> 2022-08-09T15:47:09,271 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 |   my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> 2022-08-09T15:47:09,310 | WARN  | features-3-thread-1 | BeanRecipe
>                   | 89 - org.apache.aries.blueprint.core - 1.10.3 |
> Object to be destroyed is not an instance of UnwrapperedBeanHolder,
> type: null
> 2022-08-09T15:47:09,312 | ERROR | features-3-thread-1 |
> BlueprintContainerImpl           | 89 -
> org.apache.aries.blueprint.core - 1.10.3 | Unable to start container
> for blueprint bundle my-test-26-karaf-2-routes/0.0.1.SNAPSHOT
> org.osgi.service.blueprint.container.ComponentDefinitionException:
> Unable to initialize bean .camelBlueprint.factory.K1-Test
> at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:593)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:703)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:666)
> ~[?:?]
> at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:81)
> ~[?:?]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> at org.apache.aries.blueprint.di.AbstractRecipe.create(AbstractRecipe.java:90)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintRepository.createInstances(BlueprintRepository.java:360)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintRepository.createInstance(BlueprintRepository.java:338)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintRepository.create(BlueprintRepository.java:152)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintContainerImpl.getComponentInstance(BlueprintContainerImpl.java:809)
> ~[?:?]
> at org.apache.camel.blueprint.handler.CamelNamespaceHandler$CamelDependenciesFinder.process(CamelNamespaceHandler.java:1014)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintContainerImpl.processProcessors(BlueprintContainerImpl.java:573)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintContainerImpl.doRun(BlueprintContainerImpl.java:417)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintContainerImpl.run(BlueprintContainerImpl.java:298)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:335)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:288)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintExtender.createContainer(BlueprintExtender.java:284)
> ~[?:?]
> at org.apache.aries.blueprint.container.BlueprintExtender.modifiedBundle(BlueprintExtender.java:274)
> ~[?:?]
> at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:500)
> ~[?:?]
> at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.customizerModified(BundleHookBundleTracker.java:433)
> ~[?:?]
> at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$AbstractTracked.track(BundleHookBundleTracker.java:725)
> ~[?:?]
> at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$Tracked.bundleChanged(BundleHookBundleTracker.java:463)
> ~[?:?]
> at org.apache.aries.util.tracker.hook.BundleHookBundleTracker$BundleEventHook.event(BundleHookBundleTracker.java:422)
> ~[?:?]
> at org.apache.felix.framework.util.SecureAction.invokeBundleEventHook(SecureAction.java:1384)
> ~[?:?]
> at org.apache.felix.framework.EventDispatcher.createWhitelistFromHooks(EventDispatcher.java:730)
> ~[?:?]
> at org.apache.felix.framework.EventDispatcher.fireBundleEvent(EventDispatcher.java:485)
> ~[?:?]
> at org.apache.felix.framework.Felix.fireBundleEvent(Felix.java:4847) ~[?:?]
> at org.apache.felix.framework.Felix.startBundle(Felix.java:2363) ~[?:?]
> at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006) ~[?:?]
> at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992) ~[?:?]
> at org.apache.karaf.features.internal.service.BundleInstallSupportImpl.startBundle(BundleInstallSupportImpl.java:165)
> ~[?:?]
> at org.apache.karaf.features.internal.service.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:1160)
> ~[?:?]
> at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:1041)
> ~[?:?]
> at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1069)
> ~[?:?]
> at org.apache.karaf.features.internal.service.FeaturesServiceImpl.lambda$doProvisionInThread$13(FeaturesServiceImpl.java:1004)
> ~[?:?]
> at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_242]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> ~[?:1.8.0_242]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> ~[?:1.8.0_242]
> at java.lang.Thread.run(Thread.java:748) ~[?:1.8.0_242]
> Caused by: org.apache.camel.RuntimeCamelException:
> java.lang.IllegalArgumentException: Property with key
> [my.input-folder] not found in properties from text:
> file://{{my.input-folder}}
> at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1826)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:457)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> ~[?:?]
> at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> ~[?:?]
> at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> ~[?:?]
> at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> ~[?:?]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:1.8.0_242]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_242]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> ~[?:?]
> ... 38 more
> Caused by: java.lang.IllegalArgumentException: Property with key
> [my.input-folder] not found in properties from text:
> file://{{my.input-folder}}
> at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.getPropertyValue(DefaultPropertiesParser.java:271)
> ~[?:?]
> at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.readProperty(DefaultPropertiesParser.java:157)
> ~[?:?]
> at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.doParse(DefaultPropertiesParser.java:116)
> ~[?:?]
> at org.apache.camel.component.properties.DefaultPropertiesParser$ParsingContext.parse(DefaultPropertiesParser.java:100)
> ~[?:?]
> at org.apache.camel.component.properties.DefaultPropertiesParser.parseUri(DefaultPropertiesParser.java:63)
> ~[?:?]
> at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:235)
> ~[?:?]
> at org.apache.camel.component.properties.PropertiesComponent.parseUri(PropertiesComponent.java:178)
> ~[?:?]
> at org.apache.camel.impl.DefaultCamelContext.resolvePropertyPlaceholders(DefaultCamelContext.java:2546)
> ~[?:?]
> at org.apache.camel.model.ProcessorDefinitionHelper.resolvePropertyPlaceholders(ProcessorDefinitionHelper.java:737)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.initRouteInputs(RouteDefinitionHelper.java:455)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.prepareRouteImp(RouteDefinitionHelper.java:373)
> ~[?:?]
> at org.apache.camel.model.RouteDefinitionHelper.prepareRoute(RouteDefinitionHelper.java:345)
> ~[?:?]
> at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.prepareRoutes(AbstractCamelContextFactoryBean.java:508)
> ~[?:?]
> at org.apache.camel.core.xml.AbstractCamelContextFactoryBean.setupRoutes(AbstractCamelContextFactoryBean.java:482)
> ~[?:?]
> at org.apache.camel.blueprint.CamelContextFactoryBean.afterPropertiesSet(CamelContextFactoryBean.java:355)
> ~[?:?]
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_242]
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> ~[?:1.8.0_242]
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> ~[?:1.8.0_242]
> at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_242]
> at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:337)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:835)
> ~[?:?]
> at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:591)
> ~[?:?]
> ... 38 more
> 2022-08-09T15:47:09,351 | INFO  | features-3-thread-1 |
> FeaturesServiceImpl              | 18 - org.apache.karaf.features.core
> - 4.4.1 | Done.
> 2022-08-09T15:47:10,744 | INFO  |
> fileinstall-C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc |
> fileinstall                      | 17 - org.apache.felix.fileinstall -
> 3.7.4 | Creating configuration {my_test_26_karaf_2_routes} from
> C:\_F_\Programs\Java\Apache\apache-karaf-4.4.1\etc\my_test_26_karaf_2_routes.cfg
>
> Is it a bug ?
> If this is not a bug, how can we set the configuration file such a way
> it's installed before the bundles start ?
>
> Thanks for your help.
>
> Regards.