2014-11-10 2 views
1

У меня есть другая проблема, связанная с динамическим обновлением в iPOJO:Update IPOJO

1. Проблема:

  • Предположим, что у меня есть 2 компонента A и B. Эти два компонента реализуются A_impl.java и B_impl.java, соответственно. Они реализуют две службы A_service и B_service.
  • компонент «C» использовать A_service объявляя следующим образом:

//

@Component(name="C", immediate=true) 
@Instantiate 
public class C_impl { 
     @Requires 
     A_Service service; 
} 

//

  • Все три компоненты развернуты и работают нормально.

2. Требование:

  • Теперь, я бы обновить динамически реализацию "C" путем изменения типа зависимости (услуга @Requires A_service) в C_impl.java к (@Requires B_service сервис), то есть он меняет A_service на B_service в C_impl во время выполнения.

Вопрос:

Как я могу разработать независимый компонент перенастроить (контроль) реализации компонента? Я читал (http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html), но я не очень хорошо понимаю. Заранее благодарим за ответ

ответ

1

Ну, вы хотите изменить класс компонентов компонента? Это не будет работать.

Единственным способом было бы реализовать две реализации без объявленного экземпляра (без @instantiate) и создать компонент, который требовал бы и Factory (org.apache.felix.ipojo.Factory), и создавать экземпляры, когда это необходимо. Очевидно, что если вам нужна замена, вам также нужно будет удалить первый созданный экземпляр при создании второго.

Таким образом, потребуется компонент, как это (это псевдо-код):

@Component(immediate=true) 
@Instantiate 
public class Controller { 

    @Requires(filter="(factory.name=A)") 
    Factory factoryOfA; 

    @Requires(filter="(factory.name=B)") 
    Factory factoryOfB;  

    ComponentInstance instance; 

    @Validate 
    public void createA() throws Exception { 
     instance = factoryOfA.createInstance(null); 
    } 

    public void switchToB() throws Exception { 
     instance.dispose(); 
     instance = factoryOfB.createInstance(null); 
    } 
} 
Смежные вопросы