Hallo zusammen,
ich habe schon auf stackoverflow gefragt und noch keine Antwort bekommen. Deshalb versuche ich hier mein Glück.
Ich arbeite an einer OSGi-basierenden Anwendung, die in Apache karaf läuft.
Es gibt mehrer OSGi-Services, die das selbe Interface implementieren. Jede Implementierung liest Daten von einer anderen Quelle bzw. auf eine andere Art.
In vielen anderen Bundles werden diese Read-Services verwendet.. Mit blueprint wird eine Service-Referenz geholt. Im allgemeinen ist es fix, welcher Service genutzt wird. Deshalb steht hart codiert ein service-Filter in der Blueprint-Datei.
Zu Test-Zwecken kann es aber vorkommen, dass ich für ein einzelnes Bundle einen anderen Read-Service brauche.
Ist es möglich, den service-Filter in der Blueprint-Datei konfigurierbar zu machen, so dass ich ihn im laufenden System austauschen kann ohne das Bundle neu bauen zu müssen?
Falls es nicht möglich ist, hat jemand eine andere Idee, wie ich im laufenden System service-Referenzen austauschen kann?
Hier ein abgespecktes Beispiel meiner Blueprint-Datei
ich habe schon auf stackoverflow gefragt und noch keine Antwort bekommen. Deshalb versuche ich hier mein Glück.
Ich arbeite an einer OSGi-basierenden Anwendung, die in Apache karaf läuft.
Es gibt mehrer OSGi-Services, die das selbe Interface implementieren. Jede Implementierung liest Daten von einer anderen Quelle bzw. auf eine andere Art.
In vielen anderen Bundles werden diese Read-Services verwendet.. Mit blueprint wird eine Service-Referenz geholt. Im allgemeinen ist es fix, welcher Service genutzt wird. Deshalb steht hart codiert ein service-Filter in der Blueprint-Datei.
Zu Test-Zwecken kann es aber vorkommen, dass ich für ein einzelnes Bundle einen anderen Read-Service brauche.
Ist es möglich, den service-Filter in der Blueprint-Datei konfigurierbar zu machen, so dass ich ihn im laufenden System austauschen kann ohne das Bundle neu bauen zu müssen?
Falls es nicht möglich ist, hat jemand eine andere Idee, wie ich im laufenden System service-Referenzen austauschen kann?
Hier ein abgespecktes Beispiel meiner Blueprint-Datei
XML:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.0.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<ext:property-placeholder/>
<cm:property-placeholder persistent-id="com.example.MyBundle"
placeholder-prefix="$(" placeholder-suffix=")" update-strategy="reload">
<cm:default-properties>
<cm:property name="readServiceName" value="local-read"/>
</cm:default-properties>
</cm:property-placeholder>
<reference id="MyBundleReadService" interface="com.example.MyInterface" availability="mandatory" filter="(name=$(readServiceName)"/>
</blueprint>