3.5. Konfiguration der Applikation
3.5.1. OSGi Config Admin Dienst Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
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.webPID 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 Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
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/etcVerzeichnis erstellen, das der folgenden Namengebungskonvention folgt:InstallDir/etc/PersistentID.cfgSie 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-editBefehls 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 Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
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 Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
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-placeholderBean kontaktiert den OSGi Config Admin Dienst und ruft alle Eigenschaft-Einstellungen von derorg.fusesource.example.get.startedPID ab. Die Schlüssel-Wert-Paare imcm:default-properties/cm:propertyElement 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 vomHelloWorldWebdienst 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 Link kopierenLink in die Zwischenablage kopiert!
Link kopierenLink in die Zwischenablage kopiert!
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-basicProjekts mit Maven durch. Öffnen Sie eine Befehlszeile, ändern Sie das Verzeichnis in dasget-started/cxf-basicVerzeichnis 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.cfgBearbeiten Sie dieorg.fusesource.example.get.started.cfgDatei mit einem Texteditor und fügen Sie die folgenden Inhalte hinzu:portNumber=8182 - Wenn Sie die
get-started-basicFunktion 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-cxfFeature 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 Port8182horcht. - 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.javaDatei vomcxf-basic/src/test/java/org/fusesource/exampleVerzeichnis 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-basicwechseln und den folgenden Befehl eingeben:mvn -Ptest - Um die Funktion zu deinstallieren, geben Sie den folgenden Konsolenbefehl ein:
features:uninstall get-started-cxf