Управление реализацией декларационной службы osgi

Я ищу простой способ управления созданием декларативного сервиса.

То, что я хочу, это что-то вроде фабрики, которую просят вернуть экземпляр компонента, но где я могу управлять созданием экземпляра.

В настоящее время я только что нашел ComponentFactory, где я могу просто вызвать newInstance с данным словарем. Но то, что я действительно хочу, это что-то вроде этого, предполагая, что IComponent является декларативным интерфейсом службы, а MyComponent является классом реализации

public class MyComponentFactory implements ? {

   public IComponent newInstance() {
       return new MyComponent("firstParameter", "secondParameter");
   }
}

Есть ли что-то подобное с декларативными сервисами или мне нужно использовать собственную регистрацию сервисов в коде активации пакета?

заранее спасибо

2 ответа

Решение

DS не обеспечивает требуемый уровень косвенности при создании экземпляра. DS всегда будет использовать открытый конструктор no-args, а затем вызывать указанный метод активатора для завершения инициализации экземпляра.

Одной альтернативой для такого управления реализацией службы является использование комбинации DS и CM.

Вы должны установить configuration-policy="require" в DS xml и использовать CM для создания экземпляра конфигурации, который будет использоваться для передачи словаря, содержащего все необходимые вам свойства (только типы, поддерживаемые DS), в созданный экземпляр службы, Вы даже можете использовать файл свойств и файл установки Феликса для этой конфигурации.

Если этого недостаточно, у вас есть другая альтернатива - отслеживать новую созданную службу и вызывать метод setup(args) сразу после добавления конфигурации с использованием CM.

Другие вопросы по тегам