5. JavaBeans - Komponentenbasierte Softwareentwicklung

In diesem Teil der Arbeit soll zunächst eine Einführung in die komponentenbasierte Softwareentwicklung gegeben werden. Weiterhin wird eine kleine Einführung in JavaBeans gegeben und es erfolgt ein Vergleich zwischen JavaBeans und anderen Komponentenmodellen.

5.1 Motivation zur komponentenbasierten Softwareentwicklung

Softwaresysteme und -projekte werden zum einen immer umfangreicher und komplexer, zum anderen ist es für Softwarehersteller aus betriebswirtschaftlichen Aspekten sehr wichtig schnell mit leistungsfähigen Produkten am Markt zu sein, da sonst andere Hersteller als erste "den Fuß in der Tür" haben. Dies erfordert einen schnellen Entwicklungsprozeß für neue Softwareprodukte und eine effiziente Nutzung von bereits vorhandenem Know-How. Die Herstellung neuer und die Verwendung bereits vorhandener Softwarekomponenten (Softwarebausteine) soll kurze Entwicklungszyklen und eine effiziente Projektorganisation ermöglichen. Wesentliche Punkte die zur Verwendung von Softwarekomponenten motivieren sollen sind somit:
  Als Lösungsansatz bietet sich die Verwendung objektorientierter Programmiersprachen an (wiederverwendbare Klassenbibliotheken). Jedoch ist hierbei auf die durchaus unterschiedliche Objektphilosophie zu achten. So unterstützen manche Sprachen Mehrfachvererbung (z.B. C++), andere nur Einfachvererbung (z.B. Java).

5.2 Einführung in die lokale Komponentenarchitektur

Wahrscheinlich hat fast jeder, der diese Arbeit liest schon einmal mit komponentenbasierter Software gearbeitet (z.B. Office-Anwendungen). Hierbei handelt es sich meist um (rechner-)lokale Komponenten, in denen die Componentware ihren Ursprung hat. Auch JavaBeans ist eine lokale Komponentenarchitektur. Daher soll in diesem Abschnitt zunächst erklärt werden, wie lokale komponentenbasierte Applikationen aufgebaut sind und arbeiten.

5.2.1 Das Objektmodell

Ein Objektmodell legt die grundsätzliche Architektur für die Softwarekomponenten fest und muß im wesentlichen folgende Anforderungen erfüllen:

5.2.2 Aufbau einer lokalen komponentenbasierten Anwendung

Eine komponentenbasierte Applikation ist im wesentlichen aus drei zu unterscheidenden Bestandteilen aufgebaut: Container-Anwendung, Softwarekomponenten und Componentware-Infrastruktur.

Die Containeranwendung besteht aus einem Anwendungsgerüst und aus mehreren binären Softwarekomponenten, denen spezielle Aufgabe zukommen. Bei diesen Komponenten handelt es sich um Softwarebausteine, die als solche in mehrere Anwendungen eingebunden werden können. Eine Komponente könnte ein z.B. Listenfeld sein, das in einer Anwendung eingesetzt wird. Aber auch eine komplexe Tabellenkalkulation kann einen Baustein einer noch komplexeren Anwendung darstellen. Zur Regelung der Kommunikation zwischen den einzelnen Komponenten wird eine Componentware-Infrastruktur benötigt. Hier verwendet man meist ORB-basierte Ansätze (ORB = Objekt Request Broker). Ein ORB ist ein Softwarebus, der die Kommunikation zwischen Objekten regelt.
 
Man darf diese Aufteilung jedoch nicht als starre Funktionszuordnung betrachten, die eine Komponente erhält, sondere eher als wechselnde Rolle, die ein Softwarebaustein einnehmen kann. So ist es durchaus möglich bzw. beabsichtigt, daß eine Komponente im einen Fall als Container eingesetzt wird und in einem anderen Fall nur als Komponente.

5.2.3 Anforderungen an das Komponentenmodell

Das Komponentenmodell legt wie ein Objektmodell spezielle Anforderungen für Komponenten fest und muß vor allem die Anforderungen, die an ein Objektmodell gestellt werden erfüllen. Es legt aber darüber hinaus Verhaltensweisen für Softwarebausteine fest, die sichergestellt sein müssen, damit diese in einer Anwendung (bzw. in mehreren) verwendet werden können. Daher sind folgende Anforderungen unbedingt zu erfüllen: Durch diese Spezifikationen soll zum einen der Entwicklungsprozeß vereinfacht werden (insbesondere bei der Verwendung von Fremdkomponenten) und zum anderen soll die Funktionsfähigkeit zur Laufzeit sichergestellt werden.

5.2.4 Verteilte Komponentenarchitektur

Prinzipiell ist diese verteilte Komponentenarchitektur mit der lokalen vergleichbar. Ein wesentlicher Unterschied ist, daß hier netzwerkweite Softwarekomponenten verwendet werden. Dies hat zur Folge, daß zusätzlich bzw. ergänzend zur Componentware-Infrastruktur eine Verteilungsplattform benötigt wird, welche die Kommunikation zwischen Softwarekomponenten über Rechnergrenzen hinweg ermöglicht.

Die Verwendung  entfernter Objekte oder Komponenten macht es erforderlich, daß man Zugriff auf den Adreßraum eines entfernten Rechners hat. Zu diesem Zweck erhält eine lokale Komponente eine Referenz auf ein entferntes Objekt auf einem anderen Rechner. Da es nicht ohne weiteres möglich ist auf den Adreßraum eines anderen Rechners zuzugreifen, arbeitet man mit einer Kopie des Adreßraum an einer bestimmten Adresse. Mit Hilfe von sogenannten Factory-Objekten kann man auch Objekte auf fremden Rechnern erzeugen.

Derzeit sind solche verteilten Komponentenarchitekturen ein sehr aktuelles Thema. CORBA hat sich in diesem Bereich schon sehr behauptet, steht jedoch anderen Komponentenarchitekturen gegenüber. In Abschnitt 5.4 wird nochmals darauf eingegangen.

5.3 JavaBeans - Das Komponentenmodell für Java

In diesem Anschnitt soll JavaBeans vorgestellt werden. Es ist aufgrund des begrenzten Umfangs dieser Arbeit jedoch nicht möglicht JavaBeans in allen Einzelheiten vorzustellen. Vielmehr soll hier das Konzept von JavaBeans erläutert und von anderen Komponentenmodellen abgegrenzt werden. Für einen tieferen Einblick in JavaBeans sind folgende Quellen sehr hilfreich:

http://www.javasoft.com/beans/
http://www.javasoft.com/beans/docs/spec.html

5.3.1 Das Konzept von JavaBeans

JavaBeans ist eine plattformunabhängige Architektur für Java-Komponenten. Beans sind (Java-)Komponenten, aus denen sich Java-Applets und Applikationen modular zusammensetzen lassen. Während bei Java das Objekt die kleinste Einheit darstellt, so ist es bei JavaBeans eben ein Bean. Diese Komponenten haben bestimmte Eigenschaften (Attribute) und ein bestimmtes externes Verhalten (Ereignisse und Methoden).

Beans arbeiten innerhalb eines Containers (z.B. Webbrowser, Bean-Box, über ActiveX-Bridge auch in ActiveX-Container), können aber auch selbst die Rolle des Containers einnehmen. Normalerweise sind Beans relativ komplexe Elemente einer grafischen Oberfläche, wie z.B. eine Kalkulationstabelle oder ein Kalender-Steuerelement. Entwickler, die Erfahrung mit OLE(OCX)- und VBX-Komponenten haben, werden erkennen, daß hier erhebliche Ähnlichkeiten zu JavaBeans bestehen.

Da die Ereignisse und Eigenschaften von JavaBeans die zwei wesentlichen Bestandteile diese Konzepts sind, sollen diese anschließend genauer dargestellt werden.

5.3.2 Eigenschaften

Eigenschaften sind Public-Attribute eines Beans und dienen der Beeinflussung von Verhalten und Erscheinung einer Komponente. Der Zugriff auf die Eigenschaften erfolgt gemäß dem Prinzip der Datenkapselung über lesende und schreibende Elementfunktionen. JavaBeans unterscheidet vier Typen von Eigenschaften: Einfache, indizierte, gebundene und zwingende.
 

Einfache Eigenschaften

Einfache Eigenschaften repräsentieren einen einzigen Wert Auch werden hier nur die einfachen Datentypen von Java verwendet. Diese sind z.B. int, float, Boolean, ...

Beispiel:

public class SimpleBean extends Canvas {

}

Indizierte Eigenschaften

Indizierte Eigenschaften ermöglichen die Verwendung von Arrays als Eigenschaft eines Beans. Somit können mehrere Werte in einer Eigenschaft zusammengefaßt werden. Der Zugriff auf die einzelnen Komponenten erfolgt über einen Index (Integer). Ein Beispiel für eine solche Menge sei z.B. eine Menge von Farben, die ein Button haben kann.

Beispiel:

public class SimpleBean extends Canvas {

}

Gebundene Eigenschaften

Gebundene Eigenschaften dienen zur Benachrichtigung über Zustandsänderungen eines Beans. Sie bieten die Möglichkeit zur Information anderer Objekte, falls sich der Wert einer Eigenschaft ändert. In diesem Fall wird ein spezielles Ereignis ausgelöst (siehe 3.3), auf das der Empfänger dann reagieren kann.

Beispiel:

public class Sender extends Canvas {

}

Zwingende Eigenschaften

Diese Eigenschaften erlauben die Validierung einer durchzuführenden Änderung durch ein anderes Objekt bzw. eine andere Komponente. Sie lassen sich auch mit gebundenen Eigenschaften kombinieren, wobei dies nur sinnvoll ist, wenn man die zwingende Eigenschaft der gebundenen voranstellt. Im Falle einer fehlgeschlagenen Validierung wird die gebundene Eigenschaft dann nicht mehr berücksichtigt.

5.3.3 Ereignisse

Damit einzelne JavaBeans miteinander zusammenwirken können, müssen sie miteinander kommunizieren. Das Ereignismodell stellt einen Mechanismus bereit, mit dessen Hilfe eines oder mehrere Objekte über Zustandsänderungen eines Objekts informiert werden.

Ein Ereignis geht immer von einer Ereignisquelle aus und wird an einen Ereignisempfänger weitergeleitet. Dieser muß dann eine entsprechende Ereignismethode zur Verfügung stellen. Ereignisquellen haben eine Liste von Ereignisempfängern. In der Liste müssen sich die Empfänger registrieren , indem sie eine Referenz auf ihre Ereignisbehandlungsmethode übergeben. Somit wissen die Quellen, wen sie benachrichtigen sollen.

Neben diesen mehrfachen möglichen Empfängern (Multicast), ermöglicht es das Ereignismodell auch nur genau einen (bestimmten) Empfänger zuzulassen (Unicast-Ereignis). Zur Vermeidung von Deadlocks innerhalb eines Multithreading-Systems stellt JavaBeans einen Synchronisationsmechnismus bereit.

5.3.4 Enterprise JavaBeans

JavaBeans wurde als lokales Komponentenmodell entworfen. Zur Nutzung von entfernten Ressourcen wurde erst vor kurzer Zeit das Konzept der Enterprise JavaBeans entworfen. Folgende Features sollen die Verteilung von JavaBeans ermöglichen: Aktuelle Informationen zu Enterprise Java Beans: http://www.javasoft.com/products/ejb/

5.4 JavaBeans im Vergleich zu CORBA und ActiveX/DCOM

5.4.1 CORBA und ActiveX

CORBA

CORBA ist ein von der OMG (Object Management Group) definierter Standard (also keine Implementierung) zur Realisierung verteilter, objektorientierter Anwendungen. CORBA ist unabhängig von Betriebssystem, Rechnerarchitektur und Programmiersprachen. Letzeres wird durch die von der OMG spezifizierte CORBA-IDL (Interface Definition Language) erreicht. Hierbei handelt es sich um eine ausführliche, standardisierte Beschreibungssprache zur Definition von allgemeinen Schnittstellen. Mit Hilfe eines IDL-Compilers werden schließlich die programmiersprachenspezifischen Schnittstellen erzeugt.

Folgendes Beispiel soll diese Vorgehensweise unter Verwendung der CORBA-Plattform ILU verdeutlichen:

IDL-Schnittstelle:

module Test {

};

Mit dem IDL-Compiler erzeugte Java-Schnittstelle:

public class Taschenrechner implements stubs.Test.Taschenrechner {
    // ..
    public double GibWert() {
        return aktuellerWert;
    }
    //..
}
 

Entsprechend kann auch eine C++-Schnittstelle erzeugt werden:

class Test_T_Taschenrechner : public virtual iluObject {

 public:

  Test_T_Taschenrechner();   // constructor
  virtual ~Test_T_Taschenrechner();  // destructor
//..
  virtual double GibWert (TestStatus *_status);
//..
};
 

CORBA ermöglicht eine Kommunikation über verschiedenen Adreßräume hinweg. Ein Softwarebus (ORB) regelt die Verwaltung von Objekten und Methoden der unterschiedlichen Softwarekomponenten. Der Entwickler muß sich also nicht mit technischen oder kommunikationsspezifischen Fragestellungen auseinandersetzen.
 

ActiveX/DCOM

ActiveX ist die von Microsoft entwickelte Komponentenarchitektur für das Internet und kann als Nachfolger der VBX- und OCX-Komponenten angesehen werden. Im Gegensatz zu JavaBeans ist ActiveX jedoch nicht plattformunabhängig, sondern an Windows gebunden. ActiveX-Komponenten müssen sich in der Windows-Registrierungs-Datenbank anmelden.

Das zugehörige Komponetenmodell für ActiveX ist COM (Component Object Model) bzw. DCOM (Distributed Component Object Model). Beides sind ORB-basierte Komponentenmodelle. Während COM nur einen Object Request Broker für einen einzelnen Rechner zur Verfügung stellt, soll DCOM die netzwerkweite Kommunikation zwischen Softwarekomponeten ermöglichen.

Seit September 1996 ist DCOM Bestandteil von WindowsNT (Version 4.0) und seit Anfang 1997 ist es auch Bestandteil des Betriebssystems Windows 95. Dadurch hat DCOM natürlich schon weite Verbreitung gefunden. Die Implementierung von DCOM-Komponenten ist in verschiedenen Programmiersprachen möglich, auch in relativ "einfachen" und in der Praxis sehr verbreiteten Sprachen, wie Visual Basic.

Microsoft möchte mit dieser Komponentenarchitektur wieder einen eigenen Standard durchsetzen, an den sich schließlich alle anderen wieder mit ihren Konzepten anpassen müssen. So ist DCOM nicht CORBA-konform und auch JavaBeans muß sich noch gegen ActiveX behaupten. Abschließend wird nun ein Vergleich zwischen JavaBeans, CORBA und ActiveX vorgenommen.

5.4.2 Die drei Komponentenplattformen im Vergleich

Plattformunabhängigkeit

Im Gegensatz zu JavaBeans und CORBA ist ActiveX an eine Plattform gebunden. Jedoch ist eine Portierung auf anderen Plattformen geplant. In der Computerwoche 6/98 hat Microsoft COM-Komponenten für Unix angekündigt.

Verbreitung

ActiveX/DCOM hat den Vorteil einer sehr weiten Verbreitung, da es integraler Bestandteil des Windows-Betriebssystems ist. Auch die Verwendung von stark verbreiteten Programmiersprachen, wie Visual Basic ist ein Vorteil.
Die Verbreitung von CORBA ist durch die zahlreichen namhaften Mitglieder der OMG (z.B. SUN, 3COM, Hewlett-Packard, Canon, ...) auch schon weit fortgeschritten. JavaBeans ist in der Verbreitung leider noch etwas zurück, was wohl auch darauf zurückzuführen ist, daß es das neuste der drei Konzepte ist.

Programmiersprachen

JavaBeans und auch Enterprise Java Beans sind Java-spezifisch, können jedoch über Bridges in andere Systeme integriert werden. CORBA hat den Vorteil völlig sprachunabhängig zu sein, stellt jedoch teilweise recht hohe Ansprüche an den Entwickler. ActiveX ist vor allem auch für "einfache" Programmiersprachen verfügbar.

Sicherheit

JavaBeans wurde unter Sicherheitsaspekten entwickelt. Die Beans laufen auf der "Java Virtual Machine" und haben keinen Zgriff auf Dateien und Anwendungen. CORBA kann ebenfalls als sicher angesehen, insbesondere kann hier auch der Entwickler selbst für Sicherheit sorgen. Im Gegensatz dazu kann man ActiveX erhebliche Sicherheitsprobleme vorwerfen, da die ActiveX-Controls Zugriff auf das Betriebssystem, seine Dateien und Anwendungen haben.

Geschwindigkeit

Ein großes Problem von Java Beans ist die Geschwindigkeit: Der plattformunabhängige Code muß von der Virtual Machine interpretiert werden. ActiveX ist schnell, da es speziell für Windows optimiert ist, was jedoch aufgrund der Plattformabhängigkeit nicht nur als Vorteil angesehen werden kann. CORBA hat keine Geschwindigkeitprobleme, da der Entwickler eigentlich selbst für die Performanz seiner Applikationen verantwortlich ist und diese der jeweiligen Plattform angepaßt werden kann.
 
[Zurück]          [Inhalt]          [Weiter]