Я немного новичок в OSGI и хочу следующее: активировать свой пакет только при выполнении некоторых предварительных условий (которые, кстати, мы получаем из собственной библиотеки, но это уже другая история). AFAIK это может быть достигнуто с помощью @Reference DS, но я не понимаю полностью. Я имею в виду, что если я напишу что-то вроде этого перед моим @Activate DS:
@Reference
public AnotherService as
@Activate
public void activate() {
//some code
}
, это на самом деле означает, что мой пакет не будет активирован, пока не будет активирован AnotherService. А можно ли написать в AnotherService
или в своей связке что-то вроде этого?:
@Activate
public void activate() {
if (condition){
deactivate()
}
//some code
}
@Deactivate
public void deactivate() {
//some code
}
Насколько я понимаю, это невозможно. Тогда возникает вопрос: как я могу контролировать активацию своего пакета или его ссылок в зависимости от определенных условий? Т.е. я хочу, чтобы мой пакет был либо активирован, когда условие выполнено ( до активации ), либо деактивировано, когда нет. Мне это не подходит: «просто сделай if-statement, если он не удовлетворен, ничего не делай, но все равно активируйся», потому что «activiy» этого пакета очень ресурсоемкий. Может, у меня просто совершенно неправильное представление об OSGI.