Bernd Weber
OSGi für Praktiker
Prinzipien, Werkzeuge und praktische Anleitungen auf dem Weg zur `kleinen SOA`
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
© 2009-2024 ciando GmbH