Foreword | 12 |
Vorwort der Autoren | 14 |
Die Autoren | 16 |
1 Einleitung | 18 |
1.1 Die OSGi-Service-Plattform | 19 |
1.1.1 Bundles | 19 |
1.1.2 Das OSGi-Framework | 21 |
1.2 Geschichte | 35 |
1.3 OSGi Enterprise Design | 36 |
1.3.1 Distributed OSGi | 37 |
1.3.2 JMX-Management | 39 |
1.4 OSGi vs. SOA | 40 |
1.5 Über dieses Buch | 41 |
2 OSGi-Implementierungen | 46 |
2.1 Die OSGi Alliance | 47 |
2.1.1 Vollmitglieder | 47 |
2.1.2 Assoziierte Unternehmen | 48 |
2.1.3 Unterstützer | 48 |
2.2 Zertifizierte Produkte | 48 |
2.3 Open Source-Implementierungen | 49 |
2.3.1 Eclipse Equinox | 49 |
2.3.2 Knopflerfish | 52 |
2.3.3 Apache Felix | 54 |
2.4 OSGi und das Spring-Framework | 57 |
2.5 Fazit | 59 |
3 JobTimer – Bundle-Grundlagen | 62 |
3.1 Voraussetzungen | 63 |
3.1.1 Projekt aufsetzen mit Maven | 63 |
3.1.2 Verwenden als Eclipse-Projekt | 65 |
3.1.3 POM-Datei anpassen | 66 |
3.2 JobTimer implementieren | 68 |
3.3 Verpacken als Bundle | 71 |
3.3.1 Verwendung von bnd wrap | 72 |
3.3.2 Verwendung von bnd build | 73 |
3.4 Bundles installieren und starten | 76 |
3.4.1 Starten der Plattform | 76 |
3.4.2 Installieren von Bundles | 77 |
3.4.3 Bundle Repositories | 79 |
3.4.4 Starten von Bundles | 80 |
3.4.5 Auflösen von Abhängigkeiten | 80 |
3.4.6 Herunterfahren der Plattform | 82 |
3.5 Fazit | 82 |
4 GateKeeper – OSGi-Projekt aufsetzen | 84 |
4.1 Voraussetzungen | 84 |
4.1.1 PAX-Werkzeuge | 85 |
4.1.2 Bundle-Automatik | 85 |
4.1.3 Master POM erstellen | 86 |
4.1.4 Bereitstellen der Bundles | 88 |
4.1.5 Startreihenfolge | 92 |
4.2 Erstellen des GateKeeper-Bundles | 93 |
4.2.1 Erstellen des Maven-Moduls | 93 |
4.2.2 Verwenden der Eclipse IDE | 94 |
4.2.3 GateKeeper implementieren | 96 |
4.2.4 Metadaten definieren | 98 |
4.3 Fazit | 99 |
5 Enunciator – Declarative Services | 102 |
5.1 Voraussetzungen | 102 |
5.1.1 Tücken optionaler Auflösung | 103 |
5.2 Erstellen des Enunciator-Bundles | 104 |
5.2.1 Erstellen des Maven-Moduls | 104 |
5.2.2 Enunciator implementieren | 105 |
5.2.3 Dienst deklarieren | 108 |
5.2.4 Installieren des Bundles | 110 |
5.3 Deklaration einer Komponente | 111 |
5.3.1 Attribute einer Komponente | 111 |
5.3.2 Kind-Elemente einer Komponente | 112 |
5.4 GateKeeper erweitern | 114 |
5.4.1 Zugriff auf das Enunciator-Package | 114 |
5.4.2 Lifecycle-Methoden erweitern | 115 |
5.4.3 Dynamischer Aufruf | 116 |
5.4.4 Exkurs: ServiceTrackerCustomizer | 117 |
5.4.5 Installieren des erweiterten Bundles | 119 |
5.5 Ausführen der Bundles | 120 |
5.5.1 Ausführen mit PAX Provision | 120 |
5.5.2 Ausführen mit dem PAX Runner Plugin | 121 |
5.6 Fazit | 123 |
6 Migration – Java-Archive zu Bundles erweitern | 124 |
6.1 Analyse des Java-Archivs | 124 |
6.1.1 Ermitteln von Abhängigkeiten mit Hilfe von bnd | 125 |
6.1.2 Analyse der Abhängigkeiten | 126 |
6.1.3 Laufzeitumgebung | 126 |
6.2 Standardmigration | 128 |
6.2.1 Festlegen der Metadaten | 128 |
6.2.2 Durchführen der Migration | 130 |
6.2.3 Bereitstellung | 131 |
6.3 Beistellungsmigration | 131 |
6.3.1 Aufnahme von Ressourcen | 132 |
6.3.2 Festlegen der Metadaten | 134 |
6.3.3 Durchführen der Migration | 134 |
6.3.4 Bereitstellung | 135 |
6.4 Transitive Migration | 136 |
6.4.1 Festlegen der Metadaten | 136 |
6.4.2 Migration der BouncyCastle-Archive | 137 |
6.4.3 Gemeinsame Migration aller BouncyCastle-Archive | 139 |
6.4.4 Festlegen der Metadaten | 140 |
6.4.5 Durchführen der Migration | 140 |
6.4.6 Bereitstellung | 141 |
6.5 Versionen und Versionsbereiche | 141 |
6.5.1 Referenzierung über Versionen | 142 |
6.5.2 Konventionen | 142 |
6.6 Fazit | 143 |
7 Worker – Fragmente und Integrationstests | 144 |
7.1 Voraussetzungen | 144 |
7.2 Die WorkerService-API | 145 |
7.2.1 Schnittstellendefinition | 145 |
7.2.2 POM-Datei | 146 |
7.3 WorkerService implementieren | 147 |
7.3.1 Vorüberlegungen | 147 |
7.3.2 Der Quellcode | 147 |
7.3.3 Komponente deklarieren | 153 |
7.3.4 POM-Datei anpassen | 154 |
7.4 GateKeeper erweitern | 155 |
7.5 Laufzeitverhalten | 158 |
7.5.1 Bundle stop | 159 |
7.5.2 Bundle start | 160 |
7.5.3 Bundle update | 160 |
7.5.4 Bundle refresh | 161 |
7.6 Fragmente | 162 |
7.6.1 Verwendung im Projekt | 162 |
7.6.2 Erstellung des Bundles | 163 |
7.6.3 Festlegen der Metadaten | 163 |
7.6.4 Test des Fragments | 163 |
7.7 Integrationstest mit PAX Exam | 164 |
7.7.1 Test-Bundle erstellen | 165 |
7.7.2 POM-Datei anpassen | 165 |
7.7.3 Generierter Integrationstest | 168 |
7.7.4 Einfacher Integrationstest | 168 |
7.7.5 Erweiterter Integrationstest | 171 |
7.8 Fazit | 177 |
8 SkilledWorker – Blueprint Services | 178 |
8.1 Voraussetzungen | 179 |
8.2 Erstellen des SkilledWorker-Bundles | 179 |
8.2.1 Erstellen des Maven-Moduls | 179 |
8.2.2 Verwenden der Eclipse IDE | 180 |
8.2.3 SkilledWorker implementieren | 180 |
8.3 Blueprint Services | 186 |
8.4 Spring Dynamic Modules for OSGi | 189 |
8.4.1 GateKeeper erweitern | 192 |
8.4.2 Services filtern | 193 |
8.5 Fazit | 195 |
9 WebMonitor – Webapplikationen mit OSGi | 198 |
9.1 Voraussetzungen | 198 |
9.2 Erstellen des WebMonitor-Webbundles | 199 |
9.2.1 Anpassen des POMs | 199 |
9.2.2 Services und Controller bereitstellen | 201 |
9.2.3 JSP View erzeugen | 205 |
9.2.4 Manifest anpassen | 206 |
9.2.5 OSGi-spezifisches web.xml | 207 |
9.3 Fazit | 209 |
10 Remote Services – Informationen über Distanz austauschen | 210 |
10.1 Voraussetzungen | 210 |
10.2 Erstellen des RemoteLogServer-Bundles | 211 |
10.2.1 Erstellen des Maven-Moduls | 211 |
10.2.2 Implementierung des RemoteLogServices | 211 |
10.3 Bundles starten mit PAX Runner | 213 |
10.3.1 Installation von PAX Runner | 214 |
10.3.2 Starten des RemoteLogServer mit PAX Runner | 214 |
10.4 Webservice testen | 215 |
10.5 Remote Service konsumieren | 216 |
10.6 Enunciator mit Fragment erweitern | 216 |
10.7 GossipMonger starten | 217 |
10.8 Fazit | 220 |
11 Police – System-Monitoring im laufenden Betrieb | 222 |
11.1 Installation der Apache Felix Web Console | 222 |
11.2 Konfiguration der Web Console | 225 |
11.2.1 Benutzer/Passwort ändern | 225 |
11.2.2 HTTP-Ports anpassen | 226 |
11.3 Fazit | 227 |
12 Big Brother – Überwachung und Steuerung von außen | 228 |
12.1 JobTimer-Intervall über JMX verändern | 228 |
12.2 JobTimer-Interval im Bundle-Cache persistieren | 232 |
12.3 Fazit | 235 |
13 Launcher – Starten von OSGi-Anwendungen | 236 |
13.1 Framework Launching API | 236 |
13.1.1 Schnittstellen | 237 |
13.1.2 Framework Eigenschaften | 237 |
13.2 Erstellen des Launchers | 239 |
13.2.1 Maven-Projekt erstellen | 239 |
13.2.2 Der Launcher im Quelltext | 239 |
13.2.3 Framework starten | 244 |
13.2.4 FrameworkFactory definieren | 244 |
13.2.5 Framework konfigurieren | 245 |
13.2.6 Infrastrukturmaßnahmen | 245 |
13.2.7 Applikations-Bundles | 250 |
13.3 Launcher bereitstellen | 251 |
13.3.1 Abhängigkeiten kopieren | 251 |
13.3.2 Manifest erweitern | 252 |
13.3.3 Assembly erstellen | 252 |
13.3.4 Launcher testen | 253 |
13.3.5 Bereitgestellte ApplicationBundles | 254 |
13.4 Fazit | 254 |
14 Aliens – Bundles from Outer (Java) Space | 256 |
14.1 Scala | 256 |
14.2 ScalaModules | 258 |
14.3 Das Chirp-Bundle | 260 |
14.4 Fazit | 265 |
Stichwortverzeichnis | 266 |