Unable to remove configuration properties using iPOJO's configuration handler
-----------------------------------------------------------------------------

                 Key: FELIX-2981
                 URL: https://issues.apache.org/jira/browse/FELIX-2981
             Project: Felix
          Issue Type: Bug
          Components: iPOJO
    Affects Versions: iPOJO-1.8.0
         Environment: * Apache Felix Bundle Repository (1.6.0)
* Apache Felix Configuration Admin Service (1.2.8)
* Apache Felix Gogo Runtime (0.8.0)
* Apache Felix iPOJO (1.8.0)
* Apache Felix iPOJO Annotations (1.8.0)
* iPOJO Metadata (1.4.0)
* Apache Felix Preferences Service (1.0.4)

            Reporter: Robert Lillack
            Priority: Minor


Hi,

using iPOJO's _very nice_ OSGi Configuration Admin integration I sadly seem 
unable to remove any properties from a configuration to "reset" this property 
back to it's default value. Comparing the following two classes---one using 
iPOJO the other one directly implementing the ManagedService interface ...

@Component(managedservice = "example1")
@Instantiate
public class Example1 {
    
    @Property
    private String key;
    
    @Updated
    private void updated() {
        System.out.format("example1 = %s\n", key);
    }
}

@Component
@Instantiate
public class Example2 implements ManagedService {
    BundleContext ctx;
    
    public Example2(BundleContext c) {
        ctx = c;
    }
    
    @Validate
    public void start() {
        ctx.registerService(ManagedService.class.getName(), this, 
getDefaults());
    }

    private Hashtable getDefaults() {
        Hashtable defaults = new Hashtable();
        defaults.put(Constants.SERVICE_PID, "example2");
        return defaults;
    }

    @Override
    public void updated(Dictionary properties) throws ConfigurationException {
        System.out.format("example2 = %s\n", properties == null ? null : 
properties.get("key"));
    }
}


... with the code setting the properties looking like this ...

    public void set(String value) throws Exception {
        setProperty("example1", value);
        setProperty("example2", value);
    }
    
    public void unset() throws Exception {
        setProperty("example1", null);
        setProperty("example2", null);
    }
    
    private void setProperty(String srv, String value) throws IOException {
        Configuration cfg = configAdmin.getConfiguration(srv, null); 
        Dictionary p = cfg.getProperties();
        if (p == null) {
            p = new Properties();
        }
        
        if (value == null) {
            p.remove("key");
        } else {
            p.put("key", value);
        }
        cfg.update(p);
    }

... these are the results after calling set("qsdasdasd") followed by unset():

example1 = qsdasdasd
example2 = qsdasdasd
example1 = qsdasdasd
example2 = null

Am I using iPOJO the wrong way here? Thanks!

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to