I'm trying to understand how those annotations work.I have the following
Activator.class and MyConf.class in the same bundle.
The Activator code:
@Component@Slf4jpublic class Activator implements BundleActivator,
ManagedService {
private static Logger logger = LoggerFactory.getLogger(Activator.class);private
static final String CONFIG_PID = "mytest";private ServiceRegistration
serviceReg;
@Referenceprivate MyConf conf; public void start(BundleContext context) {
Hashtable<String, Object> properties = new Hashtable<String,
Object>();properties.put(Constants.SERVICE_PID, CONFIG_PID);serviceReg =
context.registerService(ManagedService.class.getName(), this , properties); }
public void stop(BundleContext context) {serviceReg.unregister(); }
@SuppressWarnings("rawtypes") @Override public void updated(Dictionary
config) throws ConfigurationException {if (config == null)
{return;}conf.setFoo((String) config.get("foo"));conf.refresh(); }
and MyConf:
@Componentpublic class MyConf {private String foo = "bar";public MyConf()
{}public String getFoo() {return foo;}
public void setFoo(String foo) {this.foo = foo;}public void refresh()
{System.out.println("foo=" + this.foo);}
}
It seems pretty basic, but when I deploy it in Karaf says:
Status: WaitingDeclarative
Servicesar.com.aerolineas.esb.operaciones.pruebas.Activator (21) missing
references: conf
and in the log, there's a NullPointerException at conf.setFoo in the Activator,
as if the framework never instantiate + inject MyConf. Am I missing something?
Thanks in advaced.Nick.