2013-09-20 5 views
0

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

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

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

public class MyComponentFactory implements ? { 

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

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

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

+1

Кто контролирует экземпляр? И., который будет называть 'newInstance'? Потребитель услуг? Или вы хотите, чтобы фреймворк делал это автоматически; если да, то в какие моменты/события? –

+0

Структура должна делать это автоматически, когда необходим экземпляр службы. то есть пользователь услуги запрашивает реестр услуг OSGI для службы «IComponent». – SimFirehawk

+0

Но это то, что DS уже делает. Он создает компонент по первому требованию от потребителя услуг. –

ответ

4

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

+0

так выглядит, как никак не для конструктора n-arg компонента – SimFirehawk

+0

Это правильно. DS не поддерживает инъекцию конструктора. Он поддерживает активацию, изменение и деактивацию методов для настройки конфигурации, а также связывания и отвязывания методов для встраивания зависимостей. –

0

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

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

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

Смежные вопросы