Допустимые способы прерывания активации компонента OSGi

У меня есть компонент OSGi:

@Component(immediate=true)
public class SomeComponent implements SomeInterface {...}

Обратите внимание, что компонент является немедленным. Кроме того, поскольку класс компонента реализует интерфейс, я понимаю, что служба будет зарегистрирована автоматически при (как часть) активации компонента.

Теперь я хотел бы иметь возможность динамически прерывать активацию компонента и регистрацию службы, если выполняются определенные условия. Создание «ComponentException» в активаторе компонента, похоже, не работает:

@Activate
public void activate() {
  if (notReady)
    throw new ComponentException("Component not ready");
}

Какие-либо предложения? Спасибо!


person medalik    schedule 16.06.2017    source источник


Ответы (1)


Вы не можете прервать регистрацию службы, которая происходит до активации. Лучше было бы с двумя компонентами. Тот, который является немедленным без службы, который решает, следует ли включить или отключить второй компонент, у которого есть служба. Этот второй компонент может быть отключен по умолчанию.

person BJ Hargrave    schedule 17.06.2017