Uploaded image for project: 'Karaf'
  1. Karaf
  2. KARAF-571

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

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.0.0, 2.2.0
    • 4.1.0
    • karaf
    • None
    • Windows Java 1.6 update 24

    Description

      With karaf 2.0.0 and our bundles, we can have the following error (rarely) :
      java.io.IOException: URL
      [mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.3.0-fuse-00-00/xml/features]
      could not be resolved. :
      mvn:org.apache.servicemix.nmr/apache-servicemix-nmr/1.3.0-fuse-00-00/xml/features
      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.

      Attachments

        Issue Links

          Activity

            People

              ggrzybek Grzegorz Grzybek
              hervbarr Hervé Barrault
              Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: