5 Portierung von Bibliotheken

Die meisten nativen Routinen sind im Bibliothekssystem der Java-API zu finden. Die Kernbibliotheken der JDK 1.0.x1 sind java.io, java.net und java.awt, das Abstract Window Toolkit (AWT). Diese beinhaltet Funktionen für eine grafisches Benutzerinterface (GUI) und für grafische Ausgaben.

5.1 Abstract Window Toolkit

Das AWT ist eine portable GUI-Bibliothek für Java. Diese kann man in einem Java Programm durch den Befehl import java.awt.* einbinden.

Das AWT soll nachfolgend als Beispiel näher beschrieben werden, um Probleme und Lösungsmöglichkeiten für eine Portierung oder Implementierung bei schon laufendem Runtime zu zeigen.

5.1.1 java.awt

Das AWT, im package java.awt, bietet Funktionen für die Gestaltung von graphischen Benutzerinterfaces. Neben den reinen GUI-Komponenten enthält es aber auch grundlegende Klassen zur Grafikausgabe.

Abbildung 5.1: OMT-Diagramm: java.awt.*
Das OMT-Diagramm in Abbildung 5.1 zeigt einige der Klassen und ihre Beziehungen2.

Als GUI-Klassen gibt es Komponenten und Layoutmanager. Komponenten sind entweder einzelne Objekte, wie Button, Label, List, etc., oder Container, die mehrerer Komponenten beinhalten. LayoutManager kontrollieren das Layout der Elemente innerhalb eines Containers.

Wichtigste Grafik-Klasse ist java.awt.Graphics, die ist als abstrakte Klasse definiert ist und eine systemunabhängige Schnittstelle zur Grafik herstellt. Graphics-Objekte können nicht direkt erzeugt werden, aber sie können über die getGraphics()-Routine einer Komponete angefordert werden.

5.1.2 java.awt.peer

Das Package java.awt.peer besteht vollständig aus Interface-Definitionen (vgl. Abbildung 5.2).

Abbildung 5.2: Struktur der java.awt.peer-Interfaces

Die Hirachie entspricht fast vollständig der des Packages java.awt. Ziel der Peer-Spezifikationen ist es, eine abstrakte Schnittstelle für die GUI-Implementierung auf verschiedenen Plattformen zu bieten (vgl. Abschnitt 2.3).

5.1.3 sun.awt.win32

Bei Implementierung des AWT gilt es, die in Abschnitt 5.1.1 beschriebene Klassenstruktur und Funktionalität zur Verfügung zu stellen.

Sun hat für die Einbindung des AWT eine abstrakte Klasse java.awt.Toolkit vorgesehen. Eine AWT-Implementation muß diese erweitern und die entsprechenden Funktionen besitzen. Bei Benutzung von AWT-Objekten wird dieses Toolkit einmal instanziert und mit seinen Funktionen das entsprechende Objekt zurückgeliefert. Im Diagramm in Abbildung 5.3 wird ein kleiner Ausschnitt der von Sun entwickelten Toolkits für Windows und Motif dargestellt.

Abbildung 5.3: OMT-Diagramm: sun.awt.*.MToolkit

Wird in einem Java-Programm ein Button-Objekt der Klasse java.awt.Button eingebunden, erzeugt das Windows-Toolkit ein Objekt der Klasse sun.awt.win32.MButtonPeer und gibt dies zurück. Damit die tatsächliche Implementierung der Grafik und GUI-Objekte mit denen der AWT-Spezifikation übereinstimmt, müssen diese Klassen die Interfaces des java.awt.peer Paketes unterstützen. Die Klasse sun.awt.win32.MButtonPeer implementiert zum Beispiel das Interface java.awt.peer.ButtonPeer.

Ein großer Teil der AWT ist somit in Java selbst geschrieben, nur um tatsächliche Objekte auf dem Bildschirm zu erzeugen, werden ca. 140 native Methoden benötigt.

Die 1.0.x Implementierung von Sun baut unter Solaris auf das Motif-Framework3 und unter Windows auf die Microsoft Foundation Classes (MFC) auf. Eine Klasse MButtonPeer mit ihrer nativen Methode create() wird deshalb auf das entsprechende C++-äquivalent der MFC mit den entsprechenden Routinen abgebildet. Das nachfolgende Programmsegment zeigt den C++-Code.

/* C++-Klasse AwtButton erbt von MFC CButton */

class AwtButton : public CButton
{
public: 
        AwtButton();
        ~AwtButton();

        /* ... */
}

Die im OMT-Diagramm (Abbildung 5.3) angedeutete C-Funktion sun_awt_win32_MButtonPeer_create() fungiert sozusagen als Schnittstelle zwischen dem in Java und in C++ geschriebenen Code.

Auf Grund dieser Struktur der sun.awt.win32 hängt der Aufwand, die AWT-Bibliothek der JDK 1.0.x von Windows auf andere Systeme zu portieren, sehr von den dortigen Gegebenheiten ab. Mit einem Fenster-Framework, daß in Struktur, Umfang und Leistungsfähigkeit den MFC entspricht, wäre es möglich, den Sun-Code 1:1 umzusetzen. Der in Java geschriebene Teil könnte ohne änderungen übernommen werden, und der C++-Code muß nur an die neuen GUI-Objekte angepasst werden. Da die AWT nur eine relativ kleine Standard-GUI-Menge darstellt, ist dies oft möglich.

Wenn ein entsprechendes Framework nicht existiert, oder es eine andere Struktur besitzt, liegt der Hauptaufwand der Portierung in der Abbildung des AWT.

Mit der Freigabe der 1.1-Beta-Release der JDK hat JavaSoft den AWT-Windows-Teil vollkommen neu geschrieben und unabhängig von den Microsoft Foundation Classes gestaltet. Derzeit ist diese Software aber noch im öffentlichen Beta-Test und noch nicht fehlerfrei.

5.1.4 Alternativen

BISS-AWT

Auf der Mailingliste für die unter der GNU General Public License erhältliche JVM kaffe hat Anfang 1997 eine für Unix-Plattformen mit Source-Code frei erhältliche AWT-Implementierung das Interesse auf sich gezogen, das BISS AWT.

Ursprünglich nur als Erweiterung und Anpassung des AWT an eigene Zwecke gedacht, hat der Hersteller (BISS GmbH) das BISS Java Framework entworfen, das aufbauend auf die Basisklassen Graphics, Frame, Panel und Canvas in java.awt eine selbständige graphische Benutzerschnittstelle definiert [BISS97].

In Zusammenhang mit der änderung der Lizenzbedingungen bei Freigabe der JDK 1.0.2 und den Überlegungen der Internetgemeinde zu einer frei erhältlichen JVM (JOLT, Java Open Language Toolkit), haben die Entwickler aufbauend auf das Framework die java.awt.peer Interfaces, sowie die für ein Stand-alone- System nötigen Grundklassen implementiert. Als Referenzsystem wurde Linux/X mit kaffe und den Xlib-Funktionen gewählt.

Abbildung 5.4: Baumstruktur der BISS-AWT

Ein Vorteil, den diese AWT-Implementierung gegenüber dem Sun-Original besitzt ist die große Systemunabhängigkeit (vgl. Abbildung 5.4): nur 1/3 der für die Sun AWT zu implementierenden Native-Methoden sind nötig. Durch einen konsequent hirachischen Aufbau werden alle GUI-Komponenten in Java implementiert und eben nur wenige Basisklassen mit systemabhängigen Aufrufen gebraucht.

SAWT

Ein anderer Ansatz ein freies Abtract Window Toolkit für Unix/X zu entwickeln ist das SAWT-Projekt. Hierbei werden ebenfalls alle Peer-Interfaces implementiert. Aber anders als das Sun-Entwicklerteam werden nicht das Motif-Framework, sondern direkt Xlib-Aufrufe verwendet.

Interessant an diesem Projekt ist die Herangehensweise; in vier Schritten soll die volle Funktionalität zur Verfügung gestellt werden.

A
API Gerippe
B
minimale Funktionalität (Anzeige)
C
ganze Funktionalität (Fonts, Farben, etc.)
D
optimierte Funktionen

SAWT befindet sich immer noch im ALPHA-Zustand, bei fast allen Komponeten ist erst Entwicklungsstand B (minimale Funktionalität) erreicht, und ist deshalb noch keine Alternative zur Sun-Implementation.

5.2 Weiterführendes

Das Abtract Window Toolkit stellt derzeit die größte zu portierende Bibliothek der JDK dar. Der Aufwand hierfür hängt stark von den Gegebenheiten auf der Zielplattform ab. Weiter Bibliotheken sind java.net oder sun.audio die in der JDK 1.0.x größtenteils in Java implementiert sind und deshalb weniger Portierungsaufwand erfordern.

Neben Java-Compiler und Interpreter sind die Kernbibliotheken Teil des Java-Systems (vgl. dazu Kapitel 2). Sie stehen auf jeder unterstützten Plattform zur Verfügung, und JavaSoft allein ist für die Definition der Schnittstellen zuständig.

Mit Einführung der JDK 1.1 hat JavaSoft diese unter anderem um die JDBC und die Java Security API erweitert. JDBC ist die Datenbankschnittstelle für Java, die Java-Programme den Zugriff auf rationale Datenbanken erlaubt. Die neue Java Security API enthält Funktionen für digitale Unterschriften, Verschlüsselung und Authentisierung.

Mit Implementierung dieser Kernbibliotheken besitzt Java eine auf allen Plattformen gleiche Umgebung und ermöglicht eine Softwareentwicklung für ein einheitliches System.


1) Mit Einführung der JDK 1.1 beta hat JavaSoft diese wesentlich erweitert.
2) Für eine Gesamtübersicht aller Klassen ist der Referenzteil von [Flan96] zu empfehlen. Eine Einführung in das AWT bietet [Yu95].
3) Motif ist eine Bibliothek zur Darstellung eines grafischen Benutzerinterfaces unter X

----------------------------------------------------------------
[home] [TOC] [prev] [next] [guestbook] [contact]          (c) SM