1. Karaf
  2. KARAF-571

Karaf failed to startup due to maven resolution failure on specific cases.


    • Type: Bug Bug
    • Status: Open
    • Priority: Major Major
    • Resolution: Unresolved
    • Affects Version/s: 2.0.0, 2.2.0
    • Fix Version/s: None
    • Component/s: karaf-core, karaf-feature
    • Labels:
    • Environment:

      Windows Java 1.6 update 24


      With karaf 2.0.0 and our bundles, we can have the following error (rarely) :
      java.io.IOException: URL
      could not be resolved. :
      at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:191)
      at org.apache.karaf.features.internal.FeaturesServiceImpl.internalAddRepository(FeaturesServiceImpl.java:168)
      at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeatures(FeaturesServiceImpl.java:704)
      at org.apache.karaf.features.internal.FeaturesServiceImpl.getFeature(FeaturesServiceImpl.java:674)
      at org.apache.karaf.features.internal.FeaturesServiceImpl$1.run(FeaturesServiceImpl.java:751)
      Caused by: java.lang.RuntimeException: URL [mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.3.0-fuse-00-00/xml/features] could not be resolved.
      at org.ops4j.pax.url.mvn.internal.Connection.getInputStream(Connection.java:195)
      at org.apache.karaf.features.internal.RepositoryImpl.load(RepositoryImpl.java:92)
      ... 4 more

      As it is not systematic, we suppose that it is link to initialization of maven configuration.

      I think the startup mechanism is :

      The Bundle OPS4J Pax Url - mvn: (start level 5) starts and allows resolution of mvn protocol (but it is not configured with the dedicated properties file :org.ops4j.pax.url.mvn.cfg).

      The Bundle Apache Felix Configuration Admin Service (start level 10) : offers a service to do the configuration of managed services (the configuration process of mvn will be done here).

      The Bundle Apache Karaf :: Features Core : (start level 30) reads org.apache.karaf.features.cfg for features (using a blueprint property-placeholder)

      But with the configuration in Admin Service is a new Thread so, in some cases the startup of Features Core is done before the Configuration Admin Service has started its job to configure the maven url handler.

      The following description explains how to reproduce the behavior for karaf 2.0.0 and karaf 2.2.0

      For a better understanding, i will explain with the default karaf 2.2.0 distribution (with fix KARAF-547 for windows)

      Put a breakpoint at org.apache.felix.cm.impl.UpdaterThread ( line 67) : begin of the loop to read the queue. [ for ( ;; ) ]
      Start KARAF with the KARAF_DEBUG option to be able to attach debugger.
      Attach quickly (the more difficult step) the debugger to be sure that the thread "Configuration Updater" will be stopped at the beginning. [If you have in the updateTasks list : ManagedService Update: pid=org.ops4j.pax.url.mvn as the first element, you'll see the behavior]

      You'll see the following errors in console :
      [Thread-6] ERROR org.apache.karaf.features.internal.FeaturesServiceImpl - Error installing boot feature config: feature not found
      [Thread-6] ERROR org.apache.karaf.features.internal.FeaturesServiceImpl - Error installing boot feature ssh: feature not found
      [Thread-6] ERROR org.apache.karaf.features.internal.FeaturesServiceImpl - Error installing boot feature management: feature not found

      I try some commands and I have the following answers :
      karaf@root> features:listrepositories
      No repositories available.
      karaf@root> features:listurl
      Loaded URI
      No repository URLs are set.
      karaf@root> features:list
      No features available.

      We found a workaround for this problem :

      MavenSettingsImpl constructor tries to read a maven settings.xml file to pre-configure it (at different locations :
      System.getProperty( "user.home" ) + "/.m2/settings.xml"
      System.getProperty( "maven.home" ) + "/conf/settings.xml"
      System.getenv( "M2_HOME" ) + "/conf/settings.xml" .)

      So, in the bat launcher i set the M2_HOME and i put a well configured settings.xml (corresponding to org.ops4j.pax.url.mvn.cfg content) in the defined directory.


        Jean-Baptiste Onofré made changes -
        Fix Version/s 4.0.0 [ 12316946 ]
        Fix Version/s 3.0.2 [ 12326261 ]
        Jean-Baptiste Onofré made changes -
        Fix Version/s 3.0.2 [ 12326261 ]
        Fix Version/s 3.0.1 [ 12316945 ]
        Andreas Pieber made changes -
        Fix Version/s 3.0.1 [ 12316945 ]
        Jean-Baptiste Onofré made changes -
        Component/s karaf-features [ 12315008 ]
        Jean-Baptiste Onofré made changes -
        Field Original Value New Value
        Fix Version/s 3.1.0 [ 12316946 ]
        Hervé Barrault created issue -


          • Assignee:
            Hervé Barrault
          • Votes:
            0 Vote for this issue
            0 Start watching this issue


            • Created: