David Jencks created FELIX-5036:
-----------------------------------

             Summary: [DS] bundle start order problem with config admin
                 Key: FELIX-5036
                 URL: https://issues.apache.org/jira/browse/FELIX-5036
             Project: Felix
          Issue Type: Bug
          Components: Declarative Services (SCR)
    Affects Versions: scr-2.0.0
            Reporter: David Jencks


There was a discussion on the bndtools list about a problem with start order of 
DS and config admin.  I'm pasting Peter's email where he describes how to 
reproduce the problem.

 think I nailed down the issue, my guess it is in Felix SCR and suggest you 
file an issue.

The ordering problem is caused by:

        1: a component C with configuration policy require (no dependency on 
config admin)
        2: a component Z that sets an instance for bundle 1’s component 
(dependency on config admin)
        3: config admin
        4: scr

Any other ordering works :-)

About the code you submitted, some tips. Next time please try to bring it down 
to a smaller sample. If you have such a problem you invariably find the problem 
by removing code in chunks until you see a change in behavior. The nice thing 
is then that at the end it is obvious what is going on. It also helps in this 
phase to aggressively refactor the code so you use 1 character names that are 
easier to separate then very similar (or in your case identical messages/names).

Included are the bundles that fail, you might want to add them to the Felix SCR 
issue. They include their source code.

Kind regards,

        Peter Kriens


c bundle:
=========
package csample;

package csample;

import java.io.IOException;
import java.util.Map;

import org.osgi.framework.InvalidSyntaxException;

import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.ConfigurationPolicy;

@Component(
                name = "sample.cm.require",
                configurationPolicy = ConfigurationPolicy.require,
                immediate = true)
public class C {

    @Activate
    public void startup(Map<String, Object> props) throws 
InvalidSyntaxException, IOException {
        String name = (String) props.get("sample.cm.require.name");        
        System.out.println("C : startup -> " + name);
    }
}

z bundle:
=========
package zsample;

import java.io.IOException;
import java.util.Dictionary;
import java.util.Hashtable;

import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.osgi.service.component.ComponentContext;

import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Deactivate;
import aQute.bnd.annotation.component.Reference;

@Component(immediate = true)
public class Z {

        private ConfigurationAdmin configAdmin;

        @Activate
        public void startup(ComponentContext ctx) throws 
InvalidSyntaxException, IOException {
                System.out.println("Z Startup");
                Dictionary<String, Object> props = new Hashtable<>();

                String pid = "sample.cm.require";
                Configuration config = 
configAdmin.createFactoryConfiguration(pid, null);

                props.put("sample.cm.require.name", "from Z");

                config.update(props);
        }

        @Deactivate
        public void shutdown(ComponentContext ctx) {
                System.out.println("Z Shutdown");
        }

        @Reference
        public void setConfigAdmin(ConfigurationAdmin configAdmin) {
                this.configAdmin = configAdmin;
                System.out.println("Z setConfigAdmin");
        }
}


bndrun file:

-runbundles: \
        c;version=latest,\
        z;version=latest,\
        org.apache.felix.configadmin,\
        org.apache.felix.scr

-runfw: org.apache.felix.framework;version='[4.4.1,4.4.1]'
-runee: JavaSE-1.8



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to