You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Peter Gardfjäll (JIRA)" <ji...@apache.org> on 2010/03/10 20:27:27 UTC

[jira] Created: (FELIX-2191) Drop-in deployment of feature descriptor with spring-dm bundles fails

Drop-in deployment of feature descriptor with spring-dm bundles fails
---------------------------------------------------------------------

                 Key: FELIX-2191
                 URL: https://issues.apache.org/jira/browse/FELIX-2191
             Project: Felix
          Issue Type: Bug
          Components: Karaf
    Affects Versions: karaf-1.4.0
         Environment: Windows 7
Java 1.6.0_16
            Reporter: Peter Gardfjäll


Drop-in deployment of a feature descriptor in the deploy/ directory fails when the feature descriptor contains spring-dm 1.2.1 bundles.

Reproduce as follows:

(1) Start a fresh instance of Karaf 1.4.0 (unzip a new distribution and run bin\karaf.bat) 
(2) Copy a feature.xml file with the following contents to the deploy/ directory

<features>
  <feature name="org.osgi.sample.sample.dependencies">
    <bundle>mvn:org.springframework.osgi/spring-osgi-extender/1.2.1</bundle>
    <bundle>mvn:org.springframework.osgi/spring-osgi-core/1.2.1</bundle>
    <bundle>mvn:org.springframework.osgi/spring-osgi-io/1.2.1</bundle>
    <bundle>mvn:org.springframework.osgi/spring-osgi-web/1.2.1</bundle>
  </feature>
</features>

This fails and gives the following error entry in the log:

20:09:20,819 | ERROR | lixDispatchQueue | FeatureDeploymentListener
    | atures.FeatureDeploymentListener  136 | Unable to install
features
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.apache.geronimo.blueprint.container.AbstractServiceReferenceRecipe$JdkProxyFactory$1.invoke(AbstractServiceReferenceRecipe.java:561)
        at $Proxy4.installFeatures(Unknown Source)
        at 
org.apache.felix.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:132)
        at 
org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
        at 
org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
        at 
org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:942)
        at 
org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)
        at 
org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
        at 
org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundle(FeaturesServiceImpl.java:899)
        at 
org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundleList(FeaturesServiceImpl.java:910)
        at 
org.apache.felix.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:296)
        ... 13 more


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (FELIX-2191) Drop-in deployment of feature descriptor with spring-dm bundles fails

Posted by "Peter Gardfjäll (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/jira/browse/FELIX-2191?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12847842#action_12847842 ] 

Peter Gardfjäll commented on FELIX-2191:
----------------------------------------

I did some research into this matter.
Without being familiar with the inner workings of the FeatureServiceImpl class, there seems to be something weird going on which causes the features map to be nulled whenever a feature repository is added/removed. This causes the NPE later on in installFeatures. I made some small changes to prevent the features map from being nulled and apparently that made the NPE go away. I don't know if it's a solution but I thought it might at least provide some guidance to solving this issue. The following is a diff of the changes I introduced against the karaf 1.4.0 branch.

Index: src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
===================================================================
--- src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java	(revision 925639)
+++ src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java	(working copy)
@@ -85,7 +85,7 @@
     private PreferencesService preferences;
     private Set<URI> uris;
     private Map<URI, RepositoryImpl> repositories = new HashMap<URI, RepositoryImpl>();
-    private Map<String, Map<String, Feature>> features;
+    private Map<String, Map<String, Feature>> features = new HashMap<String, Map<String,Feature>>();
     private Map<Feature, Set<Long>> installed = new HashMap<Feature, Set<Long>>();
     private String boot;
     private boolean bootFeaturesInstalled;
@@ -170,7 +170,9 @@
         repo.load();
         repositories.put(uri, repo);
         callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryAdded, false));
-        features = null;
+        LOGGER.info("internalAddRepository: " + uri);
+        Thread.currentThread().dumpStack();
+        features.clear();
         return repo;
         
     }
@@ -185,7 +187,8 @@
     public void internalRemoveRepository(URI uri) {
         Repository repo = repositories.remove(uri);
         callListeners(new RepositoryEvent(repo, RepositoryEvent.EventType.RepositoryRemoved, false));
-        features = null;
+        LOGGER.info("internalRemoveRepository");
+        features.clear();
     }
 
     public Repository[] listRepositories() {
@@ -603,7 +606,7 @@
     }
 
     protected Map<String, Map<String, Feature>> getFeatures() throws Exception {
-        if (features == null) {
+        if (features.isEmpty()) {
         	//the outer map's key is feature name, the inner map's key is feature version       
             Map<String, Map<String, Feature>> map = new HashMap<String, Map<String, Feature>>();
             // Two phase load:
@@ -895,6 +898,7 @@
     }
 
     public Set<Feature> getFeaturesContainingBundle (Bundle bundle) {
+    	LOGGER.info("getFeaturesContainingBundle: this.features: " + this.features);
         Set<Feature> features = new HashSet<Feature>();
         for (Map<String, Feature> featureMap : this.features.values()) {
             for (Feature f : featureMap.values()) {


> Drop-in deployment of feature descriptor with spring-dm bundles fails
> ---------------------------------------------------------------------
>
>                 Key: FELIX-2191
>                 URL: https://issues.apache.org/jira/browse/FELIX-2191
>             Project: Felix
>          Issue Type: Bug
>          Components: Karaf
>    Affects Versions: karaf-1.4.0
>         Environment: Windows 7
> Java 1.6.0_16
>            Reporter: Peter Gardfjäll
>
> Drop-in deployment of a feature descriptor in the deploy/ directory fails when the feature descriptor contains spring-dm 1.2.1 bundles.
> Reproduce as follows:
> (1) Start a fresh instance of Karaf 1.4.0 (unzip a new distribution and run bin\karaf.bat) 
> (2) Copy a feature.xml file with the following contents to the deploy/ directory
> <features>
>   <feature name="org.osgi.sample.sample.dependencies">
>     <bundle>mvn:org.springframework.osgi/spring-osgi-extender/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-core/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-io/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-web/1.2.1</bundle>
>   </feature>
> </features>
> This fails and gives the following error entry in the log:
> 20:09:20,819 | ERROR | lixDispatchQueue | FeatureDeploymentListener
>     | atures.FeatureDeploymentListener  136 | Unable to install
> features
> java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at 
> org.apache.geronimo.blueprint.container.AbstractServiceReferenceRecipe$JdkProxyFactory$1.invoke(AbstractServiceReferenceRecipe.java:561)
>         at $Proxy4.installFeatures(Unknown Source)
>         at 
> org.apache.felix.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:132)
>         at 
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
>         at 
> org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:942)
>         at 
> org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)
>         at 
> org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
>         at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundle(FeaturesServiceImpl.java:899)
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundleList(FeaturesServiceImpl.java:910)
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:296)
>         ... 13 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (FELIX-2191) Drop-in deployment of feature descriptor with spring-dm bundles fails

Posted by "Guillaume Nodet (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/FELIX-2191?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Guillaume Nodet resolved FELIX-2191.
------------------------------------

         Assignee: Guillaume Nodet
    Fix Version/s: karaf 1.6.0
       Resolution: Fixed

Committing to https://svn.apache.org/repos/asf/felix/trunk ...
	M	karaf/features/core/src/main/java/org/apache/felix/karaf/features/internal/FeaturesServiceImpl.java
Committed r945659


> Drop-in deployment of feature descriptor with spring-dm bundles fails
> ---------------------------------------------------------------------
>
>                 Key: FELIX-2191
>                 URL: https://issues.apache.org/jira/browse/FELIX-2191
>             Project: Felix
>          Issue Type: Bug
>          Components: Karaf
>    Affects Versions: karaf-1.4.0
>         Environment: Windows 7
> Java 1.6.0_16
>            Reporter: Peter Gardfjäll
>            Assignee: Guillaume Nodet
>             Fix For: karaf 1.6.0
>
>
> Drop-in deployment of a feature descriptor in the deploy/ directory fails when the feature descriptor contains spring-dm 1.2.1 bundles.
> Reproduce as follows:
> (1) Start a fresh instance of Karaf 1.4.0 (unzip a new distribution and run bin\karaf.bat) 
> (2) Copy a feature.xml file with the following contents to the deploy/ directory
> <features>
>   <feature name="org.osgi.sample.sample.dependencies">
>     <bundle>mvn:org.springframework.osgi/spring-osgi-extender/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-core/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-io/1.2.1</bundle>
>     <bundle>mvn:org.springframework.osgi/spring-osgi-web/1.2.1</bundle>
>   </feature>
> </features>
> This fails and gives the following error entry in the log:
> 20:09:20,819 | ERROR | lixDispatchQueue | FeatureDeploymentListener
>     | atures.FeatureDeploymentListener  136 | Unable to install
> features
> java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at 
> org.apache.geronimo.blueprint.container.AbstractServiceReferenceRecipe$JdkProxyFactory$1.invoke(AbstractServiceReferenceRecipe.java:561)
>         at $Proxy4.installFeatures(Unknown Source)
>         at 
> org.apache.felix.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:132)
>         at 
> org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:800)
>         at 
> org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:728)
>         at 
> org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:942)
>         at 
> org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)
>         at 
> org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:106)
>         at java.lang.Thread.run(Thread.java:619)
> Caused by: java.lang.NullPointerException
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundle(FeaturesServiceImpl.java:899)
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.getFeaturesContainingBundleList(FeaturesServiceImpl.java:910)
>         at 
> org.apache.felix.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:296)
>         ... 13 more

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.