Weber / Baumgartner / Braun OSGi für Praktiker
1. Auflage 2010
ISBN: 978-3-446-42437-1
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)
Prinzipien, Werkzeuge und praktische Anleitungen auf dem Weg zur "kleinen SOA"
E-Book, Deutsch, 274 Seiten
ISBN: 978-3-446-42437-1
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)
Autoren/Hrsg.
Weitere Infos & Material
1;Foreword;12
2;Vorwort der Autoren;14
3;Die Autoren;16
4;1 Einleitung;18
4.1;1.1 Die OSGi-Service-Plattform;19
4.1.1;1.1.1 Bundles;19
4.1.2;1.1.2 Das OSGi-Framework;21
4.2;1.2 Geschichte;35
4.3;1.3 OSGi Enterprise Design;36
4.3.1;1.3.1 Distributed OSGi;37
4.3.2;1.3.2 JMX-Management;39
4.4;1.4 OSGi vs. SOA;40
4.5;1.5 Über dieses Buch;41
5;2 OSGi-Implementierungen;46
5.1;2.1 Die OSGi Alliance;47
5.1.1;2.1.1 Vollmitglieder;47
5.1.2;2.1.2 Assoziierte Unternehmen;48
5.1.3;2.1.3 Unterstützer;48
5.2;2.2 Zertifizierte Produkte;48
5.3;2.3 Open Source-Implementierungen;49
5.3.1;2.3.1 Eclipse Equinox;49
5.3.2;2.3.2 Knopflerfish;52
5.3.3;2.3.3 Apache Felix;54
5.4;2.4 OSGi und das Spring-Framework;57
5.5;2.5 Fazit;59
6;3 JobTimer – Bundle-Grundlagen;62
6.1;3.1 Voraussetzungen;63
6.1.1;3.1.1 Projekt aufsetzen mit Maven;63
6.1.2;3.1.2 Verwenden als Eclipse-Projekt;65
6.1.3;3.1.3 POM-Datei anpassen;66
6.2;3.2 JobTimer implementieren;68
6.3;3.3 Verpacken als Bundle;71
6.3.1;3.3.1 Verwendung von bnd wrap;72
6.3.2;3.3.2 Verwendung von bnd build;73
6.4;3.4 Bundles installieren und starten;76
6.4.1;3.4.1 Starten der Plattform;76
6.4.2;3.4.2 Installieren von Bundles;77
6.4.3;3.4.3 Bundle Repositories;79
6.4.4;3.4.4 Starten von Bundles;80
6.4.5;3.4.5 Auflösen von Abhängigkeiten;80
6.4.6;3.4.6 Herunterfahren der Plattform;82
6.5;3.5 Fazit;82
7;4 GateKeeper – OSGi-Projekt aufsetzen;84
7.1;4.1 Voraussetzungen;84
7.1.1;4.1.1 PAX-Werkzeuge;85
7.1.2;4.1.2 Bundle-Automatik;85
7.1.3;4.1.3 Master POM erstellen;86
7.1.4;4.1.4 Bereitstellen der Bundles;88
7.1.5;4.1.5 Startreihenfolge;92
7.2;4.2 Erstellen des GateKeeper-Bundles;93
7.2.1;4.2.1 Erstellen des Maven-Moduls;93
7.2.2;4.2.2 Verwenden der Eclipse IDE;94
7.2.3;4.2.3 GateKeeper implementieren;96
7.2.4;4.2.4 Metadaten definieren;98
7.3;4.3 Fazit;99
8;5 Enunciator – Declarative Services;102
8.1;5.1 Voraussetzungen;102
8.1.1;5.1.1 Tücken optionaler Auflösung;103
8.2;5.2 Erstellen des Enunciator-Bundles;104
8.2.1;5.2.1 Erstellen des Maven-Moduls;104
8.2.2;5.2.2 Enunciator implementieren;105
8.2.3;5.2.3 Dienst deklarieren;108
8.2.4;5.2.4 Installieren des Bundles;110
8.3;5.3 Deklaration einer Komponente;111
8.3.1;5.3.1 Attribute einer Komponente;111
8.3.2;5.3.2 Kind-Elemente einer Komponente;112
8.4;5.4 GateKeeper erweitern;114
8.4.1;5.4.1 Zugriff auf das Enunciator-Package;114
8.4.2;5.4.2 Lifecycle-Methoden erweitern;115
8.4.3;5.4.3 Dynamischer Aufruf;116
8.4.4;5.4.4 Exkurs: ServiceTrackerCustomizer;117
8.4.5;5.4.5 Installieren des erweiterten Bundles;119
8.5;5.5 Ausführen der Bundles;120
8.5.1;5.5.1 Ausführen mit PAX Provision;120
8.5.2;5.5.2 Ausführen mit dem PAX Runner Plugin;121
8.6;5.6 Fazit;123
9;6 Migration – Java-Archive zu Bundles erweitern;124
9.1;6.1 Analyse des Java-Archivs;124
9.1.1;6.1.1 Ermitteln von Abhängigkeiten mit Hilfe von bnd;125
9.1.2;6.1.2 Analyse der Abhängigkeiten;126
9.1.3;6.1.3 Laufzeitumgebung;126
9.2;6.2 Standardmigration;128
9.2.1;6.2.1 Festlegen der Metadaten;128
9.2.2;6.2.2 Durchführen der Migration;130
9.2.3;6.2.3 Bereitstellung;131
9.3;6.3 Beistellungsmigration;131
9.3.1;6.3.1 Aufnahme von Ressourcen;132
9.3.2;6.3.2 Festlegen der Metadaten;134
9.3.3;6.3.3 Durchführen der Migration;134
9.3.4;6.3.4 Bereitstellung;135
9.4;6.4 Transitive Migration;136
9.4.1;6.4.1 Festlegen der Metadaten;136
9.4.2;6.4.2 Migration der BouncyCastle-Archive;137
9.4.3;6.4.3 Gemeinsame Migration aller BouncyCastle-Archive;139
9.4.4;6.4.4 Festlegen der Metadaten;140
9.4.5;6.4.5 Durchführen der Migration;140
9.4.6;6.4.6 Bereitstellung;141
9.5;6.5 Versionen und Versionsbereiche;141
9.5.1;6.5.1 Referenzierung über Versionen;142
9.5.2;6.5.2 Konventionen;142
9.6;6.6 Fazit;143
10;7 Worker – Fragmente und Integrationstests;144
10.1;7.1 Voraussetzungen;144
10.2;7.2 Die WorkerService-API;145
10.2.1;7.2.1 Schnittstellendefinition;145
10.2.2;7.2.2 POM-Datei;146
10.3;7.3 WorkerService implementieren;147
10.3.1;7.3.1 Vorüberlegungen;147
10.3.2;7.3.2 Der Quellcode;147
10.3.3;7.3.3 Komponente deklarieren;153
10.3.4;7.3.4 POM-Datei anpassen;154
10.4;7.4 GateKeeper erweitern;155
10.5;7.5 Laufzeitverhalten;158
10.5.1;7.5.1 Bundle stop;159
10.5.2;7.5.2 Bundle start;160
10.5.3;7.5.3 Bundle update;160
10.5.4;7.5.4 Bundle refresh;161
10.6;7.6 Fragmente;162
10.6.1;7.6.1 Verwendung im Projekt;162
10.6.2;7.6.2 Erstellung des Bundles;163
10.6.3;7.6.3 Festlegen der Metadaten;163
10.6.4;7.6.4 Test des Fragments;163
10.7;7.7 Integrationstest mit PAX Exam;164
10.7.1;7.7.1 Test-Bundle erstellen;165
10.7.2;7.7.2 POM-Datei anpassen;165
10.7.3;7.7.3 Generierter Integrationstest;168
10.7.4;7.7.4 Einfacher Integrationstest;168
10.7.5;7.7.5 Erweiterter Integrationstest;171
10.8;7.8 Fazit;177
11;8 SkilledWorker – Blueprint Services;178
11.1;8.1 Voraussetzungen;179
11.2;8.2 Erstellen des SkilledWorker-Bundles;179
11.2.1;8.2.1 Erstellen des Maven-Moduls;179
11.2.2;8.2.2 Verwenden der Eclipse IDE;180
11.2.3;8.2.3 SkilledWorker implementieren;180
11.3;8.3 Blueprint Services;186
11.4;8.4 Spring Dynamic Modules for OSGi;189
11.4.1;8.4.1 GateKeeper erweitern;192
11.4.2;8.4.2 Services filtern;193
11.5;8.5 Fazit;195
12;9 WebMonitor – Webapplikationen mit OSGi;198
12.1;9.1 Voraussetzungen;198
12.2;9.2 Erstellen des WebMonitor-Webbundles;199
12.2.1;9.2.1 Anpassen des POMs;199
12.2.2;9.2.2 Services und Controller bereitstellen;201
12.2.3;9.2.3 JSP View erzeugen;205
12.2.4;9.2.4 Manifest anpassen;206
12.2.5;9.2.5 OSGi-spezifisches web.xml;207
12.3;9.3 Fazit;209
13;10 Remote Services – Informationen über Distanz austauschen;210
13.1;10.1 Voraussetzungen;210
13.2;10.2 Erstellen des RemoteLogServer-Bundles;211
13.2.1;10.2.1 Erstellen des Maven-Moduls;211
13.2.2;10.2.2 Implementierung des RemoteLogServices;211
13.3;10.3 Bundles starten mit PAX Runner;213
13.3.1;10.3.1 Installation von PAX Runner;214
13.3.2;10.3.2 Starten des RemoteLogServer mit PAX Runner;214
13.4;10.4 Webservice testen;215
13.5;10.5 Remote Service konsumieren;216
13.6;10.6 Enunciator mit Fragment erweitern;216
13.7;10.7 GossipMonger starten;217
13.8;10.8 Fazit;220
14;11 Police – System-Monitoring im laufenden Betrieb;222
14.1;11.1 Installation der Apache Felix Web Console;222
14.2;11.2 Konfiguration der Web Console;225
14.2.1;11.2.1 Benutzer/Passwort ändern;225
14.2.2;11.2.2 HTTP-Ports anpassen;226
14.3;11.3 Fazit;227
15;12 Big Brother – Überwachung und Steuerung von außen;228
15.1;12.1 JobTimer-Intervall über JMX verändern;228
15.2;12.2 JobTimer-Interval im Bundle-Cache persistieren;232
15.3;12.3 Fazit;235
16;13 Launcher – Starten von OSGi-Anwendungen;236
16.1;13.1 Framework Launching API;236
16.1.1;13.1.1 Schnittstellen;237
16.1.2;13.1.2 Framework Eigenschaften;237
16.2;13.2 Erstellen des Launchers;239
16.2.1;13.2.1 Maven-Projekt erstellen;239
16.2.2;13.2.2 Der Launcher im Quelltext;239
16.2.3;13.2.3 Framework starten;244
16.2.4;13.2.4 FrameworkFactory definieren;244
16.2.5;13.2.5 Framework konfigurieren;245
16.2.6;13.2.6 Infrastrukturmaßnahmen;245
16.2.7;13.2.7 Applikations-Bundles;250
16.3;13.3 Launcher bereitstellen;251
16.3.1;13.3.1 Abhängigkeiten kopieren;251
16.3.2;13.3.2 Manifest erweitern;252
16.3.3;13.3.3 Assembly erstellen;252
16.3.4;13.3.4 Launcher testen;253
16.3.5;13.3.5 Bereitgestellte ApplicationBundles;254
16.4;13.4 Fazit;254
17;14 Aliens – Bundles from Outer (Java) Space;256
17.1;14.1 Scala;256
17.2;14.2 ScalaModules;258
17.3;14.3 Das Chirp-Bundle;260
17.4;14.4 Fazit;265
18;Stichwortverzeichnis;266
Kapitel 4 GateKeeper – OSGi-Projekt aufsetzen (S. 67-68)
In diesem Kapitel werden die Grundlagen für die Einrichtung von OSGi-Projekten vermittelt. Das Resultat dieses Kapitels ist ein Gesamtprojekt namens GossipMonger sowie ein darin enthaltenes Bundle, welches als OSGi EventHandler auf das Taktsignal des JobTimers hört und zum Anlass nimmt, in einem Verzeichnis nach Dateien zu sehen. Sind solche vorhanden, gibt es eine entsprechende Meldung aus. Dieses Pförtner-Bundle soll auf den Namen „GateKeeper“ hören.
Alle Bundles sollen automatisch per Maven erstellt und in einer Laufzeitumgebung gestartet werden. Zunächst wird ein Maven Super-POM erstellt, um dieses und die noch kommenden GossipMonger-Module vernünftig verwalten zu können. Das JobTimer- Bundle wird als Abhängigkeit importiert, um anschließend mit PAX Provision einen sehr bequemen Weg zur Bestückung der OSGi-Plattform mit allen notwendigen Bundles gehen zu können. Das neue GossipMonger-Modul namens Gate- Keeper wird per pax-create-bundle generiert und als Maven-Projekt in Eclipse importiert. Schließlich wird der GateKeeper als EventHandler implementiert, am Framework registriert und mit PAX Provision samt der übrigen beteiligten Bundles gestartet.
4.1 Voraussetzungen
Kapitel 3 hat gezeigt, dass einige Eigenschaften und auch manches Verhalten des JobTimer-Teilprojekts für andere Teile des GossipMonger-Projekts nützlich sein dürften. Zudem ist der Automatisierungsgrad des Erstellungsprozesses noch verbesserungsfähig, vor allem im Hinblick auf das eigentliche Ziel der automatisierten Bundle-Erstellung und dessen Installation in das lokale Maven-Repository. Die manuelle Erweiterung der JobTimer JAR-Datei um OSGi-Header mittels des bnd-Werkzeugs sollte folglich in den Maven-Erstellungslauf integriert werden.
4.1.1 PAX-Werkzeuge
Diese Aufgaben werden gelöst durch die Verwendung des maven-bundle-plugin von Apache Felix1, welches das bnd-Werkzeug zur Ergänzung von JARs um OSGi-Header nutzt, und durch die Generalisierung der Standardvorgaben für die Projektmodule in einem GossipMonger Master POM. Für dieses und die weiteren Module des GossipMonger-Projekts werden Teile des PAX-Werkzeugkastens verwendet, insbesondere PAX Construct2 zum Generieren und Einbinden von Bundles sowie das ebenfalls darin befindliche PAX Provision zur Bestückung der OSGi-Plattform. Die PAX-Werkzeuge werden von der OPS4JCommunity3 zur Verfügung gestellt, die auf den etwas sperrigen Namen „Open Participation Software for Java“ hört und sich nicht nur die Bereitstellung offener und freier Software auf die Fahnen geschrieben hat, sondern auch das Mitarbeiten daran ebenso offen nach dem Vorbild der Wikipedia gestalten möchte.