Программно создавать экземпляры компонентов ipojo по запросу пользователя

Использует Apache Felix 4.2.1 iPOJO 1.11.0.

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

@Component
@Provides(specifications = {IProcessSearch.class})
public class ProcessSearch implements IProcessSearch {
    ...
    @Requires(filter = "(factory.name=ProcessSearch)")
    private Factory mProcessSearchFactory;
    ...
    /**
     * Factory methods for receive new component instance:
     */
    public static ProcessSearch createInstance() {
        return createInstance(null);
    }
    public static ProcessSearch createInstance(Properties pProperties) {
        InstanceManager lInstanceManager = (InstanceManager) mProcessSearchFactory.createComponentInstance(pProperties);
        return (ProcessSearch) lInstanceManager.getPojoObject();
    }

1) Если я правильно понимаю, то поле с аннотацией @Requires не может быть статическим. Как создать фабричный метод, который принимает свойства и получает новый экземпляр компонента?

2) Это нормальная практика?


person Aleksandr    schedule 26.11.2013    source источник


Ответы (1)


Сделайте это, вам нужно предоставить свою собственную стратегию создания. Эта стратегия применяется к предоставляемой услуге (@Provides), а не к стороне потребителя (@Requires).

Дополнительная информация: http://felix.apache.org/documentation/subprojects/apache-felix-ipojo/apache-felix-ipojo-userguide/describing-components/providing-osgi-services.html#service-serving-object-creation

person Clement    schedule 28.11.2013
comment
Стратегия - определяет стратегию предоставления услуги (одна услуга для всех пакетов или новая услуга для каждого пакета или индивидуальная...)(Или я ошибаюсь?). Но мне нужно создать экземпляры. Не могли бы вы привести пример кода (или дать ссылку с примером), как использовать пользовательскую стратегию CreationStrategy на стороне потребителя? Например, мне нужно создать n (пользователь вводит n) экземпляров компонента MyService. Необходимо создать все экземпляры программно после того, как пользователь введет n. Спасибо. - person Aleksandr; 28.11.2013