2014-11-06 41 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文件:helloComponent.jar

现在,我想更新(值= “A”)到(价值=“AA”)。因此,我使用ConfigurationAdmin来更新该属性

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组件不能更新“你好”实例的值“A”(由“AA”)实现的组件。

如何修改此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); 
}