Teil

Werbung
1 Java basierte Komponentenmodelle
1.1 Grundlagen
1 Java basierte Komponentenmodelle
Software Komponenten
Software Komponenten
Szyperski
Eine Softwarekomponente ist ein wiederverwendbares Stück Software
I
hat eine gut spezifizierte Schnittstelle
I
kann in nicht-vorhergeplanten Kontexten eingesetzt werden
I
ist eine eigenständig vermarktbare Einheit
I
Standard-Konventionen für die Schnittstellen von
Software-Komponenten
I
I
Ziele: Einfache Verwendbarkeit + Wiederverwendbarkeit
Software-Komponenten sind selbst-beschreibend
I
Automatische Analyse von Schnittstelle und Eigenschaften möglich
I
Beispiele
I
I
1.1 Grundlagen
Dialog einer graphischen Oberfläche
I
Module einer Textverarbeitung (z.B. Rechtschreibkorrektur)
I
Modul welches ein Gerät integriert (z.B. Drucker)
I
I
Introspection / Reflection - Mechanismen
Interface-Repository
Namens-Konventionen
Zusammenstellung zu komplexen Anwendungen mit grafischen
Werkzeugen (Builder-Tools)
I
Software-Baukasten
Klassen == Komponenten ?
c Rüdiger Kapitza
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1-1
c Rüdiger Kapitza
1.1 Grundlagen
1 Java basierte Komponentenmodelle
Software Komponenten
I 1-2
1.1 Grundlagen
Richtlinien für Software-Komponenten
I
I
I
I
I
I
I
I
I
I
MW
I 1-3
Namenskonventionen
Repositories, Introspection-Mechanismus
Schnittstellen-Semantik
Programmiermethodik
Beispiele Komponentenarchitekturen für Java
I
WS 08/09
MW
Software Komponenten
I
c Rüdiger Kapitza
WS 08/09
JavaBeans
EJB – Enterprise Java Beans
Spring
Jini
OSGi
CORBA Component Model
c Rüdiger Kapitza
WS 08/09
MW
I 1-4
1 Java basierte Komponentenmodelle
1.1 Grundlagen
1 Java basierte Komponentenmodelle
Java im Kontext von Komponentensystemen
Java Beans
Ziele der Sprache
I Lösung der verbreiteten Probleme bei der Entwicklung und Verteilung
von Software
I
I
I
1.2 Java Beans
I
verschiedene Betriebssysteme (Unix, Windows, MacOS, ?)
verschiedene Hardware-Architekturen
Java Beans ist eine Schnittstellen-Spezifikation für
wiederverwendbarer Software-Komponenten in Java
I
I
Java: Sprache und Ausführungsumgebung für sichere,schnelle und
sehr robuste Anwendungen auf verschiedenen Plattformen in
heterogenen verteilten Netzen
I
definiert Java-Komponenten
und wie sie zusammenarbeiten
Eine Bean ist eine beliebige Java-Klasse, die den Java
Beans-Konventionen folgt
Wesentliche Eigenschaften für Komponenten
I
objektorientiert
I
Polymorphismus bei Methodenaufrufen
sehr flexibel (dynamisches Laden und Binden)
I
I
I
Die offizielle Definition von Sun:
A Java Bean is a reusable software component that can be visually manipulated in builder tools.
Kann auch problematisch sein! ⇒ OSGi
Reflection/Introspection Mechanismus
c Rüdiger Kapitza
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1-5
1 Java basierte Komponentenmodelle
I
I
I
I
die Verknüpfungspunkte für Beans
I
Adapter
I
Datenbank-Schnittstelle
Timer
I
I
Introspection
I
Knöpfe, Regler, Textfenster
HTML rendering Bean
zur Schnittstellenanpassung, wenn Beans nicht einfach
zusammenpassen
I
I
I
I
I
WS 08/09
MW
I 1-7
löst Ereignisse in bestimmten Abständen aus
kann komplexe Zeit-Logik kapseln
Softwarekomponenten, die Geräte/Geräteteile repräsentieren
I
statt eines Interface-Repositories: einfach in die Bean reinschauen was
sie kann
c Rüdiger Kapitza
1.2 Java Beans
Unsichtbare Beans
I
I
I 1-6
Grafische Beans einer Benutzeroberfläche
I
initiale Einstellung von Eigenschaften (Zustand) einer Bean
Methoden Ereignisse (Events)
I
MW
Beispiele
Eigenschaften (Properties)
I
WS 08/09
1.2 Java Beans
Architektur
I
c Rüdiger Kapitza
Schalter
Sensoren, Aktautoren
Video-Rekorder
Kaffeemaschine
c Rüdiger Kapitza
WS 08/09
MW
I 1-8
1 Java basierte Komponentenmodelle
1.2 Java Beans
1 Java basierte Komponentenmodelle
Properties
I
I
I
I
I
Properties
Beschreiben Eigenschaften von Komponenten
Jede Property hat
I
I
einen Namen – symbolische, aussagekräftige Beschreibung der
Eigenschaft (Color, Font, usw.)
private Color color; (Instanzvariable der Bean-Klasse)
einen Typ – Java-Klasse, kapselt den Wert
Constraints – optionale Einschränkungen (z.B. read-only)
I
I
I
WS 08/09
1 Java basierte Komponentenmodelle
MW
informieren andere Objekte über Zustandsänderungen
(PropertyChange event)
Constrained properties
I
I 1-9
repräsentieren ein Feld, set/get-Methoden haben einen
index-Parameter
Bound properties
I
I
repräsentieren einen einzelnen Wert, Zugriff mit set/get-Methoden
Indexed properties
I
get-Methode zum Lesen
public Color getColor() return color;
set-Methode für Modifikationen
public void setColor(Color newColor) {
color = newColor;
repaint();
}
c Rüdiger Kapitza
Simple properties
I
Namens-Konventionen für Methoden zum Zugriff (Methoden der
Beam- Klasse)
I
1.2 Java Beans
nicht erlaubte Zustandsänderungen können zurückgewiesen werden
c Rüdiger Kapitza
1.2 Java Beans
WS 08/09
1 Java basierte Komponentenmodelle
Events
MW
I 1 - 10
1.2 Java Beans
Events
Umsetzung des Source-Listener Design-Patterns
I Source-Objekt informiert Listener über Zustandsänderungen
I
I
EventSource hat Methoden für Listener, um sich zu
registrieren/abzumelden
Beispiel:
public void addTimerListener(TimerListener l)
public void removeTimerListener(TimerListener l)
I
I
I
I
PropertyChangeSupport
I
add/remove
gleicher Name Methode wie Parameter
Parameter muss EventListener Schnittstelle implementieren
I
automatisches Versenden von notification-Events, immer wenn sich der
Wert einer Property ändert
VetoableChangeSupport
I
EventObject
I
I
I
ermöglicht das Zurückweisen von Property-Werten, die außerhalb des
gültigen Bereichs liegen
kapselt Informationen ber Ereignis
EventListener
I
Klasse die EventListener-Interface implementiert (Subtyp von
java.util.EventListener)
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 11
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 12
1 Java basierte Komponentenmodelle
1.2 Java Beans
1 Java basierte Komponentenmodelle
Adaptor
I
I
I
I
I
Introspection
Anpassung von Methoden einer Bean an Ereignisse einer anderen
I
I
Adapter implementiert passendes Event-Listener Interface
Adapter registriert sich für Events von Bean 1
Event 1 wird ausgelöst : Bean 1 ruft Methode die im event-Interface
festgelegte Methode event1Happend()bei allen registrierten
Event-Listener-Objekten auf
event1Happend() im Adapter ruft method2() an Bean 2 auf
I
Automatische Analyse von Eigenschaften einer Bean
I
Ab Java 1.1 Reflection API
I
I
I
I
Adapter-Objekt kann Daten evtl. manipulieren (z. B. umrechnen)
I
I
Einfache Adapter können automatisch erzeugt werden
I
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1 - 13
I
I
I
I
WS 08/09
MW
I 1 - 14
1.3 OSGi
OSGi – Open Services Gateway initiative
I
Zustand = Properties
Eingänge = Methoden
Ausgänge = Events
wenn Stecker-Buchse nicht passen: Adapter
I
OSGi ist ein dynamisches Modulsystem für Java
Entwicklung und Standardisierung durch ein Konsortium
I
I
I
Probleme Defizite
Zusammenstecken einfacher Komponenten zu komplexen
Komponenten
I
c Rüdiger Kapitza
1 Java basierte Komponentenmodelle
Beans sind zusammensteckbare Software-Bausteine
I
Entwickler kann Properties und Events explizit spezifizieren
1.2 Java Beans
Zusammenfassung
I
get/set Methoden für Properties
add/remove Methoden für Events
andere Methoden für normale Methoden
Alternative: Information in einer BeanInfo-Klasse (ähnlich wie ein
Interface-Repository)
I
c Rüdiger Kapitza
Analyse von Java-Klassen zur Laufzeit
Instanzvariablen: Name & Typ
Methoden: Name, Parameter, Ergebnis-Typ
JavaBeans Namens-Konventionen
I
I
1.2 Java Beans
Usprünglich für Java-basierte eingebettete Systeme gedacht
Aktuell Entwicklung zum Standard zur Modularisierung von
komplexen Java-Anwendungen
I
I
hierarchische Beans
Z.B. IBM, Siemens, Nokia, SAP, etc.
Z. B. Eclipse und Websphere
Spezifikation unter http://www.osgi.org/
I
Ankoppeln neuer Software-Komponenten an laufende Anwendungen
I
Software-Komponenten im verteilten System
OSGi website
I
Aktualisierung von laufenden Komponenten
I
Keine Unterstützung für die Verwendung von Code verschiedener
Hersteller/Entwickler
OSGi technology provides a service-oriented, component-based environment for
developers and offers standardized ways to manage the software lifecycle. These
capabilities greatly increase the value of a wide range of computers and devices
that use the Java platform.
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 15
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 16
1 Java basierte Komponentenmodelle
1.3 OSGi
1 Java basierte Komponentenmodelle
Klassen Laden in Java
1.3 OSGi
Eigene ClassLoader Implementierungen
I
I
Ableitung von java.lang.ClassLoader
loadClass() lädt Klassen bleibt aber erhalten
p u b l i c s y n c h r o n i z e d C l a s s l o a d C l a s s ( S t r i n g name ) t h r o w s C l a s s N o t F o u n d E . . {
I
Alle Klassen werden durch einen Class Loader in die Java
Laufzeitumgebung geladen
I
Komplexe Applikationen verfügen oft über meherere Class Loader
I
I
C l a s s c = f i n d L o a d e d C l a s s ( name ) ; // A l r e a d y l o a d e d t h i s c l a s s ?
i f ( c == n u l l ){ // Can t h e c l a s s be l o a d e d by a p a r e n t ?
try{
i f ( p a r e n t == n u l l ){
c = V MCl assLoad er . l o a d C l a s s ( name , r e s o l v e ) ;
i f ( c != n u l l )
return c ;
}else{
r e t u r n p a r e n t . l o a d C l a s s ( name , r e s o l v e ) ;
}
} c a t c h ( C l a s s N o t F o u n d E x c e p t i o n e ){ }
// S t i l l n o t found , we h a v e t o do i t o u r s e l f .
c = f i n d C l a s s ( name ) ;
Integration von Programmcode bzw. Komponenten verschiedener
Firmen und Entwickler
Laden von Klassen über das Netzwerk bzw. zur Integration von neuen
Funtionalitäten
}
resolveClass (c );
return c ;
}
I
findClass() wird implementiert
I
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1 - 17
c Rüdiger Kapitza
WS 08/09
1.3 OSGi
1 Java basierte Komponentenmodelle
Probleme bei der Verwendung von mehreren Class Loader
I
I
I
Bundle 2
Bundle n
Services
Service Registry
Life Cycle
Modules
Java Runtime Environment
Operating System / Hardware
Ziel von OSGi:
I
1.3 OSGi
OSGi Framework
ClassLoader weisen jeder Klasse eine Id zu die bei gleichem Namen zur
ClassCastExecption führt
Wo werden statische Variablen verwaltet?
JNI
C/C++
Klassen dürfen innerhalb eines Anwendungskontextes nur einmal
geladen werden
I
I 1 - 18
Framework
Bundle 1
I
MW
Security
c Rüdiger Kapitza
Legt fest welche Klassen geladen werden
Sichere Verwendung von Java Modulen unterschiedlicher Hersteller
und Versionen
Kontrollierte Verwendung von Class Loader
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 19
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 20
1 Java basierte Komponentenmodelle
1.3 OSGi
1 Java basierte Komponentenmodelle
Framework
1.3 OSGi
Framework
Life Cycle Layer
Security Layer
I
Ergänzung zur Java 2 Security Architektur
I
Code Authentifizierung durch Signaturen (Herkunft, Unterzeichner)
I
Verwaltung des Lebenszyklus von Bundles
I
Bundles können zur Laufzeit installiert, gestartet, gestoppt und
deinstalliert werden
install
INSTALLED
update
refresh
STARTING
Module Layer
I
Einheit der Modularisierung: Bundle
I
Bundles werden als Java ARchive (JAR) Datei ausgeliefert
I
I
refresh
update
resolve
uninstall
Enthlt alle nötigen Resourcen (evtl. inkl. weiterer JARs)
Bundlebeschreibung und Abhängigkeiten als Manifest Datei
(META INF/MANIFEST.MF)
start
ACTIVE
RESOLVED
uninstall
stop
UNINSTALLED
c Rüdiger Kapitza
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1 - 21
c Rüdiger Kapitza
1.3 OSGi
WS 08/09
1 Java basierte Komponentenmodelle
Framework
STOPPING
MW
I 1 - 22
1.3 OSGi
Manifest
Life Cycle Layer
I
I
Bundle - Repräsentiert ein installiertes Bundle
Bundle Context - Ausführungskontext eines Bundles
I
I
I
Manifest enthält alle Information zur Integration eines Bundels
Zugriff auf Informationen des Framework und die Service Registry
Installieren anderer Bundles
I
I
Bundle Activator
I
Activator Klasse ist der Einstiegspunkt
Jedes Bundle hat eigenen Classloader und Class Space
I
Starten und Stoppen des Bundles
I
I
Service Layer
I
I
Service Registry zum Registrieren, Finden und Binden von Diensten
I
Dienste sind Java-Objekte, registriert mit ihrem/ihren Interface(s)
I
Bundles können Dienste registrieren, suchen und ihren Zustand
abfragen
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 23
I
Classpath ergibt sich aus: RTE + Framwork + Bundle Classpath
Bundle-Classpath - Intra-Bundle Classpath für eingebettete JARs
Import-Package - Importierte Pakete von anderen Bundles
Require-Bundle - Importiert alle Pakete des angegebenen Bundles
Export-Package - Pakete die von diesem Bundle exportiert werden
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 24
1 Java basierte Komponentenmodelle
1.3 OSGi
1 Java basierte Komponentenmodelle
Auflösen der Abhängikeiten zwischen Bundles
Auflösen der Abhängikeiten zwischen Bundles
I
Jedes Bundle besitzt einen eigenen Classloader
I
I
Auflösung aller im Manifest beschriebenen Abhängigkeiten
I
I
I
I
I
I
Lade Klasse XYZ
JAVA.* ?
Alle Importe verdrahtet sind
Alle benötigten Pakete verfügbar sind und ihre Exporte verdrahtet
boot delegation?
Nach dem Auflösen kann Bundle geladen und ausgeführt werden
c Rüdiger Kapitza
WS 08/09
1 Java basierte Komponentenmodelle
MW
I 1 - 25
1.3 OSGi
Zusammenfassung
I
I
Einfaches Komponentensystem
Löst deployment-Probleme
I
I
I
und verfügt damit über einen eigenen Namensraum
Suchreihenfolge
Importierte und exportierte Pakete
Benötigte Bundles (import aller Pakete)
Fragmente (Teil eines größeren logischen Bundles)
Ein Bundle ist resolved wenn
I
Es können Komponenten aus verschiedenen Quellen miteinander
kombiniert werden
Entwickelt sich zum de facto Standard für Java
Offene Fragen
I
I
Verteiltes Interaktionsmodel
Dynamisches Laden von entfernten Code
I
c Rüdiger Kapitza
Bisher zentrale proprietre Lösungen
WS 08/09
MW
1.3 OSGi
I 1 - 27
Java Runtime Paket?
Beauftrage Parent-Classloader!
Enthalten in org.osgi.framework.bootdelegation?
Beauftrage Parent-Classloader!
importiert?
Importiert durch Import-Package?
Beauftrage entfernten Bundle-Classloader!
Classpath?
Im Bundle Classpath?
Beauftrage eigenen Bundle-Classloader!
c Rüdiger Kapitza
WS 08/09
MW
I 1 - 26
Herunterladen