2016-05-09 16 views
1

Ich habe ein einfaches Camel Application Bundle welches in Karaf 3.0.5 unter Apache Service Mix 6.1 bereitgestellt werden soll. Die Konfigurationsdatei wird im Verzeichnis etc/abgelegt (sagen wir, es heißt wf.cfg). Ich möchte die Funktion zur dynamischen Konfigurationsänderung in meinem Anwendungspaket haben. Wenn also etwas in der wf.cfg geändert wird, steht es sofort zur Verfügung. die folgenden in meinem blueprint.xmlDynamic Config Laden mit cm: managed-properites in Karaf 3.0.5

<bean id="configBean" class="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
     <cm:managed-properties persistent-id="wf" update-method="refresh" update-strategy="component-managed"/> 
    </bean> 

public class ConfigBean { 
    private String env; 
    public String getEnv() { 
     return env; 
    } 
    public void setEnv(String env) { 
     this.env = env; 
    } 
    public void refresh() { 
     System.out.println("Config refreshed"); 
    } 
} 

Aber immer, wenn ich die wf.cfg-Datei aktualisieren, die Refresh-Methode in ConfigBean Klasse wird nie genannt Dazu habe ich hinzugefügt.

Ich, sogar versucht, mit Managed-Service-Fabrik.

<cm:managed-service-factory id="managed-service-factory"        factory-pid="wf"       interface="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
<cm:managed-component class="com.jabong.orchestratorservice.basecomponent.config.ConfigBean"> 
      <cm:managed-properties persistent-id="" update-strategy="component-managed" update-method="refresh" /> 
</cm:managed-component> 
    </cm:managed-service-factory> 

Aber es hilft nicht. Kann mir bitte jemand helfen, dieses Problem zu lösen.

Bitte beachten Sie: Ich möchte nicht cm: property-placeholder verwenden, da es den vollständigen Kontext neu lädt, wenn wir die cfg-Datei ändern. Ich möchte nur cm: managed-properties verwenden.

Antwort

1

Ich fand die Lösung.

Refresh-Methode sollte ein Argument haben Map<String, String> properties.

public class ConfigBean { 
    private String env; 
    public String getEnv() { 
     return env; 
    } 
    public void setEnv(String env) { 
     this.env = env; 
    } 
    public void refresh(Map<String, String> properties) { 
     System.out.println("Config refreshed"); 
    } 
}