Управление реализацией декларационной службы 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.