Inconsistent container state if uninstalling bundles in the a bundle activators 
start method during framework startup.
----------------------------------------------------------------------------------------------------------------------

                 Key: FELIX-3387
                 URL: https://issues.apache.org/jira/browse/FELIX-3387
             Project: Felix
          Issue Type: Bug
          Components: Framework
    Affects Versions: framework-4.0.2
         Environment: JRE 1.6
            Reporter: Marcel Hanser


If uninstalling a bundle in the BundleActivator#start() method like in the 
small snipplet below, and the container is in his starting phase the container 
will never leave this state. In this state its not possible to start any bundle 
or to shutdown the container with the gogo shell. The pretty same issue occurs 
if the bundle is cached and it uninstalls a also cached bundle. 
To reproduce:
1) Download current Felix 4.0.2 distribution.
2) create two bundles, 
   a) one with the Activator below.
   b) one with the symbolicname "usual.bundle.usual.bundle".
4) put them into e.g. the "extra_bundles" folder
5) add
felix.auto.start.1=file:extra_bundles/test-0.0.1-SNAPSHOT.jar \
file:extra_bundles/usual.bundle-0.0.1-SNAPSHOT.jar
to the config.properties
6) execute java -jar bin/felix.jar
You will see
C:\Users\...\Desktop\felix-framework-4.0.2>java -jar bin/felix.jar
uninstalling bundle: usual.bundle.usual.bundle [7]
____________________________
Welcome to Apache Felix Gogo

g! lb
START LEVEL 1
   ID|State      |Level|Name
    0|Starting   |    0|System Bundle (4.0.2)
    1|Active     |    1|Apache Felix Bundle Repository (1.6.6)
    2|Active     |    1|Apache Felix Gogo Command (0.12.0)
    3|Active     |    1|Apache Felix Gogo Runtime (0.10.0)
    4|Active     |    1|Apache Felix Gogo Shell (0.10.0)
    5|Active     |    1|test (0.0.1.SNAPSHOT)
g!
 in your command shell.


{code}
package test;

import org.osgi.framework.Bundle;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;

public class TestActivator implements BundleActivator {
        private static final String SYMYBOLIC_NAME_OF_USUAL_BUNDLE = 
"usual.bundle.usual.bundle";

        public void start(BundleContext context) throws Exception {
                for (Bundle currentBundle : context.getBundles()) {
                        if (SYMYBOLIC_NAME_OF_USUAL_BUNDLE.equals(currentBundle
                                        .getSymbolicName())) {
                                System.out.println("uninstalling bundle: " + 
currentBundle);
                                currentBundle.uninstall();
                        }
                }
        }

        public void stop(BundleContext context) throws Exception {

        }

}
{code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to