Ein Rundgang durch JavaBeans

Zurück 1 2 Page 2 Seite 2 von 2

Was JavaBeans ist und was es tut

JavaBeans ist keine Produkt-, Programm- oder Entwicklungsumgebung. Es ist sowohl ein Java-Kernpaket ( java.beans), das Beans zur Bereitstellung erweiterter Funktionen verwenden kann, als auch ein Dokument (die JavaBeans-Spezifikation ), in dem beschrieben wird, wie die Klassen und Schnittstellen im java.beansPaket zum Implementieren der "Beans-Funktionalität" verwendet werden. Die Klassenspezifikation ist Teil der Basisversion von Java 1.1, daher muss keine zusätzliche Software installiert werden, um sie verwenden zu können. Die Zugabe von Bohnen benötigt wenig Änderung in der Java - Sprache per seObwohl der Kernversion mehrere neue und dringend benötigte APIs hinzugefügt wurden, um die Beans-Funktionen zu unterstützen. Das Lesen der Spezifikation kann informativ, aber einschläfernd sein. Glücklicherweise ist es optional, wenn Sie bereits verstehen, wie und warum Sie das JavaBeans-Paket verwenden. Vielleicht verstehen Sie Beans bereits, indem Sie beispielsweise eine unterhaltsame und aufschlussreiche Artikelserie über JavaBeans in JavaWorld lesen .

JavaBeans verwandelt Klassen in Softwarekomponenten, indem es mehrere neue Funktionen bereitstellt. Einige dieser Funktionen sind spezifisch für Bohnen. Andere, wie die Serialisierung, können für jede Klasse gelten, egal ob Bean oder auf andere Weise, sind jedoch für das Verständnis und die Verwendung von Beans von entscheidender Bedeutung.

Softwarekomponenten haben Eigenschaften , die Attribute des Objekts sind. Bei der Anpassung wird eine Bean für eine bestimmte Aufgabe konfiguriert. Das neue Ereignisbehandlungsschema in Java 1.1 wurde teilweise erstellt, um die Kommunikation zwischen Beans zu vereinfachen. Bohnen können von IDEs oder anderen Klassen durch einen als Introspektion bezeichneten Prozess präpariert werden . Beans können beibehalten (dh serialisiert in Byte - Streams zur Übertragung oder Speicherung) und beharrte Beans können verpackt in „JAR - Dateien“ herunterladen und den Zugang zu erleichtern. Schließlich wurden Bohnen für die Zusammenarbeit entwickelt Mit älteren Komponententechnologien wie ActiveX und LiveConnect können Sie problemlos an Transaktionen mit Object Request Broker-Systemen wie CORBA teilnehmen.

Schauen wir uns jede dieser Funktionen etwas genauer an.

Eigenschaften und Anpassung

Eigenschaften sind, wie oben erwähnt, Attribute einer Bean. Zu den visuellen Eigenschaften gehören möglicherweise Farbe oder Bildschirmgröße. Andere Eigenschaften haben möglicherweise keine visuelle Darstellung: Eine BrowserHistory Bean verfügt beispielsweise möglicherweise über eine Eigenschaft, die die maximale Anzahl der zu speichernden URLs angibt. Beans machen Setter- und Getter- Methoden (als "Accessor-Methoden" bezeichnet) für ihre Eigenschaften verfügbar, sodass andere Klassen oder IDEs ihren Status manipulieren können. Das Einrichten der Eigenschaften einer Bean zur Entwurfs- oder Laufzeit wird als Anpassung bezeichnet .

Der Entwickler hat eine große Kontrolle über den Zugriff und die Änderung der Eigenschaften von Beans. Für eine einfache Eigenschaft schreibt der Entwickler eine Methode namens setProperty()und eine andere aufgerufen getProperty().

Hier können Sie würde haben ein Applet, aber aus irgendeinem Grund gesehen, kann man nicht.

Balkendiagramm

Wenn Sie beispielsweise einen Java-fähigen Browser verwenden, sehen Sie links ein Applet, das eine kleine Klasse namens verwendet BarChart. Das BarChartist der farbige Balken zwischen den beiden Schaltflächen. BarChartEs fehlt nur eines, um ein Bean zu werden: Die Benutzeroberfläche wird nicht implementiert java.io.Serializable(da die meisten Browser Java 1.1 noch nicht verarbeiten und das Beispiel-Applet daher fehlschlagen würde.)

Mit der Ausnahme, dass es serialisierbar ist, BarCharthandelt es sich um eine einfache Bean mit nur wenigen Methoden. Es hat void setPercent(int pct), die den Boden überschwemmt pct Prozent der Bar mit rotem. Die Methode int getPercent()gibt den aktuellen Prozentsatz zurück, der in der Bean gespeichert ist (dies ist der Status der Bean). Die setPercent()Methode ruft auch auf, repaint()wenn der Prozentsatz geändert wurde, damit die visuelle Darstellung des Objekts auf dem neuesten Stand bleibt.

Der Applet-Code wird aufgerufen, setPercent(getPercent()+10)wenn auf die Schaltfläche + 10% geklickt wird, wodurch der BarChartProzentsatz erhöht wird (wenn er <100% ist). Percent ist ein Beispiel für eine Bean-Eigenschaft mit Setter- und Getter-Methoden, die gemäß der JavaBeans-Spezifikation benannt sind. Im weiteren Verlauf dieser Serie werden wir dieses bescheidene Stückchen BarChartin eine nützliche Softwarekomponente verwandeln , die in eine Vielzahl von Anwendungen eingebunden werden kann.

Der Wert einer indizierten Eigenschaft ist ein Array. Die Zugriffsmethoden der indizierten Eigenschaften empfangen und geben Arrays von Werten anstelle von Skalaren zurück. Accessor-Methoden können aktivierte Ausnahmen auslösen, um Fehlerzustände zu melden.

Manchmal ist es nützlich, wenn eine Aktion ausgeführt wird, wenn sich eine bestimmte Eigenschaft eines Objekts ändert. Gebundene Eigenschaften führen dazu, dass Ereignisse an andere Objekte gesendet werden, wenn sich der Wert der Eigenschaft ändert, sodass der Empfänger möglicherweise Maßnahmen ergreifen kann. Daher kann eine SpreadSheet Bean so konfiguriert werden, dass eine PieChart Bean angewiesen wird, sich selbst neu zu zeichnen, wenn sich die Tabellenkalkulationsdaten ändern.

Oft sind bestimmte Werte für Eigenschaften illegal, basierend auf dem Zustand anderer Bohnen. Eine Bean kann so eingerichtet werden, dass sie diese eingeschränkten Eigenschaften anderer Beans "abhört" und "Veto" -Änderungen nicht mag. Beispielsweise möchte die ControlRodArray Bean eines Kernreaktors möglicherweise jemanden stören, der versucht, den Status einer DrainReactorCorePump Bean auf ON zu ändern, wenn die Steuerstäbe herausgezogen werden. (Tun Sie dies nicht zu Hause versuchen. Wahrscheinlich niemand sollte für solche Anwendungen mit Java Beans wird nur noch.)

Wenn ein Entwickler Beans miteinander verbindet, um eine Anwendung zu erstellen, kann die IDE ein Eigenschaftenblatt anzeigen, das alle Eigenschaften der Beans und ihre aktuellen Werte enthält. (Ein Eigenschaftenblatt ist ein Dialogfeld zum Festlegen und / oder Anzeigen von Eigenschaften, wie Sie sie erhalten, wenn Sie Optionen… in einem Menü auswählen.) Der Entwickler legt die Eigenschaften grafisch fest, die die IDE in Aufrufe der Setter-Methoden der Beans übersetzt. den Zustand der Bohnen ändern. Dadurch werden die Bohnen für die jeweilige Anwendung angepasst .

Die Verwendung von Eigenschaftslisten ist nicht immer der beste Weg, um Beans anzupassen. Einige Bohnen haben einen Zustand, der zu komplex ist, um auf diese Weise leicht manipuliert zu werden. Andere Bohnen wären einfach cooler, wenn es eine intuitivere Möglichkeit gäbe, sie einzurichten. Stellen Sie sich den armen Manager vor, der sich nur Verkaufsberichte ansehen möchte und herausfinden muss, was in das Textfeld "Remote ODBC Data Source" in einem Eigenschaftenblatt eingegeben werden soll. Wäre es nicht cooler, wenn sie einfach das Symbol einer DataSource Bean (natürlich mit der Bezeichnung "Sales Data" angepasst) auf eine DataConnection Bean ziehen und dort automatisch konfigurieren könnte? Ein Beans-Entwickler kann ein Eigenschaftenblatt in die Bean selbst einbetten, und die IDE verwendet diesen "Customizer", um die Bean anzupassen.

Die relevanten Klassen zum Bearbeiten von Eigenschaften und Anpassen sind im java.beansPaket enthalten.

Handhabung des Events

All diese Interaktion zwischen Bohnen setzt eine Art Kommunikation voraus. JDK 1.1 definiert ein neues Ereignismodell , mit dem Klassen (nicht nur Beans!) Kommunizieren. Tatsächlich hat dieses neue Ereignismodell seinen Weg in eines der am häufigsten verwendeten Pakete von Java gefunden : java.awt!

Im neuen Ereignismodell registriert eine Klasse das Interesse an den Aktivitäten einer anderen Klasse über eine Listener-Schnittstelle . In der Tat das Ziel sagt Objekt (der Interessenten) , um das Quellobjekt (das Objekt von Interesse), „Lassen Sie mich wissen , wenn so und so passiert.“ Wenn das so und so auftritt, "löst" das Quellobjekt ein Ereignis am Ziel aus, indem es den Ereignishandler des Ziels mit einer Unterklasse EventObjectals Argument aufruft .

Ereignisse können verwendet werden, um gebundene und eingeschränkte Eigenschaften zu implementieren. Im PieChart und Tabellenkalkulations obigen Beispiel die PieChart „Register“ Interesse an einer Änderung der Kalkulationstabelle ist (sagen wir mal) Datalist - Eigenschaft. Wenn das SpreadSheet seine DataList- Eigenschaft ändern soll , übergibt es eine DataListChangedEvent(Unterklasse von EventObject), die angibt, was sich geändert hat, an die Ereignishandlermethode jedes interessierten Listeners. Das Ziel ( PieChart) untersucht dann das Ereignis und ergreift geeignete Maßnahmen.

Das Beispiel eines Kernreaktors funktioniert ähnlich. In diesem Fall überprüft das Ziel die Änderung jedoch, indem es eine Ausnahme auslöst . So wird die Welt vor der weit verbreiteten radioaktiven Zerstörung gerettet.

Die EventObjectKlasse kann erweitert werden, um benutzerdefinierte Ereignisse zu erstellen . Klassen können jetzt neue Ereignistypen definieren und verwenden, um Nachrichten aneinander zu senden. Dies bedeutet, dass Beans, die im selben Container ausgeführt werden, durch Weitergabe von Nachrichten kommunizieren können. Dies hilft dabei, Abhängigkeiten zwischen Objekten zu entkoppeln, von denen wir wissen, dass sie eine sehr gute Sache sind.

Benutzerdefinierte (und andere) Ereignisse werden von der Klasse abgeleitet java.util.EventObject.

Selbstbeobachtung

Der seltsame Begriff Introspektion ist Java-Speak für den Prozess der programmgesteuerten Analyse der öffentlichen Methoden und Mitglieder einer Klasse. Dieser Prozess wird manchmal auch als Entdeckung bezeichnet . Der neue Reflexionsmechanismus im Java-Kern, der ein Objekt zerlegen und eine Beschreibung seines Inhalts zurückgeben kann, ermöglicht eine Selbstbeobachtung. (Obwohl Java reflektierend oder sogar introspektiv sein kann, ist die Omphaloskepsis immer noch nicht Teil der Kerndistribution.)

Wir haben bereits eine Anwendung dieser Funktion kennengelernt. Oben haben wir eine IDE beschrieben, die eine Liste von Bean-Eigenschaften erstellen kann, die einem Entwickler präsentiert werden sollen. Wie kann die IDE wissen, welche Eigenschaften eine Bean hat? Die IDE erkennt die Eigenschaften einer Bohne auf zwei Arten: indem sie die Bohne nach einer Beschreibung ihrer Eigenschaften fragt oder indem sie die Bohne durch Introspektion zerlegt.

Eine typische IDE fragt zunächst eine Bean nach einem BeanInfo-Objekt, das unter anderem die Eigenschaften der Bean beschreibt. Die IDE verwendet dann das BeanInfo-Objekt, um ein Eigenschaftenblatt zu erstellen. (Dies setzt voraus, dass die Bean keinen eigenen Customizer bereitstellt.) Wenn die Bean nicht weiß, wie ein BeanInfo-Objekt zurückgegeben werden soll, überprüft die IDE die Bean und durchsucht die Liste der Methoden nach Namen, die mit set und beginnen bekommen . Es wird (gemäß Konvention) davon ausgegangen, dass diese Methoden Zugriffsmethoden für Eigenschaften sind, und es wird ein neues Eigenschaftenblatt erstellt, das auf den vorhandenen Zugriffsmethoden und den Arten der Argumente basiert, die diese Methoden verwenden. Also, wenn die IDE finden Methoden wie setColor(Color), Color getColor(), setSize(Size), und Size getSize(), dann wird es eine Karteikarte mit den Eigenschaften erstellenFarbe und Größe sowie entsprechend eingegebene Widgets zum Festlegen.

Dies bedeutet, dass eine IDE automatisch bestimmen kann, wie ein Anpassungseigenschaftsblatt für die Komponente erstellt wird, wenn ein Entwickler einfach die Konventionen zum Benennen von Zugriffsmethoden befolgt.

Der Reflexionsmechanismus für die Selbstbeobachtung befindet sich im neuen Sprachkernpaket java.lang.reflect.

Ausdauer und Verpackung

Es ist oft nützlich, ein Objekt "einzufrieren", indem man seinen Status in einen Datenblock umwandelt, der zur späteren Verwendung weggepackt oder über ein Netzwerk zur Verarbeitung an anderer Stelle übertragen wird. Dieser Prozess wird als Serialisierung bezeichnet und ist eine neue Funktion des Java-Kerns.

Eine der einfachsten Anwendungen für die Serialisierung besteht darin, den Status einer angepassten Bean zu speichern, damit die Eigenschaften einer neu erstellten Bean zur Laufzeit korrekt festgelegt werden können.

Die Serialisierung ist auch eine Hauptstütze der Komponententechnologie und ermöglicht verteilte Verarbeitungsschemata wie CORBA. Wenn ein Objekt lokal nicht über die Informationen verfügt, die es zur Ausführung seiner Aufgabe benötigt, kann es sich selbst an einen Anforderungsbroker senden, der das Objekt serialisiert und zur Verarbeitung an eine andere Stelle sendet. Auf der entfernten Seite wird das Objekt wiederhergestellt und die ursprünglich angeforderte Operation wird ausgeführt. Dies ist auch eine Möglichkeit, einen Lastausgleich zu realisieren (für teure Aufgaben, dh Serialisierung und Deserialisierung sind oft nicht billig).

Wo halten Sie eine Gruppe gefriergetrockneter Bohnen, die auf diese Weise "eingelegt" wurden? Warum natürlich in einem JAR! Die JavaBeans-Spezifikation beschreibt eine JAR- Datei als strukturierte ZIP-Datei, die mehrere serialisierte Objekte, Dokumentationen, Bilder, Klassendateien usw. enthält, mit einem Manifest , das beschreibt, was in der JAR enthalten ist. Eine JAR-Datei, die viele komprimierte kleine Dateien enthält, kann in einem Stück heruntergeladen und auf der Client-Seite dekomprimiert werden, wodurch das Herunterladen von Applets (zum Beispiel) effizienter wird. (JAR ist ziemlich offensichtlich ein Spiel mit dem Unix- Tar- Dateiformat.)

Das java.ioPaket bietet Objekt-Serialisierung. Die JavaBeans-Spezifikation beschreibt das Format von JAR-Dateien.

Interoperation

Einige Waggons sagten einmal, dass das Schöne an Standards ist, dass es so viele zur Auswahl gibt. Komponententechnologien sind keine Ausnahme. Es gibt viele vorhandene Systeme, die auf OLE (oder seiner neuesten Version, ActiveX), OpenDoc und LiveConnect basieren. JavaBeans wurde entwickelt, um (zumindest irgendwann) mit diesen anderen Komponententechnologien zusammenzuarbeiten.

Es ist nicht realistisch zu erwarten, dass Entwickler bestehende Investitionen in andere Technologien aufgeben und alles in Java neu implementieren. Seit der Veröffentlichung von Java 1.1 sind die ersten Beans / ActiveX-Bridge-Kits verfügbar, mit denen Entwickler Beans- und ActiveX-Komponenten nahtlos in derselben Anwendung verknüpfen können. Die Java IDL-Schnittstelle, mit der Java-Klassen mit vorhandenen CORBA-Systemen betrieben werden können, soll in diesem Jahr erscheinen.

Während die Beans / ActiveX-Bridge und Java IDL nicht Teil der Standard-JavaBeans-Distribution sind, runden sie die Fähigkeiten von JavaBeans als industrietaugliche, offene Technologie für tragbare Komponentensoftware ab.

Fazit

Wir haben viel Boden unter den Füßen. In diesem Artikel haben Sie erfahren, was Softwarekomponenten sind und warum sie wertvoll sind. Anschließend lernten Sie die verschiedenen Eigenschaften von JavaBeans kennen, einschließlich Eigenschaften, Anpassung, Ereignisse, Selbstbeobachtung, Persistenz, Verpackung und Interaktion mit älteren Komponentensystemen.

Im nächsten Artikel dieser Reihe werden wir Sie mit der Verwendung von JavaBeans vertraut machen und die Bean-Eigenschaften im Detail untersuchen: wie sie funktionieren und wie Sie Ihre Beans anpassbar machen. Im weiteren Verlauf werden wir die neuen Java-Kernfunktionen diskutieren, die Beans ermöglichen. Zukünftige Artikel in dieser Reihe werden sich mit den Details der Themen befassen, die wir diesen Monat besprochen haben.

Mark Johnson hat einen BS in Computer- und Elektrotechnik von der Purdue University (1986). Er verfügt über 15 Jahre Erfahrung in der Programmierung in C und zwei Jahre in C ++ und ist ein fanatischer Anhänger des Design Pattern-Ansatzes in der objektorientierten Architektur, der Softwarekomponenten in der Theorie und von JavaBeans in der Praxis. In den letzten Jahren arbeitete er für Kodak, Booz-Allen und Hamilton sowie EDS in Mexiko-Stadt und entwickelte Oracle- und Informix-Datenbankanwendungen für das mexikanische Federal Electoral Institute und für den mexikanischen Zoll. Das letzte Jahr arbeitete er bei NETdelivery, einem Internet-Startup in Boulder, CO. Mark ist ein eingefleischter Unix-Programmierer und sieht Java als das fehlende Bindeglied zwischen den mittlerweile allgegenwärtigen Desktop-Client-Systemen und offenen, verteilten, und skalierbare Unternehmens-Backends.Derzeit arbeitet er als Designer und Entwickler für Object Products in Fort Collins, CO.

Erfahren Sie mehr über dieses Thema

  • Einen hervorragenden Vergleich von JavaBeans und ActiveX findet sich in der JavaWorld- Titelgeschichte von Merlin Hughes : "JavaBeans und ActiveX gehen Kopf an Kopf".

    //www.javaworld.com/javaworld/jw-03-1997/jw-03-avb-tech.html

  • Sun Microsystems unterhält eine Website für JavaBeans. Auf dieser Website können Sie das neueste BDK (Beans Developer's Kit) herunterladen, die JavaBeans-Spezifikation lesen, in einem Online-Tutorial surfen und sich über die neuesten Informationen zu Beans informieren. //java.sun.com/beans
  • Der JavaBeans Advisor , ein gelegentlicher elektronischer Newsletter mit Beans-Nachrichten und Entwicklertipps, ist unter archiviert

    //splash.javasoft.com/beans/Advisor.html

  • Die von Sun gepflegten JavaBeans-FAQ finden Sie unter

    //splash.javasoft.com/beans/FAQ.html

  • Schließlich ist die Omphaloskepsis eine Form der introspektiven Meditation, die eine intensive Betrachtung des Nabels beinhaltet. Schauen Sie sich die Word A Day-Website an und füllen Sie Ihre tägliche Rede mit obskuren Referenzen! //www.wordsmith.org/awad/index.html

Diese Geschichte "Ein Rundgang durch JavaBeans" wurde ursprünglich von JavaWorld veröffentlicht.