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 <ephemeris.lap...@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.