Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.3.5. Konfiguration der Applikation
3.5.1. OSGi Config Admin Dienst
Der OSGi Config Admin Dienst ist ein Standard OSGi Konfigurationsmechanismus, der es Administratoren gestattet, die Konfiguration der Applikation zum Zeitpunkt der Bereitstellung bei der Runtime zu bearbeiten. Dies steht im Gegensatz zu den Einstellungen, die direkt in einer Blueprint XML-Datei erfolgen, da diese XML-Dateien nur dem Entwickler zugänglich sind.
Der OSGi Config Admin Dienst stützt sich auf die folgenden Grundkonzepte:
- Persistent ID
- Eine persistente ID (PID) identifiziert eine Gruppe verwandter Eigenschaften. Eine PID ist normalerweise in demselben Format wie ein Java-Paketname geschrieben. Die
org.ops4j.pax.web
PID zum Beispiel konfiguriert den standardmäßigen Jetty Web server des Red Hat JBoss Fuse Containers. - Eigenschaften
- Eine Eigenschaft ist ein Name-Wert-Paar, das immer zu einer bestimmten PID gehört.
3.5.2. Einstellen der Konfigurationseigenschaften
Es gibt zwei Hauptarten, um die Eigenschaften im OSGi Config Admin Dienst anzupassen. Dies kann wie folgt geschehen:
- Für eine bestimmt PID, PersistentID, können Sie eine Textdatei im
InstallDir/etc
Verzeichnis erstellen, das der folgenden Namengebungskonvention folgt:InstallDir/etc/PersistentID.cfg
Sie können jetzt die zu dieser PID gehörenden Eigenschaften einstellen, indem Sie diese Datei bearbeiten und Einträge in der folgenden Form hinzufügen:Property=Value
- Fuse Fabric unterstützt einen weiteren Mechanismus zur Anpassung von OSGi Config Admin Eigenschaften. Sie stellen in Fuse Fabric OSGi Config Admin Eigenschaften in einem Fabric Profil ein (wobei ein Profil die für die Bereitstellung einer Applikation erforderlichen Daten beinhaltet). Es gibt zwei alternative Wege, um diese Konfigurationseinstellungen in einem Profil zu bearbeiten:
- Verwendung der Management-Konsole
- Verwendung des
fabric:profile-edit
Befehls in einer Container-Konsole (siehe Abschnitt 4.2.2, »Fabric Profile erstellen«).
3.5.3. Ersetzen Sie TCP-Port durch einen Platzhalter für die Eigenschaft
Als ein Beispiel wie der OSGi Config Admin Dienst in der Praxis eingesetzt werden könnte, könnten wir uns etwa den vom
HelloWorld
Web-Dienst vom cxf-basic
Projekt verwendeten TCP-Port ansehen. Durch Bearbeiten der Blueprint XML Datei, die diesen Webdienst definiert, können Sie den TCP-Port des Webdienstes durch den OSGi Config Admin Dienst anpassbar machen.
Die TCP-Port-Nummer in der Blueprint XML-Datei wird durch einen Eigenschaften-Platzhalter ersetzt, der die Port-Nummer zur Runtime durch Auffinden der Eigenschaft im OSGi Config Admin Dienst ersetzt.
3.5.4. Blueprint XML Beispiel
Im
cxf-basic
Projekt werden alle XML-Dateien vom folgenden Speicherort wie Blueprint XML-Dateien behandelt (dem standardmäßigen Maven Speicherort für Blueprint XML-Dateien):
cxf-basic/src/main/resources/OSGI-INF/blueprint/*.xml
Bearbeiten Sie die
blueprint.xml
Datei vom vorherigen Verzeichnis und fügen Sie die in Beispiel 3.1, »Konfiguerieren der Port-Nummer in Blueprint XML« dargestellten XML-Inhalte hinzu.
Beispiel 3.1. Konfiguerieren der Port-Nummer in Blueprint 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:jaxws="http://cxf.apache.org/blueprint/jaxws" xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" xsi:schemaLocation=" http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd http://cxf.apache.org/blueprint/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd"> <cxf:bus> <!-- In this example, we're enabling the logging feature. This will ensure that both the inbound and outbound XML message are being logged for every web service invocation. --> <cxf:features> <cxf:logging/> </cxf:features> </cxf:bus> <!-- osgi blueprint property placeholder --> <cm:property-placeholder id="placeholder" persistent-id="org.fusesource.example.get.started"> <cm:default-properties> <cm:property name="portNumber" value="8181"/> </cm:default-properties> </cm:property-placeholder> <jaxws:endpoint id="helloWorld" implementor="org.fusesource.example.HelloWorldImpl" address="http://0.0.0.0:${portNumber}/cxf/HelloWorld"> </jaxws:endpoint> </blueprint>
Der markierte Text zeigt diejenigen Teile der Blueprint-Konfiguration, die für den OSGi Config Admin Dienst maßgeblich sind. Abgesehen vom
cm
Namespace, sind die Hauptänderungen wie folgt:
- Das
cm:property-placeholder
Bean kontaktiert den OSGi Config Admin Dienst und ruft alle Eigenschaft-Einstellungen von derorg.fusesource.example.get.started
PID ab. Die Schlüssel-Wert-Paare imcm:default-properties/cm:property
Element legen Standardwerte für die Eigenschaften fest (die außer Kraft gesetzt werden, wenn entsprechende Einstellungen vom OSGi Config Admin Dienst abgerufen werden können). - Der
${portNumber}
Platzhalter wird zum Festlegen der TCP Port-Nummer verwendet, die vomHelloWorld
Webdienst benutzt wird.
Anmerkung
Für die Blueprint XML Konfiguration müssen Sie sicherstellen, dass die Anweisungen für den
maven-bundle-plugin
in der pom.xml
Datei des Projekts den Platzhalter *
in den im Import-Package
Element gelisteten Paketen beinhalten (ist das Import-Package
Element nicht vorhanden, so wird der Platzhalter standardmäßig eingesetzt). Andernfalls wird Ihnen der folgende Fehler gemeldet: Unresolved references to [org.osgi.service.blueprint] by class(es) on the Bundle-Classpath[Jar:dot]: []
.
3.5.5. Bereitstellung der konfigurierbaren Applikation
Um den konfigurierbaren Webdienst vom
cxf-basic
Projekt bereitzustellen, führen Sie die folgenden Schritte durch:
- Bearbeiten Sie die Blueprint XML Datei
blueprint.xml
, um den OSGi Config Admin Dienst, wie in Beispiel 3.1, »Konfiguerieren der Port-Nummer in Blueprint XML« beschrieben, zu integrieren. - Führen Sie einen erneuten Build des
cxf-basic
Projekts mit Maven durch. Öffnen Sie eine Befehlszeile, ändern Sie das Verzeichnis in dasget-started/cxf-basic
Verzeichnis und geben Sie den folgenden Maven Befehl ein:mvn clean install
- Erstellen Sie die Konfigurationdatei im
etc/
Verzeichnis Ihrer Red Hat JBoss Fuse Installation:InstallDir/etc/org.fusesource.example.get.started.cfg
Bearbeiten Sie dieorg.fusesource.example.get.started.cfg
Datei mit einem Texteditor und fügen Sie die folgenden Inhalte hinzu:portNumber=8182
- Wenn Sie die
get-started-basic
Funktion zuvor bereitgestellt haben (wie in Abschnitt 3.4, »Definieren eines Feature für die Applikation« beschrieben), deinstallieren Sie sie jetzt:JBossFuse:karaf@root> features:uninstall get-started-basic
- Stellen Sie das
get-started-cxf
Feature bereit, indem Sie den folgenden Konsolenbefehl eingeben:JBossFuse:karaf@root> features:install get-started-cxf
- Nachdem Sie ein paar Sekunden auf den Start der Bündel gewartet haben, können Sie den vom HelloWorld-Dienst verwendeten Port durch Eingabe des folgenden Konsolenbefehls überprüfen:
JBossFuse:karaf@root> cxf:list-endpoints Name State Address BusID [FabricResource ] [Started ] [/fabric8 ] [io.fabric8.fabric-rest-cxf250714502 ] [HelloWorldImplPort ] [Started ] [http://0.0.0.0:8182/cxf/HelloWorld ] [org.fusesource.example.cxf-basic-cxf1456001875]
Sie sehen, dass der HelloWorld-Dienst an Port8182
horcht. - Falls Sie den Web-Client-Test gegen diesen Webdienst durchführen möchten, so müssen Sie die vom Client verwendete URL anpassen. Öffnen Sie mit einem Texteditor die
SoapTest.java
Datei vomcxf-basic/src/test/java/org/fusesource/example
Verzeichnis und ändern Sie die Verbindungs-URL wie im folgenden Fragment markiert:URLConnection connection = new URL("http://localhost:8182/cxf/HelloWorld").openConnection();
- Sie können die Applikation dann testen, indem Sie eine Befehlszeile öffnen, ins Verzeichnis
get-started/cxf-basic
wechseln und den folgenden Befehl eingeben:mvn -Ptest
- Um die Funktion zu deinstallieren, geben Sie den folgenden Konsolenbefehl ein:
features:uninstall get-started-cxf