E.1 Überblick. Software-Komponenten Komponentenmodelle Java & Komponentenmodelle: JavaBeans Architektur Properties Ereignisse (Events) Introspection

Größe: px
Ab Seite anzeigen:

Download "E.1 Überblick. Software-Komponenten Komponentenmodelle Java & Komponentenmodelle: JavaBeans Architektur Properties Ereignisse (Events) Introspection"

Transkript

1 E Java & Komponentenmodelle & Jini E Java & Komponentenmodelle & Jini E.2 Literatur E.2 Literatur E.1 Überblick Software-Komponenten Komponentenmodelle Java & Komponentenmodelle: JavaBeans Architektur Jini Properties Ereignisse (Events) Introspection ein verteiltes Komponentenmodell Anwendbarkeit von Software-Komponenten Edw01. W. Keith Edwards. Core Jini. Prentice Hall, Upper Saddle River, NJ, 2nd Edition Edw00. W. Keith Edwards. Core Jini. Prentice Hall, München, 2000 (deutsche Übersetzung der ersten Auflage, umfasst ebenfalls bereits Jini 1.1). Szy98. Clemens Szyperski. Component Software Beyond Object-Oriented Programming. Addison- Wesley, Harlow, England, Grif98. Frank Griffel. Componentware Konzepte und Techniken eines Softwareparadigmas. dpunkt- Verlag, Heidelberg, JavaBeans. Jini. E.1 E.2

2 E.3 Komponentenmodelle 1 Software Komponenten E.3 Komponentenmodelle Definition (Szyperski) Eine Softwarekomponente ist ein wiederverwendbares Stück Software hat eine gut spezifizierte Schnittstelle kann in nicht-vorhergeplanten Kontexten eingesetzt werden ist eine eigenständig vermarktbare Einheit Beispiele Elemente einer Fenster-Oberfläche Software-Modul, das ein Gerät repräsentiert (Messgerät, Drucker, ) Rechtschreibprüfungs-Modul für Textverarbeitungssysteme 2 Softwarekomponenten (2) E.3 Komponentenmodelle Standard-Konventionen für die Schnittstellen von Software-Komponenten Komponenten-Modell Einfache Verwendbarkeit + Wiederverwendbarkeit Software-Komponenten sind selbst-beschreibend Automatische Analyse von Schnittstelle und Eigenschaften möglich Introspection / Reflection - Mechanismen Interface-Repository + Namens-Konventionen Zusammenstellung zu komplexen Anwendungen mit grafischen Werkzeugen (Builder-Tools) Software-Baukasten? also einfach Klassen im objektorientierten Sinn oder was ist da neu dran E.3 E.4

3 3 Philosopie E.3 Komponentenmodelle 4 Beispiel für ein Builder Tool E.3 Komponentenmodelle Standardkomponenten Standard Component Standard Component Standard Component Eigene Komponenten Developer s Component Developer s Component JavaStudio Derived Eigene Component Erweiterungen Derived Component Derived Component Builder Tool Developer s Component Builder Tool Komponenten zusammenbauen Anwendung fertig Application E.5 E.6

4 5 Beispiel für eine Anwendung E.3 Komponentenmodelle 6 Komponentenmodell E.3 Komponentenmodelle Bedienoberfläche unserer Kaffeemaschine Richtlinien für Software-Komponenten Namenskonventionen Repositories, Introspection-Mechanismus Schnittstellen-Semantik Programmiermethodik Existierende Komponentenarchitekturen JavaBeans CORBA Component Model ActiveX nicht portabel, proprietär OpenDOC ziemlich tot Hersteller-spezifische Speziallösungen GUI-Builder Klassenbibliotheken E.7 E.8

5 E.4 Java & Softwarekomponenten E.4 Java & Softwarekomponenten E.4 Java & Softwarekomponenten 2 Java wesentliche Eigenschaften für Komponenten 1 Java Ziele Lösung der verbreiteten Probleme bei der Entwicklung und Verteilung von Software verschiedene Betriebssysteme (Unix, Windows, MacOS, ) verschiedene Hardware-Architekturen Java: Sprache und Ausführungsumgebung für sichere, schnelle und sehr robuste Anwendungen auf verschiedenen Plattformen in heterogenen verteilten Netzen objektorientiert Polymorphismus bei Methodenaufrufen sehr flexibel (dynamisches Laden und Binden) Reflection/Introspection Mechanismus 3 Java-Komponentenmodelle JavaBeans Jini E.9 E.10

6 2 Architektur 1 Definition Eigenschaften (Properties) initiale Einstellung von Eigenschaften (Zustand) einer Bean JavaBeans ist eine Schnittstellen-Spezifikation für wiederverwendbarer Software-Komponenten in Java definiert die Java-Komponenten Methoden Ereignisse (Events) die Verknüpfungspunkte für Beans und wie sie zusammenarbeiten Adapter Eine Bean ist eine beliebige Java-Klasse, die den JavaBeans-Konventionen folgt zur Schnittstellenanpassung, wenn Beans nicht einfach zusammenpassen Die offizielle Definition: A Java Bean is a reusable software component that can be visually manipulated in builder tools. Introspection statt eines Interface-Repositories: einfach in die Bean reinschauen was sie kann E.11 E.12

7 3 Beispiele 4 Properties Grafische Beans einer Benutzeroberfläche Knöpfe, Regler, Textfenster Beschreiben Eigenschaften von Komponenten Jede Property hat HTML rendering Bean OpenGL canvas Unsichtbare Beans Datenbank-Schnittstelle Timer löst Ereignisse in bestimmten Abständen aus kann komplexe Zeit-Logik kapseln Softwarekomponenten, die Geräte/Geräteteile repräsentieren Schalter Sensoren, Aktuatoren Video-Rekorder Kaffeemaschine einen Namen symbolische, aussagekräftige Beschreibung der Eigenschaft (Color, Font, ) private Color color;(instanzvariable der Bean-Klasse) einen Typ Java-Klasse, kapselt den Wert Constraints optionale Einschränkungen (z. B. read-only) Namens-Konventionen für Methoden zum Zugriff (Methoden der Beam- Klasse) get-methode zum Lesen public Color getcolor(){ return color; } set-methode für Modifikationen public void setcolor(color newcolor){ color = newcolor; repaint(); } E.13 E.14

8 4 Properties (2) 4 Properties (3) Beispiel: Property Color der Bean "SimpleBean" Simple properties SimpleBean wird in BeanBox geladen, Feld color anklicken öffnet ColorEditor repäsentieren einen einzelnen Wert, Zugriffmit set/get-methoden Indexed properties repräsentieren ein Feld, set/get-methoden haben einen index-parameter Bound properties informieren andere Objekte über Zustandsänderungen (PropertyChange event) Constrained properties nicht erlaubte Zustandsänderungen können zurückgewiesen werden E.15 E.16

9 5 Events 5 Events (2) Umsetzung des Source-Listener Design-Patterns PropertyChangeSupport Source-Objekt informiert Listener über Zustandsänderungen EventSource automatisches Versenden von notification-events, immer wenn sich der Wert einer Property ändert hat Methoden für Listener, um sich zu registrieren/abzumelden gleicher Name public void addtimerlistener(timerlistener l) VetoableChangeSupport ermöglicht das Zurückweisen von Property-Werten, die außerhalb des gültigen Bereichs liegen public void removetimerlistener(timerlistener l) EventObject add/remove TimerListener muss spezielles EventListener-interface implementieren kapselt Informationen über Ereignis EventListener Klasse die EventListener-Interface implementiert (Subtyp von java.util.eventlistener) E.17 E.18

10 6 Adapter Anpassung von Methoden einer Bean an Ereignisse einer anderen Bean1 (meldet Event1) addevent1listener(this) Adapter12 (implementiert Event1Listener) event1happened( ) method2( ) Adapter12 implementiert passendes Event-Listener Interface Adapter12 registriert sich für Event1 Event1 findet statt, Bean1 ruft Methode die im event-interface festgelegte Methode (event1happend()bei allen registrierten Event-Listener-Objekten auf event1happend() im Adapter12 ruft method2() an Bean2 auf Adapter-Objekt kann Daten evtl. manipulieren (z. B. umrechnen) Einfache Adapter können automatisch erzeugt werden Bean2 erwartet Meldung über method2 7 Introspection Automatische Analyse von Eigenschaften einer Bean Java1.1 Reflection API Analyse von Java-Klassen zur Laufzeit Instanzvariablen: Name & Typ Methoden: Name, Parameter, Ergebnis-Typ JavaBeans Namens-Konventionen get/set Metoden Properties add/remove Methoden Events andere Methoden normale Methoden Alternative: Information in einer BeanInfo-Klasse ähnich wie ein Interface-Repository Entwickler kann Properties und Events explizit spezifizieren E.19 E.20

11 8 JavaBeans Summary E.6 Jini E.6 Jini Beans = zusammensteckbare Software-Bausteine Zustand = Properties Eingänge = Methoden Ausgänge = Events wenn Stecker-Buchse nicht passen: Adapter z. B. ideal zur Software-Repräsentation von Geräten 1 Überblick Standard für die Kommunikation zwischen "intelligenten" Geräten (Sun 1998) Komponentenarchitektur für verteilte Systeme Komponenten (Services) registrieren sich bei einem Lookup-Service Klienten erhalten von dort Referenzen (RMI-Stub oder Smart Proxy) Referenzen sind zeitlich begrenzt gültig (Leasing) Probleme / Defizite Zusammenstecken einfacher Komponenten zu komplexen Komponenten hierarchische Beans Ankoppeln neuer Software-Komponenten an laufende Anwendungen Software-Komponenten im verteilten System Ziel: Geräte können sich flexibel an Netzwerk an- und abmelden und finden automatisch ihre Kommunikationspartner Komponenten versuchen selbst die Verbindungen zu schalten Konfiguration durch Builder-Tool nicht vorgesehen E.21 E.22

12 2 wesentliche Konzepte E.6 Jini 3 Jini Services E.6 Jini Service Community Federation Discovery Lookup Service (the naming service) Leasing Events Security Java RMI Transactions Mitglieder einer Jini-Community (djinn) haben gemeinsam Zugriff zu Diensten (Services) Service = etwas, das genutzt werden kann von: einer Person, einem Programm oder einem anderen Service Berechnung Speicher Kommunikationskanal Software Filter Gerät (Hardware) ein anderer Benutzer Services werden bei einem Lookup Service registriert Clienten können sich dort eine Referenz besorgen (Stub einer RMI-Remote-Referenz oder Smart Proxy) Services werden zur Durchführung einer bestimmten Aufgabe zusammengestellt E.23 E.24

13 4 Djinn E.6 Jini 5 Discovery E.6 Jini Gruppe von Jini Services, auch Community oder Federation genannt Auffinden von Jini Federations Alle Services in einem Djinn sehen sich Suche von verfügbaren Lookup-Diensten Beitritt zu einer Federation: Teilnahmeprotokoll S Public Djinn S L S S Djinn "inf4" S L Djinn "oovs" L S S L S S L Jini Lookup Service S "Normaler" Jini Service Verschiedene Disovery-Protokolle Multicast Request Protocol Finden von Lookup-Diensten Multicast Announcement Protocol Ankündigung eines Lookup-Dienstes Unicast Discovery Protocol Anmeldung bei bekanntem Lookup-Dienst Flacher Namensraum der Djinns E.25 E.26

14 6 Leasing E.6 Jini 7 Ereignisse (Events) E.6 Jini Teilweiser Ausfall in einem verteilten System führt zu speziellen Problemen Referenzen werden ungültig Betriebsmittel können nicht freigegeben werden Services in Jini werden für eine bestimmte Zeit "gemietet" Lease = Zugriffsgarantie zu einem Service für eine bestimmte Zeitspanne kann erneuert werden, wenn sie länger benötigt wird Erneuerung kann vom Service-Provider verweigert werden Lease läuft ab wenn sie der Client nicht erneuert (oder wegen eines Fehlers nicht erneuern kann) nach Ablauf der Lease können die zugehörigen Ressourcen freigegeben werden JavaBeans unterstützt nur lokale Events Objekt, dass den Event auslöst und alle empfangenden Objekte müssen innerhalb eine JVM laufen Jini unterstützt verteilte Events Registrierung erfolgt über RMI-Aufruf und der Übergabe eines Stubs Jini-Events werden nur solange zugestellt wie die zugehörige Lease gültig ist 8 Sicherheit Sicherheitsmodell auf der Basis von principal information und access control lists E.27 E.28

15 E.7 Enterprise Java Beans E.7 Enterprise Java Beans 2 Java Server Pages E.7 Enterprise Java Beans 1 Architektur Server-seitiges Komponentenmodell für Multi-Tier Anwendungen HTML-Seiten mit integriertem Java-Code Schnittstelle zwischen Web-Seiten und verteilten objektorientierten Anwendungen 1. JSP file wird geladen 2. wird in Servlet übersetzt 3. Servlet wird ausgeführt 4. Ergebnis wird in HTML- Ausgabe eingesetz Können eingesetzt werden als Ersatz für traditionelle CGI-Skripten als HTML-Schnittstelle zu objektorientierten Anwendungen (RMI, CORBA) nicht mit JavaBeans verwechseln! E.29 E.30

16 3 JSP Beispiel E.7 Enterprise Java Beans 5 Servlets E.7 Enterprise Java Beans 4 JSP Ziele <html> <body> <h2>welcome to the Weather Site</h2> <hr> Today s date is <%= new java.util.date() %> </body> </html> Wiederverwendbarer Code wird in Komponenten oder JSP-Beans zur Verfügung gestellt Trennung von Web-Seiten-Design und Komponenten-Entwicklung Grundproblem: Dynamik in Web-Seiten Lösungen: Client-seitig: JavaScript, Applets Server-seitig: CGI, ASP, LiveWire, PHP... Servlets: A servlet is a Java technology-based web component, managed by a container, that generates dynamic content. Like other Java-based components, servlets are platform-independent Java classes that are compiled to platform-neutral bytecode that can be loaded dynamically into and run by a Java-enabled web server. Containers, sometimes called servlet engines, are web server extensions that provide servlet functionality. Servlets interact with web clients via a request/response paradigm implemented by the servlet container. Standard-API Plattformunabhängig Java Threads Ausführungsumgebung für Servlets: Servlet-Engine / Container Netzwerk-Service (empfangen und zustellen von) Requests (versenden von) Responds Verwendung von HTTP (evtl. zusätzlich HTTPS, etc.) Steuerung des Lebenszyklus von Servlets / JSPs laden, initialisieren, aufrufen, löschen Deployment einrichten ("installieren") der Applikation E.31 E.32

17 6 EJB Container E.7 Enterprise Java Beans 7 EJB Bean-Typen E.7 Enterprise Java Beans EJB wird in einem Container ausgeführt EJBs repräsentieren grob-granulare Objekte Container stellt Infrastruktur bereit Persistence management Transactions Concurrency Thread management Security Naming Entity Beans lang-lebig, Daten-orientiert Nutzung durch mehrere Clients persistent container-managed bean-managed Session Beans implementieren Anwendungs- Logik kurz-lebig nur ein Client stateful oder stateless zwischen Methodenaufrufen Kommunikation mit EJB über RMI, IIOP oder JMS interagieren mit persitenten Entity Beans E.33 E.34

18 8 Elemente einer EJB-Bean E.7 Enterprise Java Beans 9 EJB Contracts: Client-View-Contract E.7 Enterprise Java Beans Home-Interface: Klassen-Methoden u. a. zum Life-cycle-Management Remote-Interface: Instanzmethoden Bean-Klasse:Implementiert beide Interfaces Client besorgt sich Home-Interface über JNDI (Java Naming and Directory Interface) Client kann durch RMI auf Bean zugreifen Pro Deployment einer Bean ist ein Home-Interface-Objekt in JNDI eingetragen und für den Client nutzbar Bean Instanzen implementieren das Remote-Interface, der Client erhält sie durch das Home-Interface E.35 E.36

19 10 EJB Contracts: Component Contract Beans werden in Container eingebettet Bean implementiert Business-M., Life-cycle-M. u. a. Callbacks. Container ruft diese sinngemäß auf E.7 Enterprise Java Beans Container behandelt z. B. Transaktionen, Security und Exceptions Container bietet JNDI-Environment, EJBContext Bean Provider vermeidet Programmierung, die das Container Runtime Management stört Optional: Container behandelt Persistenz Deployment-Descriptor enthält entsp. Daten E.8 Realistische Anwendungen für Komponenten-Software? E.8 Realistische Anwendungen für Komponenten-Software? Anwendungen, die zwischen Programmierung und Einsatz umfangreiche Konfiguration erfordern Eingabe/Abfrage-Oberflächen (z. B. SAP-Systeme) Steuerungsysteme flexible Test-Systeme Aufbau aus Software-Komponenten, die die Geräte repräsentieren (z. B. Gebäudeinstrumentierung) + Konfiguration erfordert wesentlich weniger Spezialwissen + Anwendungsarchitektur offener kundenspezifische Erweiterungen einfacher realisierbar Probleme bei hochdynamischen Anwendungssystemen (Objekte verschwinden, neue kommen hinzu) E.37 E.38

20 E.9 Software-Komponenten für realistische Anwendungen? E.9 Software-Komponenten für realistische Anwendungen? Klassenbibliotheken mit Komponenten für grafische Oberflächen Geräte, die ihre Software-Repräsentation "mitbringen" Komponenten aus dem Office-Automation-Bereich (Textverarbeitung, Datenbank-Anbindung, Kalkulation, )? wo ist das Problem kein Standard-Komponenten-Modell Komponenten-Modelle haben zu starke Einschränkungen Builder-Tools nicht mächtig genug + nicht adaptierbar? Lösung offene Komponenten-Modelle erweiterbare Werkzeuge (Builder-Tools), die Interoperabilität herstellen E.39