Как я могу отфильтровать видимость службы OSGi? - PullRequest
3 голосов
/ 15 мая 2009

OSGi использует сервис-ориентированную архитектуру: пакеты регистрируют объекты служб, которые используют другие пакеты. Служба публикации и связывания управляется фреймворком. Это полностью отделяет поставщиков услуг от пользователей услуг (за исключением необходимости согласования интерфейса обслуживания).

Есть ли способ ограничить (по конфигурации), какие сервисы видны каким пакетам?

Например, если у меня есть HttpService, все пакеты, в которых есть необходимость, могут устанавливать в него сервлеты. Я хотел бы сделать HttpService невидимым для отдельных пакетов.

Для дополнительных кредитов: в дополнение к простой фильтрации регистрации услуг, возможность изменять свойства регистрации. Таким образом, даже если пакет регистрирует сервлет с alias=/admin, я могу изменить его на alias=/somethingelse для использования Pax Web Extender Whiteboard.

Ответы [ 6 ]

2 голосов
/ 07 июля 2009

В следующей версии R4.2 спецификации OSGi определен компонент под названием Find Hook, который позволяет точно:
«проверить возвращенный набор сервисных ссылок и при необходимости сократить набор возвращаемых сервисов»

См
http://www.osgi.org/download/r4-v4.2-core-draft-20090310.pdf раздел 12,5

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

2 голосов
/ 15 мая 2009

Есть ли способ ограничить (по конфигурации), какие сервисы видны каким пакетам?

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

В dm-сервере SpringSource (модульном сервере приложений Java на основе OSGi с открытым исходным кодом) приложение может иметь значение Scoped при развертывании. Это позволяет вам развертывать несколько приложений (в отдельных областях), которые могут включать несовместимые версии зависимых пакетов, и в то же время разрешать совместное использование общих пакетов (путем их развертывания вне области - в так называемой глобальной области).

Если приложение / пакет в определенной области регистрирует службу OSGi, она доступна только для пакетов в одной и той же области. (Услуги также «ограничены».)

Это не волшебство: сервер оборачивает интерфейсы служб OSGi и использует свойства службы «под прикрытием» для выполнения фильтрации, необходимой на лету.

Я думаю, что это даст вам то разделение, которое вы ищете.

Информацию о dm Server (не путать с Spring DM) можно найти на странице SpringSource.org dmServer .

Стив Пауэлл
* * SpringSource тысячи двадцать-одиной; Разработка dm сервера

1 голос
/ 15 мая 2009

Я не пробовал это, но похоже, что это может вам помочь ...

В OSGi R4 Component Spec описывается «Служба конфигурации администратора», которая, после 5-минутной проверки, может динамически изменять службы.

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

1 голос
/ 15 мая 2009

Есть ли способ ограничить (по конфигурации), какие сервисы видны каким пакетам?

Нет способа сделать это, используя свойства сервиса. Вы можете определить свое собственное свойство службы, которое указывает, какие пакеты должны использовать службу, которую вы экспортируете, но нет способа предотвратить использование других пакетов также.

Для дополнительных кредитов: в дополнение к простой фильтрации регистраций служб, возможность> изменять свойства регистрации. Таким образом, даже если пакет регистрирует сервлет с> alias = / admin, я могу изменить его на alias = / somethingelse для использования Pax Web> Extender Whiteboard.

Ну ... это сложно. Вы можете определить свой собственный интерфейс сервлета "MyServlet" и экспортировать свои сервлеты, используя этот интерфейс. Затем другой пакет может использовать эти MyServlets и реэкспортировать их как сервлеты с измененными свойствами службы.

Кроме этого ... понятия не имею.

0 голосов
/ 12 мая 2010

Если вы хотите ограничить доступ к службам, лучше всего включить защиту OSGi. Он предназначен для ограничения того, какие сервисы, пакеты и другие вещи видны для каких пакетов. Например, вы можете сделать только определенную услугу доступной для пакета, подписанного вами (или использовать различные другие критерии).

Другая опция, уже упоминавшаяся, это использовать сервисные хуки 4.2, которые обеспечивают своего рода механизм безопасности «сделай сам».

Второй вопрос - изменение свойств, таких как конечная точка, под которой зарегистрирована служба, - это то, что вы можете сделать через ServiceRegistration, которое вы получаете при регистрации вашей службы. Изменения могут быть инициированы, если стать ManagedService и использовать ConfigurationAdmin для самостоятельной настройки.

0 голосов
/ 07 июля 2009

Для дополнительных кредитов: в дополнение к простой фильтрации регистраций услуг, возможность изменять свойства регистрации. Таким образом, даже если пакет регистрирует сервлет с псевдонимом = / admin, я могу изменить его на псевдоним = / somethingelse для использования Pax Web Extender Whiteboard.

используя iPOJO , вы можете довольно просто изменить свойства предоставляемых сервисов. У него есть множество других функций, которые могут быть интересны кому-то, кто много использует OSGi.

...