2014-11-06 7 views
1

의 제공을 목표로 전 구성 요소는 다음과 같이 선언 :업데이트는 동적으로 iPOJO

<ipojo> 
    <component classname="HelloClass" name="helloCom" immediate="true"> 
     <requires field="delayService" id="id1"> 
     </requires> 
    </component> 
    <instance component="helloCom" name="hello"> 
     <property name="requires.from"> 
      <property name="id1" value="A"/> 
     </property> 
    </instance> 
</ipojo> 

이 구성 요소의 jar 파일 ~ (값 = "AA"). 따라서,이 속성

public class ControllerReconfiguration { 

private ConfigurationAdmin m_configAdmin; 

@SuppressWarnings({ "rawtypes", "unchecked" }) 
public void reconfigure() throws IOException { 
    Configuration configuration = m_configAdmin.getConfiguration("hello","file:./helloComponent.jar"); 
    configuration.setBundleLocation("file:./helloComponent.jar"); 
    Properties props = new Properties(); 
    //Dictionary props = new Hashtable(); 
    props.put("id1", "AA"); 
    configuration.update(props); 
    System.out.println("Update");  

} 
} 

그러나이 ControllerReconfiguration 성분 '안녕하세요'인스턴스 ('AA'에 의해) 값 'A'를 갱신 할 수없는을 업데이트하는 ConfigurationAdmin을 사용하여 구성 요소를 구현한다.

이 ControllerReconfiguration 구성 요소를 수정하는 방법은 무엇입니까?

도움을 주셔서 감사합니다.

답변

0

감사 클레멘트,

잘 작동합니다 !!!!! :) Factory를 사용하여 InstanceManager에 액세스합니다.

예, 성분 InstanceManager 액세스하기 위해 "hello.call.CallHello"

@require 
private Factory[] factories; 
for (Factory factory : factories) { 
        /* 
        * "hello.call.CallHello" is a component name 
        * note: it is not component instance name 
        */ 

        if (factory.getName().equals("hello.call.CallHello")) { 
         /* 
         * a component can have many instances 
         * if there is only one instance. 
         * get(0) return the first instance. 
         */ 
         InstanceManager im = (InstanceManager) factory.getInstances().get(0); 
}