Ограничить установку служб, отличных от iPOJO, в OSGI

В настоящее время я пытаюсь найти способ «фильтровать» пакеты в OSGI при их установке. Я использую Karaf в качестве реализации OSGI и iPOJO для разрешения служб. Могу ли я каким-либо образом гарантировать, что в OSGI разрешено устанавливать только сервисы, предоставляемые iPOJO?

Я уже искал в Интернете методы, чтобы увидеть, импортирует ли конкретный сервис материал OSGI (например, BundleContext и т. Д.), Но, похоже, это не работает легко.

Спасибо :)


person Daniel.T    schedule 06.11.2015    source источник
comment
Не могли бы вы уточнить, чего вы хотите достичь?   -  person Peter Kriens    schedule 24.11.2015


Ответы (2)


Скорее всего нет, и я не рекомендую это делать. То, как сервис публикуется, лучше рассматривать как деталь, специфичную для реализации. Если вы хотите искать сервисы, предоставляемые вашей библиотекой, то лучше добавить к вашим сервисам настраиваемое свойство «ключ-значение» (не знаю, как это сделать с iPOJO) и использовать этот ключ в фильтре LDAP.

изменить: единственными внешне видимыми характеристиками предоставляемых услуг являются имя класса и свойства службы ключ-значение, поэтому, если вы не можете найти там никакой разумной информации об iPOJO, у вас нет слишком много шансов

person erosb    schedule 06.11.2015
comment
Спасибо за ответ. Проблема в том, что я не могу контролировать, какие у меня услуги, а какие нет. План состоит в том, чтобы иметь своего рода репозиторий или базу данных, куда люди могут загружать пакеты OSGI. Для обеспечения безопасности мне необходимо знать, предоставляются ли услуги данного пакета iPOJO и только iPOJO. - person Daniel.T; 06.11.2015
comment
Почему? iPOJO — не единственный способ безопасного предоставления услуг. - person Neil Bartlett; 06.11.2015
comment
Это не идеально, но вы можете проверить, опубликовано ли свойство instance.name с сервисом. Он дает вам имя экземпляра, предоставляющего услугу, и автоматически публикуется. - person Clement; 06.11.2015
comment
Я до сих пор не понимаю, почему вы ограничиваете наборы только использованием iPOJO. В iPOJO нет ничего плохого, он мне очень нравится, но есть и другие вполне допустимые способы публикации сервисов. - person Neil Bartlett; 08.11.2015
comment
Да, но если я не ограничусь только iPOJO, можно будет зарегистрировать службу, просто вручную, и это испортит всю мою систему безопасности, потому что я не контролировал зависимости и т. д. - person Daniel.T; 17.11.2015

У меня есть решение моей проблемы ... Я сделал это так, как предлагал erosb. Каждая ссылка на службу IPOJO владеет свойством «имя», поэтому я только что создал LDAP-фильтр для метода @Bind, который принимает все значения для свойства имени (filter = "(instance.name=*). Службы, которые были не создан с помощью iPOJO, не имеет этого поля, поэтому таким образом я могу фильтровать любой сервис iPOJO.

Большое спасибо :)

person Daniel.T    schedule 01.12.2015