2013-11-26 5 views
1

Использование Apache Felix 4.2.1 iPOJO 1.11.0.Программно создавать экземпляры компонентов ipojo при запросе пользователя

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

@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) Это обычная практика?

ответ

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

+0

стратегии - определяет стратегию обслуживания при условии (один сервис для всех пачек или нового сервиса для каждого пучка или обычая ...) (Или я ошибаюсь?). Но мне нужно создавать экземпляры. Не могли бы вы привести пример кода (или дать ссылку с примером), как использовать пользовательскую CreationStrategy на стороне потребителя? Например, мне нужно создать n (user enter n) экземпляров компонента MyService. Нужно создавать все экземпляры программно после ввода пользователем n. Благодарю. – Aleksandr

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

  • Нет связанных вопросов^_^