SAP Application Interface Framework (AIF) - Webinar Schnittstellenbetrieb & -...
Realisierung von Service-Varianten und zustandsbehafteten Services aus Basis von OSGi
1. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Realisierungs-Probleme
Lösungsansätze und technische Umsetzung
Zusammenfassung
Realisierung von Service-Varianten
und zustandsbehafteten Services
auf Basis von OSGi
Timo Kehrer Sven Wenzel Maik Schmidt
Universität Siegen, Praktische Informatik
{kehrer, wenzel, mschmidt}@informatik.uni-siegen.de
OSGi Users’-Forum Treffen 2009
27.10.2009 @ Eclipse Summit in Ludwigsburg
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
2. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Realisierungs-Probleme
Lösungsansätze und technische Umsetzung
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
3. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
4. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Versionen und Varianten technischer Dokumente
Technische Dokumente mit grafischer Notation gewinnen
zunehmend an Bedeutung, bspw.
CAD-Dokumente
UML-Modelle
Matlab/Simulink-Modelle
etc.
Komplexe Dokumente werden in der Regel im Team bearbeitet
und in Repositories gespeichert
Dokumente existieren in mehreren Versionen (Revisionen oder
Varianten)
Daraus resultieren eine Reihe praktischer Probleme:
Konfigurationsmanagement (Diff/Merge)
Analyse von Dokumenthistorien
Clone Detection
etc.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
5. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Versionen und Varianten technischer Dokumente
Technische Dokumente mit grafischer Notation gewinnen
zunehmend an Bedeutung, bspw.
CAD-Dokumente
UML-Modelle
Matlab/Simulink-Modelle
etc.
Komplexe Dokumente werden in der Regel im Team bearbeitet
und in Repositories gespeichert
Dokumente existieren in mehreren Versionen (Revisionen oder
Varianten)
Daraus resultieren eine Reihe praktischer Probleme:
Konfigurationsmanagement (Diff/Merge)
Analyse von Dokumenthistorien
Clone Detection
etc.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
6. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Textuelle Dokumente vs. grafische/graphbasierte Dokumente
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
7. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Differenzen auf Basis der textuellen Repräsentation
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
8. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Konzeptuelle Differenzen
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
9. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Applikationsdomäne
Realisierungs-Probleme
Problemmotivation
Lösungsansätze und technische Umsetzung
Zusammenfassung
Fazit
Text-orientierte Werkzeuge ungeeignet für technische
Dokumente mit grafischer Notation
Einsatz grafischer Dokumente und Modelle rasant zunhemend,
bspw. im Zuge moderner Entwicklungsparadigmen wie der
modellbasierten Software-Entwicklung (MDA, MDD, MDSD, etc.)
Daher Bedarf für hoch optimierte Verfahren und Werkzeuge für
Modelle und grafische Dokumente
→ SiDiff-Projekt (www.sidiff.org)
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
10. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
11. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Workflow (Hier: Diff-Prozess)
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
12. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Komponenten und Services (Hier: Diff-Applikation, vereinfacht)
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
13. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Gründe für den Einsatz von OSGi
Architektonische Gründe
Flexibilität, Austauschbarkeit
Lose Kopplung von klar definierten Komponenten/Services
Organisatorische Gründe
“Echtes” Geheimhaltungsprinzip auf Komponentenebene:
Einhaltung von Konventionen weitestgehend durch das
Framework sichergestellt
Effektive Maßnahme um der Degeneration der Architektur
entgegen zu wirken
Pragmatische Gründe
Umsetzung des Service-Konzepts auf Basis von Java
Nahtlose Integration in die Eclipse IDE
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
14. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Gründe für den Einsatz von OSGi
Architektonische Gründe
Flexibilität, Austauschbarkeit
Lose Kopplung von klar definierten Komponenten/Services
Organisatorische Gründe
“Echtes” Geheimhaltungsprinzip auf Komponentenebene:
Einhaltung von Konventionen weitestgehend durch das
Framework sichergestellt
Effektive Maßnahme um der Degeneration der Architektur
entgegen zu wirken
Pragmatische Gründe
Umsetzung des Service-Konzepts auf Basis von Java
Nahtlose Integration in die Eclipse IDE
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
15. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Architektur
Realisierungs-Probleme
Technologische Umsetzung
Lösungsansätze und technische Umsetzung
Zusammenfassung
Gründe für den Einsatz von OSGi
Architektonische Gründe
Flexibilität, Austauschbarkeit
Lose Kopplung von klar definierten Komponenten/Services
Organisatorische Gründe
“Echtes” Geheimhaltungsprinzip auf Komponentenebene:
Einhaltung von Konventionen weitestgehend durch das
Framework sichergestellt
Effektive Maßnahme um der Degeneration der Architektur
entgegen zu wirken
Pragmatische Gründe
Umsetzung des Service-Konzepts auf Basis von Java
Nahtlose Integration in die Eclipse IDE
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
16. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
17. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
3-Wege-Vergleich/-Mischen
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
18. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
3-Wege-Vergleich/-Mischen
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
19. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
3-Wege-Vergleich/-Mischen
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
20. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Nutzung von Services in verschiedenen Kontexten
Es kann oft vorkommen, dass ein Service gleichzeitig in
verschiedenen Kontexten genutzt werden soll.
Problematisch ist dies für zustandsbehaftete Services
Hier kann nicht genau eine Service-Instanz beim
OSGi-Framework registriert werden.
Ein erster Lösungsansatz ist die OSGi Service Factory
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
21. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Die OSGi Service Factory und deren Grenzen
OSGi Service Factory
Die Service Factory ist Bestandteil des OSGi Standards.
Kann anstatt des eigentlichen Services beim OSGi-Framework
registriert werden.
Die eigentliche Service-Instanz wird bei der Anforderung des
Services transparent über die Factory erzeugt.
Grenzen der OSGi Service Factory
Die erzeugten Service-Instanzen werden vom OSGi-Framework
pro anfragendem Bundle gecached.
Szenarien, in denen ein Bundle verschiedene Instanzen eines
Services erhalten sollen sind damit nicht realisierbar.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
22. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Die OSGi Service Factory und deren Grenzen
OSGi Service Factory
Die Service Factory ist Bestandteil des OSGi Standards.
Kann anstatt des eigentlichen Services beim OSGi-Framework
registriert werden.
Die eigentliche Service-Instanz wird bei der Anforderung des
Services transparent über die Factory erzeugt.
Grenzen der OSGi Service Factory
Die erzeugten Service-Instanzen werden vom OSGi-Framework
pro anfragendem Bundle gecached.
Szenarien, in denen ein Bundle verschiedene Instanzen eines
Services erhalten sollen sind damit nicht realisierbar.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
23. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Konfigurierbare Services und Service-Varianten
Oftmals benötigen wir Services, die z.B. für einen bestimmten
Dokumenttyp konfiguriert werden.
Ein Beispiel ist der ähnlichkeits-basierte Matching-Service, welcher
durch eine Dokumenttyp-spezifische Heuristik konfiguriert wird.
Zudem sollte die Koexistenz von mehreren Service-Instanzen,
welche verschieden konfiguriert sind unterstützt werden.
So zum Beispiel beim Einsatz von SiDiff im Rahmen einer
Entwicklungsumgebung, welche mehrere Dokumentypen
unterstützt.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
24. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi? Einführendes Beispiel
Realisierungs-Probleme Zustandsbehaftete Services
Lösungsansätze und technische Umsetzung Service-Varianten
Zusammenfassung
Konfigurierbare Services und Service-Varianten
Oftmals benötigen wir Services, die z.B. für einen bestimmten
Dokumenttyp konfiguriert werden.
Ein Beispiel ist der ähnlichkeits-basierte Matching-Service, welcher
durch eine Dokumenttyp-spezifische Heuristik konfiguriert wird.
Zudem sollte die Koexistenz von mehreren Service-Instanzen,
welche verschieden konfiguriert sind unterstützt werden.
So zum Beispiel beim Einsatz von SiDiff im Rahmen einer
Entwicklungsumgebung, welche mehrere Dokumentypen
unterstützt.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
25. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
26. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
27. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Der Service-Helper
Keine direkte Kommunikation mit
dem OSGi-Framework über den
OSGi-BundleContext
Service-Helper kapselt die Zugriffe
auf den Service-Layer des
OSGi-Frameworks
Allgemeine Schnittstelle für
Aufgaben wie bspw. die
Registrierung oder das Anfordern
von Services
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
28. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
29. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Definition der Service-Schnittstelle
Heißt wie die Service-Schnittstelle trägt
“Leeres” Interface
das Suffix Provider.
Dient als “Marker”
Liegt im selben Paket wie die
im automatischen
Service-Schnittstelle.
Instanzi-
ierungsprozess Erbt vom Interface ServiceProvider,
getypt auf die Service-Schnittstelle.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
30. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Implementierung des Services
Implementierung des Erzeugung einer Instanz des
Dienstes Dienstes
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
31. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Bekanntmachen der Service-Implementierung
§
p u b l i c c l a s s A c t i v a t o r implements B u n d l e A c t i v a t o r {
p u b l i c v o i d s t a r t ( B u n d l e C o n t e x t c o n t e x t ) throws E x c e p t i o n {
ServiceHelper . registerServiceProvider (
context ,
MyServiceProvider . class ,
new M y S e r v i c e P r o v i d e r I m p l ( ) ,
null , / / DocType
null ) ; / / Variant
}
p u b l i c v o i d s t o p ( B u n d l e C o n t e x t c o n t e x t ) throws E x c e p t i o n {
}
}
¦
¥
Registriert wird der ServiceProvider
Die Service-Implementierung selbst muss nicht registriert
werden
Sie wird über den ServiceProvider bereitgestellt
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
32. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Verwenden des Services
§
M y S e r v i c e ms = S e r v i c e H e l p e r . g e t S e r v i c e (
context , BundleContext
MyService . c l a s s , ServiceInterface
null , DocumentType
null ) ; Variant
ms . d o S o m e t h i n g ( ) ;
¦
¥
Der Zugriff auf den Provider und die Instanzierung der
eigentlichen Service-Implementierung erfolgt transparent.
Der ServiceHelper prüft, ob der angeforderte Service ein
ProvideableService ist.
Wenn ja, wird beim OSGi-Framework ein entsprechend
benannter ServiceProvider (hier MyServiceProvider)
gesucht und dessen createInstance()-Methode aufgerufen.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
33. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
34. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Definition der Service-Schnittstelle
Konfigurierbare Services müssen das Interface
ConfigurableService erweitern.
§
public interface ConfigurableService {
public String configure ( Object . . . configData ) ;
public void d e c o n f i g u r e ( ) ;
public Dictionary String , String g e t P r o p e r t i e s ( ) ;
}
¦
¥
Die configure()-Methode wird aufgerufen, um den Service
mit beliebigen Daten (Object...) zu konfigurieren.
Der Rückgabewert der configure()-Methode ist der
Dokumenttyp für den die Konfiguration geeignet ist.
Da sich der Typ i.d.R. aus den Konfigurationsdaten ableitet, kann
er sinnvollerweise nur hier ermittelt werden.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
35. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Implementierung des Services
Implementierung unterscheidet sich von “einfachen Services” nur
durch die zusätzlichen Methoden des ConfigurableService
damit wird der Service-Instanz die Konfiguration übergeben
übergeben wird.
§
p u b l i c c l a s s M y C o n f i g u r a b l e S e r v i c e I m p l implements M y C o n f i g u r a b l e S e r v i c e
S t r i n g docType ;
public String configure ( Object . . . configData ) {
// ...
r e t u r n docType ;
}
public void d e c o n f i g u r e ( ) {
}
public Dictionary String , String g e t P r o p e r t i e s ( ) {
return null ;
}
}
¦
¥
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
36. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Bekanntmachen der Service-Implementierung
Registrierung der Schnittstelle und der konkreten
Implementierung des konfigurierbaren Services beim
ServiceHelper
§
p u b l i c c l a s s A c t i v a t o r implements B u n d l e A c t i v a t o r {
p u b l i c v o i d s t a r t ( B u n d l e C o n t e x t c o n t e x t ) throws E x c e p t i o n {
ServiceHelper . registerServiceConfigurator (
context ,
MyConfigurableService . class ,
MyConfigurableServiceImpl . class ) ;
}
p u b l i c v o i d s t o p ( B u n d l e C o n t e x t c o n t e x t ) throws E x c e p t i o n {
}
}
¦
¥
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
37. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Konfiguration des Services
Methode des ServiceHelpers: Aufrufbeispiel:
§ §
public s t a t i c void c o n f i g u r e I n s t a n c e ( ServiceHelper . configureInstance (
BundleContext context , context ,
C l a s s ? i n t e r f a c e C l a s s , MyConfigurableService . class ,
S t r i n g docType , g e t E P a c k a g e ( ) . getNsURI ( ) ,
String variant , SIMPLE ,
Object . . . configData ) c o n f i g . xml ) ;
¦
¥¦
¥
Anschließend steht der Service in konfigurierter Form zur
Verfügung.
Die eigentliche Konfiguration erfolgt transparent durch den
ServiceHelper.
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
38. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Verwenden des Services
Um einen fertig konfigurierten Service zu verwenden, wird dieser
wie alle anderen Services über den ServiceHelper
angefordert.
Hier müssen jedoch der Dokumenttyp oder der Dokumenttyp
und die Variante als Parameter mitgegeben werden, z.B.:
§
M y S e r v i c e ms = S e r v i c e H e l p e r . g e t S e r v i c e (
context ,
MyConfigurableService . class ,
eObj . e C l a s s ( ) . g e t E P a c k a g e ( ) . getNsURI ( ) ,
SIMPLE ) ;
¦
¥
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
39. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Outline
1 OSGi-Einsatzkontext: “SiDiff”
Applikationsdomäne
Problemmotivation
2 Warum OSGi?
Architektur
Technologische Umsetzung
3 Realisierungs-Probleme
Einführendes Beispiel
Zustandsbehaftete Services
Service-Varianten
4 Lösungsansätze und technische Umsetzung
Kapselung der OSGi Service-Schicht
Zustandsbehaftete Services: “ProvideableService”
Service-Varianten: “ConfigurableService”
Kombination: “ConfigurableProvideableService”
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
40. OSGi-Einsatzkontext: “SiDiff”
Kapselung der OSGi Service-Schicht
Warum OSGi?
Zustandsbehaftete Services: “ProvideableService”
Realisierungs-Probleme
Service-Varianten: “ConfigurableService”
Lösungsansätze und technische Umsetzung
Kombination: “ConfigurableProvideableService”
Zusammenfassung
Konfigurierbare und zustandsbehaftete Services
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
41. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Realisierungs-Probleme
Lösungsansätze und technische Umsetzung
Zusammenfassung
Zusammenfassung
SiDiff als Werkzeugkasten zum Bau von Differenz- und
Mischwerkzeugen für Modelle
Realisierung einer Service-orientierten Architektur auf Basis von
OSGi
Umsetzung der SiDiff-spezifischen Anforderungen durch eine auf
dem OSGi Standard aufbauende Service-Schicht
Kapselung des OSGi-Frameworks
Unterstützung von zustandsbehafteten Services
Unterstützung von Service-Varianten
Unterstützung der Kombination beider Service-Arten
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi
42. OSGi-Einsatzkontext: “SiDiff”
Warum OSGi?
Realisierungs-Probleme
Lösungsansätze und technische Umsetzung
Zusammenfassung
Vielen Dank für Ihre Aufmerksamkeit
Fragen?
www.sidiff.org
Timo Kehrer Service-Varianten und zustandsbehaftete Services auf Basis von OSGi