в моем проекте у меня есть пакет OSGI. В этом комплекте у меня есть метод Activated и метод привязки (к ConfigurationAdmin).
Когда я запускаю проект в первый раз, сначала вызывается метод Activated, поэтому я могу инициализировать все, что мне нужно, но если я останавливаю пакет и затем снова запускаю его, сначала вызывается метод связывания, и у меня есть нулевой указатель (потому что инициализации в Activate еще не вызваны).
Ссылка на метод связывания - "cardinality = ReferenceCardinality" .OPTIONAL, policy = ReferencePolicy.DYNAMI C "
Почему при запуске во второй раз изменяется порядок?
@Component(configurationPid = "ConsulService", immediate = true, service = ConsulService.class)
public class ConsulServiceImpl implements ConsulService {
private ConfigurationAdmin configurationAdmin;
private BundleContext context;
private Consul consul;
@Override
public AgentClient agentClient() {
return consul.agentClient();
}
@Override
public KeyValueClient keyValueAgent() {
return consul.keyValueClient();
}
@Activate
public void activate(BundleContext bundleContext) {
//this cause the nullpointer after the stop and the restarting of this bundle
//since this method is not called "consul" is null
this.consul = Consul.builder().build();
this.context = bundleContext;
}
...
@Reference(cardinality = ReferenceCardinality.OPTIONAL, policy = ReferencePolicy.DYNAMIC, unbind = "unbindConfigurationAdmin")
public void bindConfigurationAdmin(final ConfigurationAdmin configurationAdmin) {
this.configurationAdmin = configurationAdmin;
// Here I have nullpointer because consul is not initializated
KeyValueClient keyValueAgent = keyValueAgent();
...
}