Java Beans Seminar Komponentenprogrammierung Freie Universität Berlin, WS 2004/2005 Ivo Köhler, 08. November 2004 Seminar Komponentenprogrammierung, Ivo Köhler 1 Agenda • • • • Was sind Java Beans? Wie funktionieren Java Beans? Objekte vs. Komponenten Mechanismen von Java Beans – – – – – – Methoden Properties Introspection Persistence Events Packaging • Vor- und Nachteile • Tools - Beispiele • Quellen Seminar Komponentenprogrammierung, Ivo Köhler 2 Was sind Java Beans? “A Java Bean is a reusable software component that can be manipulated visually in a builder tool.” [sun97] • • • • Komponenten die über Zugriffsklassen verfügen Bestimmte Namenskonventionen einhalten Über Dialogboxen manipulierbar sind Unterstützen neue visuelle Programmiermethoden – Können durch IDE visuell in Programm eingebunden werden – Im Idealfall ohne eine Zeile Code zu schreiben Seminar Komponentenprogrammierung, Ivo Köhler 3 Was sind Java Beans? (..) • Meist kleine „lightweight“ Komponenten – Sichtbare GUI-Elemente (Buttons, Checkboxen,…) – Nicht sichtbare Elemente (Datenbankzugriffe, Datenübertragungsprozesse) – Aber auch komplexerer Beans denkbar (ganze Applikationen) – Zusammenfassung vieler Beans zu „Compound Documents“ • Sollen kompakt, leicht zu erstellen und zu benutzen sein • Sollen völlige Portabilität gewährleisten (im Gegensatz zum Komponentenmodell von Microsoft: ActiveX) Seminar Komponentenprogrammierung, Ivo Köhler 4 Wie funktionieren Java Beans? • Java Beans basieren ausschließlich auf Java • Beans bieten ihre Funktionalität (Methoden, Properties, Events) an • Builder-Tools können sie so visuell für die Verwendung einbinden (z.B. in einer Tool-Box) • Dies geschieht über Entwurfsmuster (patterns) und Namenskonventionen Seminar Komponentenprogrammierung, Ivo Köhler 5 Objekte vs. Komponenten • Objektorientierte Sicht: – Wiederverwendung wird durch Vererbungen realisiert – Entwickler muss den fremden Code verstehen und Schnittstellen kennen, um Objekte wieder zu verwenden White-Box-Reuse – Objekt-Code muss zugänglich sein Seminar Komponentenprogrammierung, Ivo Köhler 6 Objekte vs. Komponenten (..) • Komponentenorientierte Sicht: – Wiederverwendung durch Black-Box-Reuse – Zugriff erfolgt nur über Schnittstellen – Implementierung der Komponente ist unwichtig Black-Box-Reuse – Objekt-Code muss nicht zugänglich sein Seminar Komponentenprogrammierung, Ivo Köhler 7 Agenda • • • • Was sind Java Beans? Wie funktionieren Java Beans? Objekte vs. Komponenten Mechanismen von Java Beans – – – – – – Methoden Properties Introspection Persistence Events Packaging • Vor- und Nachteile • Tools • Quellen Seminar Komponentenprogrammierung, Ivo Köhler 8 Mechanismen von Java Beans • Methoden – Teile des Programmcodes – Können durch Methodennamen aufgerufen werden • Properties – Sind die Statusvariablen (Attribute) der Beans – Beeinflussen das Erscheinungsbild und das Verhalten der Komponente – Können über Zugriffsmethoden verändert werden – Primitive aber auch komplexe Datentypen Seminar Komponentenprogrammierung, Ivo Köhler 9 Mechanismen (..) • Properties (..) – Die Standart Signaturen der Zugriffsmethoden: public void set<PropertyName>(<PropertyType> value); public <PropertyType> get<PropertyName>(); • Indexed properties – Indizierte Eigenschaften ermöglichen mehrere Attribute gleichzeitig zu manipulieren public public public public void set<PropertyName>(<PropertyType>[] value); <PropertyType>[] get<PropertyName>(); void set<PropertyName>(int index, <PropertyType> value); <PropertyType> get<PropertyName>(int index); Seminar Komponentenprogrammierung, Ivo Köhler 10 Mechanismen (..) • Bound properties – Durch gebundene Eigenschaften können bei einer Manipulation andere Komponenten informiert werden – Interessierte Komponenten müssen sich dazu vorher durch das Java-Listener-Konzept registrieren public void addPropertyChangeListener(PropertyChangeListener p); public void removePropertyChangeListener(PropertyChangeListener p); Seminar Komponentenprogrammierung, Ivo Köhler 11 Mechanismen (..) • Constrained properties – Nicht nur die Bean kann eine Attributänderung validieren, sondern es können auch registrierte „Zuhörer“ um Einwände (Veto‘s) befragt werden public <PropertyType> get<PropertyName>(); public void set<PropertyName>(<PropertyType> value) throws java.beans.PropertyVetoException; – Objekte die an der Gültigkeitsprüfung mitwirken wollen: public void addVetoableChangeListener(VetoableChangeListener p); public void removeVetoableChangeListener(VetoableChangeListener p); Seminar Komponentenprogrammierung, Ivo Köhler 12 Mechanismen (..) • Introspection – Ermöglicht das Erkunden von: • Methoden, Properties und Events einer Bean – Klassen- oder Methodenbeschreibungen können so oft vermieden werden – Introspection erfolgt durch: • Die Reflection API (Methoden und Properties erfragen) • BeanInfo-Klassen • Oder eine Kombination daraus – Builder Tools können so selbständig Beans untersuchen und dem Entwickler zur Verfügung stellen Seminar Komponentenprogrammierung, Ivo Köhler 13 Mechanismen (..) • Reflection – Wird vom Entwickler die Namensgebung eingehalten, kann die Bean „erkundet“ werden package java.lang.reflect – Will dies der Entwickler nicht, oder ist die Bean zu komplex kommt die BeanInfo-Schnittstelle zum Einsatz • BeanInfo-Schnittstelle – Zusätzliche Klasse, in der alle Informationen stehen – Name der beschreibenden Klasse <MyBean>BeanInfo – In dieser Klasse werden alle Leistungsmerkmale der Bean in einem FeatureDescriptor beschrieben Seminar Komponentenprogrammierung, Ivo Köhler 14 Mechanismen (..) • BeanInfo-Schnittstelle (..) <<interface>> BeanInfo +getIcon(iconKind:int): Image +getBeanDescriptor(): BeanDescriptor +getPropertyDescriptor(): PropertyDescriptor[] +getMethodDescriptor(): MethodDescriptor[] +getEventSetDescriptor(): EventSetDescriptor[] BeanDescriptor SimpleBeanInfo PropertyDescriptor Object FeatureDescriptor EventSetDescriptor MethodDescriptor ParameterDescriptor Seminar Komponentenprogrammierung, Ivo Köhler 15 Mechanismen (..) • Persistence – Abspeichern und Wiederherstellen eines Zustandes einer Komponente über die Laufzeit hinweg – Dies kann durch Serialisierungsmechanismen geschehen, wenn die Schnittstelle java.io.Serialization implementiert wurde – Es entstehen hierbei neue Probleme: • Versionierung • Kompatibilität mit älteren Versionen der Bean Seminar Komponentenprogrammierung, Ivo Köhler 16 Mechanismen (..) • Events – Java-Eventmodell vollständig implementiert – Events der Java Beans beruhen auf Callback-Mechanismus – Objekte die an Events interessiert sind, müssen sich bei der entsprechenden Bean anmelden (als Listener) – Wird Event aufgerufen, werden alle registrierten Listener informiert Event object Event source Event listener Event listener Event listener Seminar Komponentenprogrammierung, Ivo Köhler 17 Mechanismen (..) • Events (..) – Typischer Anwendungsfall: Bound properties Registrierung Callback Seminar Komponentenprogrammierung, Ivo Köhler 18 Mechanismen (..) • Packaging – Verpacken von Java Beans zu einem kompakten Format – Typischerweise in ein .jar Archiv – Zusätzlich eine Manifest-Datei (.mf) die den Inhalt näher beschreibt Manifest-Version: 1.0 Name: <MyFolder>/<MySubfolder>/MyBean Java-Bean: True Digest-Algorithms: MD5 MD5-Digest: UQGuRXuyzDi0KVg4PqKP7w== Name: <MyFolder>/<MySubfolder2>/picture.gif Name: <MyFolder>/<MySubfolder2>/picture2.gif – jar cfm MyBean.jar MyBean.mf MyBean.class Seminar Komponentenprogrammierung, Ivo Köhler 19 Vor- und Nachteile von JB • PRO – Zeitsparende effiziente Erstellung von Software, durch visuelle Wiederverwendung alter Beans – Einfaches grafisches Verbinden von Komponenten – Einfach zu programmieren, basiert 100% auf Java – Sprachunabhängig durch eine existierende Brücke zu anderen Technologien (z.B. ActiveX von Microsoft) • CONTRA – Performance, da Java eine interpretierte Sprache ist – Wenige Brücken von anderen Technologien in Richtung Java Beans (z.B. Microsoft) – Nur für einfache Anwendungen so schön möglich – Nicht für Verteilte Systeme (EJB) Seminar Komponentenprogrammierung, Ivo Köhler 20 Tools • BeanBox v1.0 • Im Beans Development Kit (BDK) bereits enthalten • Sehr guter leichter Container zum Testen kleinerer Beans Seminar Komponentenprogrammierung, Ivo Köhler 21 Tools • • • • BeanBuilder v1.0beta Neue verbesserte Version der BeanBox Höhere Funktionalität Bildet die Grundlage des Java Studios, einer visuellen Entwicklungsumgebung von SUN Seminar Komponentenprogrammierung, Ivo Köhler 22 Beispiel • Taschenrechner im Java Beans Komponentenmodell • Entwickelt in der Vorlesung Komponentenprogrammierung und Middleware am Hasso-Plattner-Institut, Potsdam • Anforderungen: – – – – Funktionsfähiger Taschenrechner mit GUI Modularität leichte Erweiterbarkeit zur Laufzeit Benutzer soll Komponenten laden und sofort verwenden können – leichtes Entwickeln weiterer Beans – ein Grundgerüst sollte vorhanden sein Seminar Komponentenprogrammierung, Ivo Köhler 23 Quellen • Java Beans Specification, SUN Microsystems http://java.sun.com/beans [sun97] • Java tutorial for Java Beans http://java.sun.com/docs/books/tutorial/javabeans/ Quinn, A. 2000 • Developing Java Beans, O'Reilly & Associates, Inc. Englander, R. 1997 • Java in a Nutshell, O'Reilly & Associates, Inc. Flanagan, D. 1997 Seminar Komponentenprogrammierung, Ivo Köhler 24 ENDE Seminar Komponentenprogrammierung, Ivo Köhler 25