2014-11-10 5 views
1

I는 iPOJO 동적 업데이트와 관련된 또 다른 문제점을 가지고업데이트 IPOJO 컴포넌트 구현

1. 문제점 :

  • I 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_impl.java에 의존 (@Requires A_service 서비스)의 유형을 변경하여 "C"의 동적 구현을 ​​업데이트 할 것 (@Requires B_service 서비스), 즉 런타임에 C_impl에서 A_service를 B_service로 변경합니다.

질문 :

나는 다시 구성하는 독립적 인 컴포넌트를 개발할 수있는 방법

(제어) 구성 요소 구현? 나는 (http://felix.apache.org/site/dive-into-the-ipojo-manipulation-depths.html)을 읽었지만 나는 잘 이해하지 못한다. 답장을 미리 보내 주셔서 감사합니다.

답변

1

글쎄, 컴포넌트의 컴포넌트 클래스를 변경 하시겠습니까? 이것은 실제로 작동하지 않습니다.

유일한 방법은 인스턴스가 선언되지 않은 상태에서 (@instantiate가없는) 두 가지 구현을 사용하고 두 팩토리 (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); 
    } 
} 
:

그래서,이 같은 구성 요소를 필요 (이것은 의사 코드)