Hi,
Ref : Neil Bartlett blog
http://njbartlett.name/2010/07/19/factory-components-in-ds.html
I have not been able to reliably create instances using this technique.
The following code does not seem to create the desired instance. Where am I going wrong?
Is it something to do with lazy loading?
==========================================================================
package instance.maker;
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 InstanceMaker {
private ConfigurationAdmin configAdmin;
@Activate
public void startup(ComponentContext ctx) throws InvalidSyntaxException, IOException {
String pid = "mycomponent.MyComponent";
Configuration config = configAdmin.createFactoryConfiguration(pid);
Dictionary props = new Hashtable();
props.put("name", "My Name");
config.update(props);
System.out.println("InstanceMaker : startup");
}
@Deactivate
public void shutdown(ComponentContext ctx) {
System.out.println("InstanceMaker : shutdown");
}
@Reference
public void setConfigAdmin(ConfigurationAdmin configAdmin) {
this.configAdmin = configAdmin;
System.out.println(" InstanceMaker : setConfigAdmin");
}
public void unsetConfigAdmin(ConfigurationAdmin configAdmin) {
this.configAdmin = null;
System.out.println("InstanceMaker : unsetConfigAdmin");
}
}
==================================================================================
package mycomponent;
import java.util.Map;
import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.ConfigurationPolicy;
@Component(immediate=true,configurationPolicy = ConfigurationPolicy.require)
public class MyComponent implements IMyComponent {
@Activate
public void activate(Map<String, String> config) {
System.out.println("MyComponent : activate");
String name = config.get("name");
System.out.println(name);
}
public void doSomething() {
System.out.println("Doing Something now");
}
}
=======================================================================================
Regards
Paul Fraser